]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'master' of git://factorcode.org/git/factor
authorJoe Groff <arcata@gmail.com>
Thu, 18 Dec 2008 21:03:27 +0000 (13:03 -0800)
committerJoe Groff <arcata@gmail.com>
Thu, 18 Dec 2008 21:03:27 +0000 (13:03 -0800)
1277 files changed:
basis/alias/alias-docs.factor [deleted file]
basis/alias/alias.factor [deleted file]
basis/alias/authors.txt [deleted file]
basis/alias/summary.txt [deleted file]
basis/alien/c-types/c-types.factor
basis/alien/strings/windows/tags.txt [new file with mode: 0644]
basis/alien/structs/fields/fields.factor
basis/alien/syntax/syntax.factor
basis/assoc-heaps/assoc-heaps-docs.factor [new file with mode: 0644]
basis/assoc-heaps/assoc-heaps-tests.factor [new file with mode: 0644]
basis/assoc-heaps/assoc-heaps.factor [new file with mode: 0644]
basis/assoc-heaps/authors.txt [new file with mode: 0644]
basis/bit-arrays/bit-arrays.factor
basis/bootstrap/finish-bootstrap.factor
basis/bootstrap/finish-staging.factor
basis/bootstrap/image/image-docs.factor
basis/bootstrap/image/image.factor
basis/bootstrap/image/upload/upload.factor
basis/bootstrap/io/io.factor
basis/bootstrap/stage2.factor
basis/cairo/authors.txt [new file with mode: 0644]
basis/cairo/cairo.factor [new file with mode: 0755]
basis/cairo/ffi/ffi.factor [new file with mode: 0644]
basis/cairo/gadgets/gadgets.factor [new file with mode: 0644]
basis/cairo/summary.txt [new file with mode: 0644]
basis/cairo/tags.txt [new file with mode: 0644]
basis/calendar/calendar.factor
basis/channels/remote/remote-docs.factor
basis/checksums/common/common.factor
basis/checksums/md5/md5.factor
basis/checksums/openssl/openssl-docs.factor
basis/checksums/sha1/sha1.factor
basis/checksums/sha2/sha2.factor
basis/cocoa/application/application-docs.factor
basis/cocoa/application/application.factor
basis/cocoa/cocoa.factor
basis/cocoa/dialogs/dialogs.factor
basis/cocoa/nibs/nibs.factor
basis/cocoa/pasteboard/pasteboard.factor
basis/cocoa/plists/plists.factor
basis/cocoa/views/views-docs.factor
basis/cocoa/windows/windows.factor
basis/columns/columns-docs.factor
basis/command-line/command-line.factor
basis/compiler/cfg/alias-analysis/alias-analysis.factor
basis/compiler/cfg/builder/builder-tests.factor
basis/compiler/cfg/hats/hats.factor
basis/compiler/cfg/instructions/syntax/syntax.factor
basis/compiler/cfg/intrinsics/intrinsics.factor
basis/compiler/cfg/linear-scan/linear-scan-tests.factor
basis/compiler/cfg/linearization/linearization.factor
basis/compiler/codegen/codegen.factor
basis/compiler/tests/codegen.factor
basis/compiler/tests/curry.factor
basis/compiler/tests/optimizer.factor
basis/compiler/tree/dead-code/dead-code-tests.factor
basis/compiler/tree/debugger/debugger.factor
basis/compiler/tree/modular-arithmetic/modular-arithmetic-tests.factor
basis/compiler/tree/propagation/known-words/known-words.factor
basis/compiler/tree/propagation/propagation-tests.factor
basis/concurrency/combinators/combinators.factor [changed mode: 0644->0755]
basis/concurrency/distributed/distributed-tests.factor
basis/concurrency/distributed/distributed.factor
basis/concurrency/messaging/messaging.factor
basis/cords/authors.txt [new file with mode: 0644]
basis/cords/cords-tests.factor [new file with mode: 0644]
basis/cords/cords.factor [new file with mode: 0644]
basis/cords/summary.txt [new file with mode: 0644]
basis/cords/tags.txt [new file with mode: 0644]
basis/core-foundation/arrays/arrays-docs.factor [new file with mode: 0644]
basis/core-foundation/arrays/arrays.factor [new file with mode: 0644]
basis/core-foundation/arrays/tags.txt [new file with mode: 0644]
basis/core-foundation/bundles/bundles-docs.factor [new file with mode: 0644]
basis/core-foundation/bundles/bundles.factor [new file with mode: 0644]
basis/core-foundation/bundles/tags.txt [new file with mode: 0644]
basis/core-foundation/core-foundation-docs.factor
basis/core-foundation/core-foundation-tests.factor [deleted file]
basis/core-foundation/core-foundation.factor
basis/core-foundation/data/data.factor [new file with mode: 0644]
basis/core-foundation/data/tags.txt [new file with mode: 0644]
basis/core-foundation/file-descriptors/file-descriptors.factor [new file with mode: 0644]
basis/core-foundation/file-descriptors/tags.txt [new file with mode: 0644]
basis/core-foundation/fsevents/fsevents.factor
basis/core-foundation/run-loop/run-loop.factor
basis/core-foundation/run-loop/thread/authors.txt [deleted file]
basis/core-foundation/run-loop/thread/summary.txt [deleted file]
basis/core-foundation/run-loop/thread/tags.txt [deleted file]
basis/core-foundation/run-loop/thread/thread.factor [deleted file]
basis/core-foundation/strings/strings-docs.factor [new file with mode: 0644]
basis/core-foundation/strings/strings-tests.factor [new file with mode: 0644]
basis/core-foundation/strings/strings.factor [new file with mode: 0644]
basis/core-foundation/strings/tags.txt [new file with mode: 0644]
basis/core-foundation/time/time.factor [new file with mode: 0644]
basis/core-foundation/timers/tags.txt [new file with mode: 0644]
basis/core-foundation/timers/timers.factor [new file with mode: 0644]
basis/core-foundation/urls/tags.txt [new file with mode: 0644]
basis/core-foundation/urls/urls-docs.factor [new file with mode: 0644]
basis/core-foundation/urls/urls.factor [new file with mode: 0644]
basis/cpu/ppc/assembler/assembler.factor
basis/cpu/ppc/assembler/backend/backend.factor
basis/cpu/ppc/bootstrap.factor
basis/cpu/ppc/ppc.factor
basis/cpu/x86/64/64.factor
basis/cpu/x86/assembler/syntax/syntax.factor
basis/cpu/x86/bootstrap.factor
basis/csv/csv.factor
basis/db/db-docs.factor
basis/db/db.factor
basis/db/pools/pools-tests.factor
basis/db/pools/pools.factor
basis/db/postgresql/lib/lib.factor
basis/db/postgresql/postgresql-tests.factor
basis/db/postgresql/postgresql.factor
basis/db/queries/queries.factor
basis/db/sqlite/lib/lib.factor
basis/db/sqlite/sqlite-tests.factor
basis/db/sqlite/sqlite.factor
basis/db/tuples/tuples-tests.factor
basis/db/tuples/tuples.factor
basis/db/types/types-docs.factor
basis/db/types/types.factor
basis/debugger/debugger.factor
basis/delegate/delegate-tests.factor
basis/delegate/delegate.factor
basis/editors/editors.factor
basis/editors/editpadlite/editpadlite.factor
basis/editors/editpadpro/editpadpro.factor
basis/editors/editplus/editplus.factor
basis/editors/emeditor/emeditor.factor
basis/editors/etexteditor/etexteditor.factor
basis/editors/gvim/unix/unix.factor
basis/editors/gvim/windows/windows.factor
basis/editors/jedit/jedit.factor
basis/editors/notepad2/notepad2.factor
basis/editors/notepadpp/notepadpp.factor
basis/editors/scite/scite.factor
basis/editors/ted-notepad/ted-notepad.factor
basis/editors/textpad/authors.txt [new file with mode: 0644]
basis/editors/textpad/summary.txt [new file with mode: 0644]
basis/editors/textpad/tags.txt [new file with mode: 0644]
basis/editors/textpad/textpad.factor [new file with mode: 0644]
basis/editors/ultraedit/ultraedit.factor
basis/editors/vim/vim-docs.factor
basis/editors/wordpad/wordpad.factor
basis/formatting/authors.txt [new file with mode: 0644]
basis/formatting/formatting-docs.factor [new file with mode: 0644]
basis/formatting/formatting-tests.factor [new file with mode: 0644]
basis/formatting/formatting.factor [new file with mode: 0644]
basis/formatting/summary.txt [new file with mode: 0644]
basis/fry/fry-docs.factor
basis/fry/fry-tests.factor
basis/fry/fry.factor
basis/ftp/client/client.factor
basis/ftp/client/listing-parser/listing-parser.factor
basis/ftp/server/server.factor
basis/functors/functors.factor
basis/furnace/alloy/alloy-docs.factor
basis/furnace/auth/auth-docs.factor
basis/furnace/auth/providers/db/db-tests.factor
basis/furnace/chloe-tags/chloe-tags.factor
basis/furnace/conversations/conversations-docs.factor
basis/furnace/db/db-docs.factor
basis/furnace/db/db.factor
basis/furnace/redirection/redirection-docs.factor
basis/furnace/sessions/sessions-docs.factor
basis/furnace/sessions/sessions-tests.factor
basis/grouping/grouping-docs.factor
basis/grouping/grouping.factor
basis/heaps/heaps-tests.factor
basis/heaps/heaps.factor
basis/help/cookbook/cookbook.factor
basis/help/handbook/handbook.factor
basis/help/help.factor
basis/help/html/html.factor
basis/help/lint/lint.factor
basis/help/markup/markup.factor
basis/help/syntax/syntax.factor
basis/hints/hints.factor
basis/html/templates/chloe/chloe-docs.factor
basis/html/templates/chloe/chloe.factor
basis/html/templates/fhtml/fhtml-docs.factor
basis/html/templates/fhtml/fhtml.factor
basis/http/client/client-docs.factor
basis/http/client/client.factor
basis/http/http-tests.factor
basis/http/http.factor
basis/http/server/server-docs.factor
basis/http/server/static/static.factor
basis/io/backend/unix/authors.txt [new file with mode: 0644]
basis/io/backend/unix/bsd/authors.txt [new file with mode: 0755]
basis/io/backend/unix/bsd/bsd.factor [new file with mode: 0644]
basis/io/backend/unix/bsd/tags.txt [new file with mode: 0644]
basis/io/backend/unix/freebsd/freebsd.factor [new file with mode: 0644]
basis/io/backend/unix/freebsd/tags.txt [new file with mode: 0644]
basis/io/backend/unix/linux/authors.txt [new file with mode: 0755]
basis/io/backend/unix/linux/linux.factor [new file with mode: 0644]
basis/io/backend/unix/linux/tags.txt [new file with mode: 0644]
basis/io/backend/unix/macosx/macosx.factor [new file with mode: 0644]
basis/io/backend/unix/macosx/tags.txt [new file with mode: 0644]
basis/io/backend/unix/multiplexers/epoll/authors.txt [new file with mode: 0755]
basis/io/backend/unix/multiplexers/epoll/epoll.factor [new file with mode: 0644]
basis/io/backend/unix/multiplexers/epoll/tags.txt [new file with mode: 0644]
basis/io/backend/unix/multiplexers/kqueue/authors.txt [new file with mode: 0755]
basis/io/backend/unix/multiplexers/kqueue/kqueue.factor [new file with mode: 0644]
basis/io/backend/unix/multiplexers/kqueue/tags.txt [new file with mode: 0644]
basis/io/backend/unix/multiplexers/multiplexers.factor [new file with mode: 0644]
basis/io/backend/unix/multiplexers/run-loop/run-loop.factor [new file with mode: 0644]
basis/io/backend/unix/multiplexers/run-loop/tags.txt [new file with mode: 0644]
basis/io/backend/unix/multiplexers/select/authors.txt [new file with mode: 0755]
basis/io/backend/unix/multiplexers/select/select.factor [new file with mode: 0644]
basis/io/backend/unix/multiplexers/select/tags.txt [new file with mode: 0644]
basis/io/backend/unix/netbsd/netbsd.factor [new file with mode: 0644]
basis/io/backend/unix/netbsd/tags.txt [new file with mode: 0644]
basis/io/backend/unix/openbsd/openbsd.factor [new file with mode: 0644]
basis/io/backend/unix/openbsd/tags.txt [new file with mode: 0644]
basis/io/backend/unix/summary.txt [new file with mode: 0644]
basis/io/backend/unix/tags.txt [new file with mode: 0644]
basis/io/backend/unix/unix-tests.factor [new file with mode: 0644]
basis/io/backend/unix/unix.factor [new file with mode: 0644]
basis/io/backend/windows/authors.txt [new file with mode: 0644]
basis/io/backend/windows/nt/authors.txt [new file with mode: 0755]
basis/io/backend/windows/nt/nt.factor [new file with mode: 0755]
basis/io/backend/windows/nt/privileges/privileges.factor [new file with mode: 0755]
basis/io/backend/windows/nt/privileges/tags.txt [new file with mode: 0644]
basis/io/backend/windows/nt/tags.txt [new file with mode: 0644]
basis/io/backend/windows/privileges/privileges.factor [new file with mode: 0644]
basis/io/backend/windows/privileges/tags.txt [new file with mode: 0644]
basis/io/backend/windows/summary.txt [new file with mode: 0644]
basis/io/backend/windows/tags.txt [new file with mode: 0755]
basis/io/backend/windows/windows.factor [new file with mode: 0755]
basis/io/directories/authors.txt [new file with mode: 0644]
basis/io/directories/directories-docs.factor [new file with mode: 0644]
basis/io/directories/directories-tests.factor [new file with mode: 0644]
basis/io/directories/directories.factor [new file with mode: 0755]
basis/io/directories/hierarchy/authors.txt [new file with mode: 0644]
basis/io/directories/hierarchy/hierarchy-docs.factor [new file with mode: 0644]
basis/io/directories/hierarchy/hierarchy.factor [new file with mode: 0644]
basis/io/directories/hierarchy/summary.txt [new file with mode: 0644]
basis/io/directories/search/authors.txt [new file with mode: 0755]
basis/io/directories/search/search-tests.factor [new file with mode: 0644]
basis/io/directories/search/search.factor [new file with mode: 0755]
basis/io/directories/search/windows/authors.txt [new file with mode: 0644]
basis/io/directories/search/windows/tags.txt [new file with mode: 0644]
basis/io/directories/search/windows/windows.factor [new file with mode: 0644]
basis/io/directories/summary.txt [new file with mode: 0644]
basis/io/directories/unix/tags.txt [new file with mode: 0644]
basis/io/directories/unix/unix.factor [new file with mode: 0644]
basis/io/directories/windows/tags.txt [new file with mode: 0644]
basis/io/directories/windows/windows.factor [new file with mode: 0755]
basis/io/encodings/8-bit/8-bit.factor
basis/io/encodings/binary/authors.txt [new file with mode: 0644]
basis/io/encodings/binary/binary-docs.factor [new file with mode: 0644]
basis/io/encodings/binary/binary.factor [new file with mode: 0644]
basis/io/encodings/binary/summary.txt [new file with mode: 0644]
basis/io/encodings/binary/tags.txt [new file with mode: 0644]
basis/io/files/info/authors.txt [new file with mode: 0644]
basis/io/files/info/info-docs.factor [new file with mode: 0644]
basis/io/files/info/info-tests.factor [new file with mode: 0644]
basis/io/files/info/info.factor [new file with mode: 0644]
basis/io/files/info/summary.txt [new file with mode: 0644]
basis/io/files/info/unix/bsd/bsd.factor [new file with mode: 0644]
basis/io/files/info/unix/bsd/tags.txt [new file with mode: 0644]
basis/io/files/info/unix/freebsd/freebsd.factor [new file with mode: 0644]
basis/io/files/info/unix/freebsd/tags.txt [new file with mode: 0644]
basis/io/files/info/unix/linux/linux.factor [new file with mode: 0644]
basis/io/files/info/unix/linux/tags.txt [new file with mode: 0644]
basis/io/files/info/unix/macosx/macosx.factor [new file with mode: 0644]
basis/io/files/info/unix/macosx/tags.txt [new file with mode: 0644]
basis/io/files/info/unix/netbsd/netbsd.factor [new file with mode: 0644]
basis/io/files/info/unix/netbsd/tags.txt [new file with mode: 0644]
basis/io/files/info/unix/openbsd/openbsd.factor [new file with mode: 0644]
basis/io/files/info/unix/openbsd/tags.txt [new file with mode: 0644]
basis/io/files/info/unix/tags.txt [new file with mode: 0644]
basis/io/files/info/unix/unix-docs.factor [new file with mode: 0644]
basis/io/files/info/unix/unix.factor [new file with mode: 0644]
basis/io/files/info/windows/tags.txt [new file with mode: 0644]
basis/io/files/info/windows/windows.factor [new file with mode: 0755]
basis/io/files/links/authors.txt [new file with mode: 0644]
basis/io/files/links/links-docs.factor [new file with mode: 0644]
basis/io/files/links/links.factor [new file with mode: 0644]
basis/io/files/links/summary.txt [new file with mode: 0644]
basis/io/files/links/unix/tags.txt [new file with mode: 0644]
basis/io/files/links/unix/unix.factor [new file with mode: 0644]
basis/io/files/temp/temp-docs.factor [new file with mode: 0644]
basis/io/files/temp/temp.factor [new file with mode: 0644]
basis/io/files/types/types-docs.factor [new file with mode: 0644]
basis/io/files/types/types.factor [new file with mode: 0644]
basis/io/files/unique/unique-docs.factor
basis/io/files/unique/unique-tests.factor
basis/io/files/unique/unique.factor
basis/io/files/unique/unix/tags.txt [new file with mode: 0644]
basis/io/files/unique/unix/unix.factor [new file with mode: 0644]
basis/io/files/unique/windows/tags.txt [new file with mode: 0644]
basis/io/files/unique/windows/windows.factor [new file with mode: 0644]
basis/io/files/unix/authors.txt [new file with mode: 0644]
basis/io/files/unix/summary.txt [new file with mode: 0644]
basis/io/files/unix/tags.txt [new file with mode: 0644]
basis/io/files/unix/unix-tests.factor [new file with mode: 0644]
basis/io/files/unix/unix.factor [new file with mode: 0644]
basis/io/files/windows/nt/authors.txt [new file with mode: 0755]
basis/io/files/windows/nt/nt-tests.factor [new file with mode: 0644]
basis/io/files/windows/nt/nt.factor [new file with mode: 0755]
basis/io/files/windows/nt/tags.txt [new file with mode: 0644]
basis/io/files/windows/tags.txt [new file with mode: 0644]
basis/io/files/windows/windows.factor [new file with mode: 0755]
basis/io/launcher/launcher.factor [changed mode: 0644->0755]
basis/io/launcher/unix/authors.txt [new file with mode: 0755]
basis/io/launcher/unix/parser/parser-tests.factor [new file with mode: 0644]
basis/io/launcher/unix/parser/parser.factor [new file with mode: 0644]
basis/io/launcher/unix/parser/tags.txt [new file with mode: 0644]
basis/io/launcher/unix/tags.txt [new file with mode: 0644]
basis/io/launcher/unix/unix-tests.factor [new file with mode: 0644]
basis/io/launcher/unix/unix.factor [new file with mode: 0644]
basis/io/launcher/windows/authors.txt [new file with mode: 0755]
basis/io/launcher/windows/nt/authors.txt [new file with mode: 0755]
basis/io/launcher/windows/nt/nt-tests.factor [new file with mode: 0644]
basis/io/launcher/windows/nt/nt.factor [new file with mode: 0755]
basis/io/launcher/windows/nt/tags.txt [new file with mode: 0644]
basis/io/launcher/windows/nt/test/append.factor [new file with mode: 0644]
basis/io/launcher/windows/nt/test/env.factor [new file with mode: 0644]
basis/io/launcher/windows/nt/test/stderr.factor [new file with mode: 0644]
basis/io/launcher/windows/tags.txt [new file with mode: 0644]
basis/io/launcher/windows/windows-tests.factor [new file with mode: 0644]
basis/io/launcher/windows/windows.factor [new file with mode: 0755]
basis/io/mmap/mmap-tests.factor
basis/io/mmap/mmap.factor
basis/io/mmap/unix/authors.txt [new file with mode: 0755]
basis/io/mmap/unix/tags.txt [new file with mode: 0644]
basis/io/mmap/unix/unix.factor [new file with mode: 0644]
basis/io/mmap/windows/authors.txt [new file with mode: 0755]
basis/io/mmap/windows/tags.txt [new file with mode: 0644]
basis/io/mmap/windows/windows.factor [new file with mode: 0644]
basis/io/monitors/linux/linux-tests.factor [new file with mode: 0644]
basis/io/monitors/linux/linux.factor [new file with mode: 0644]
basis/io/monitors/linux/tags.txt [new file with mode: 0644]
basis/io/monitors/macosx/macosx.factor [new file with mode: 0644]
basis/io/monitors/macosx/tags.txt [new file with mode: 0644]
basis/io/monitors/monitors-tests.factor
basis/io/monitors/monitors.factor
basis/io/monitors/recursive/recursive-tests.factor
basis/io/monitors/recursive/recursive.factor
basis/io/monitors/windows/nt/authors.txt [new file with mode: 0755]
basis/io/monitors/windows/nt/nt-tests.factor [new file with mode: 0644]
basis/io/monitors/windows/nt/nt.factor [new file with mode: 0755]
basis/io/monitors/windows/nt/tags.txt [new file with mode: 0644]
basis/io/paths/authors.txt [deleted file]
basis/io/paths/paths-tests.factor [deleted file]
basis/io/paths/paths.factor [deleted file]
basis/io/paths/windows/authors.txt [deleted file]
basis/io/paths/windows/tags.txt [deleted file]
basis/io/paths/windows/windows.factor [deleted file]
basis/io/pipes/pipes.factor
basis/io/pipes/unix/pipes-tests.factor [new file with mode: 0644]
basis/io/pipes/unix/tags.txt [new file with mode: 0644]
basis/io/pipes/unix/unix.factor [new file with mode: 0644]
basis/io/pipes/windows/nt/authors.txt [new file with mode: 0755]
basis/io/pipes/windows/nt/nt.factor [new file with mode: 0644]
basis/io/pipes/windows/nt/tags.txt [new file with mode: 0644]
basis/io/sockets/secure/openssl/openssl.factor
basis/io/sockets/secure/secure-docs.factor
basis/io/sockets/secure/secure.factor
basis/io/sockets/secure/unix/debug/debug.factor [new file with mode: 0644]
basis/io/sockets/secure/unix/tags.txt [new file with mode: 0644]
basis/io/sockets/secure/unix/unix-tests.factor [new file with mode: 0644]
basis/io/sockets/secure/unix/unix.factor [new file with mode: 0644]
basis/io/sockets/sockets.factor
basis/io/sockets/unix/authors.txt [new file with mode: 0644]
basis/io/sockets/unix/summary.txt [new file with mode: 0644]
basis/io/sockets/unix/tags.txt [new file with mode: 0644]
basis/io/sockets/unix/unix.factor [new file with mode: 0644]
basis/io/sockets/windows/nt/authors.txt [new file with mode: 0755]
basis/io/sockets/windows/nt/nt.factor [new file with mode: 0644]
basis/io/sockets/windows/nt/tags.txt [new file with mode: 0644]
basis/io/sockets/windows/tags.txt [new file with mode: 0644]
basis/io/sockets/windows/windows.factor [new file with mode: 0644]
basis/io/streams/duplex/duplex-docs.factor
basis/io/styles/styles-docs.factor
basis/io/thread/thread.factor
basis/io/unix/authors.txt [deleted file]
basis/io/unix/backend/authors.txt [deleted file]
basis/io/unix/backend/backend.factor [deleted file]
basis/io/unix/backend/summary.txt [deleted file]
basis/io/unix/backend/tags.txt [deleted file]
basis/io/unix/bsd/authors.txt [deleted file]
basis/io/unix/bsd/bsd.factor [deleted file]
basis/io/unix/bsd/tags.txt [deleted file]
basis/io/unix/epoll/authors.txt [deleted file]
basis/io/unix/epoll/epoll.factor [deleted file]
basis/io/unix/epoll/tags.txt [deleted file]
basis/io/unix/files/authors.txt [deleted file]
basis/io/unix/files/bsd/bsd.factor [deleted file]
basis/io/unix/files/bsd/tags.txt [deleted file]
basis/io/unix/files/files-docs.factor [deleted file]
basis/io/unix/files/files-tests.factor [deleted file]
basis/io/unix/files/files.factor [deleted file]
basis/io/unix/files/freebsd/freebsd.factor [deleted file]
basis/io/unix/files/freebsd/tags.txt [deleted file]
basis/io/unix/files/linux/linux.factor [deleted file]
basis/io/unix/files/linux/tags.txt [deleted file]
basis/io/unix/files/macosx/macosx.factor [deleted file]
basis/io/unix/files/macosx/tags.txt [deleted file]
basis/io/unix/files/netbsd/netbsd.factor [deleted file]
basis/io/unix/files/netbsd/tags.txt [deleted file]
basis/io/unix/files/openbsd/openbsd.factor [deleted file]
basis/io/unix/files/openbsd/tags.txt [deleted file]
basis/io/unix/files/summary.txt [deleted file]
basis/io/unix/files/tags.txt [deleted file]
basis/io/unix/files/unique/tags.txt [deleted file]
basis/io/unix/files/unique/unique.factor [deleted file]
basis/io/unix/freebsd/freebsd.factor [deleted file]
basis/io/unix/freebsd/tags.txt [deleted file]
basis/io/unix/kqueue/authors.txt [deleted file]
basis/io/unix/kqueue/kqueue.factor [deleted file]
basis/io/unix/kqueue/tags.txt [deleted file]
basis/io/unix/launcher/authors.txt [deleted file]
basis/io/unix/launcher/launcher-tests.factor [deleted file]
basis/io/unix/launcher/launcher.factor [deleted file]
basis/io/unix/launcher/parser/parser-tests.factor [deleted file]
basis/io/unix/launcher/parser/parser.factor [deleted file]
basis/io/unix/launcher/parser/tags.txt [deleted file]
basis/io/unix/launcher/tags.txt [deleted file]
basis/io/unix/linux/authors.txt [deleted file]
basis/io/unix/linux/linux.factor [deleted file]
basis/io/unix/linux/monitors/monitors-tests.factor [deleted file]
basis/io/unix/linux/monitors/monitors.factor [deleted file]
basis/io/unix/linux/monitors/tags.txt [deleted file]
basis/io/unix/linux/tags.txt [deleted file]
basis/io/unix/macosx/macosx.factor [deleted file]
basis/io/unix/macosx/monitors/monitors.factor [deleted file]
basis/io/unix/macosx/monitors/tags.txt [deleted file]
basis/io/unix/macosx/tags.txt [deleted file]
basis/io/unix/mmap/authors.txt [deleted file]
basis/io/unix/mmap/mmap.factor [deleted file]
basis/io/unix/mmap/tags.txt [deleted file]
basis/io/unix/netbsd/netbsd.factor [deleted file]
basis/io/unix/netbsd/tags.txt [deleted file]
basis/io/unix/openbsd/openbsd.factor [deleted file]
basis/io/unix/openbsd/tags.txt [deleted file]
basis/io/unix/pipes/pipes-tests.factor [deleted file]
basis/io/unix/pipes/pipes.factor [deleted file]
basis/io/unix/pipes/tags.txt [deleted file]
basis/io/unix/select/authors.txt [deleted file]
basis/io/unix/select/select.factor [deleted file]
basis/io/unix/select/tags.txt [deleted file]
basis/io/unix/sockets/authors.txt [deleted file]
basis/io/unix/sockets/secure/debug/debug.factor [deleted file]
basis/io/unix/sockets/secure/secure-tests.factor [deleted file]
basis/io/unix/sockets/secure/secure.factor [deleted file]
basis/io/unix/sockets/secure/tags.txt [deleted file]
basis/io/unix/sockets/sockets.factor [deleted file]
basis/io/unix/sockets/summary.txt [deleted file]
basis/io/unix/sockets/tags.txt [deleted file]
basis/io/unix/summary.txt [deleted file]
basis/io/unix/tags.txt [deleted file]
basis/io/unix/unix-tests.factor [deleted file]
basis/io/unix/unix.factor [deleted file]
basis/io/windows/authors.txt [deleted file]
basis/io/windows/files/files.factor [deleted file]
basis/io/windows/files/tags.txt [deleted file]
basis/io/windows/files/unique/tags.txt [deleted file]
basis/io/windows/files/unique/unique.factor [deleted file]
basis/io/windows/launcher/authors.txt [deleted file]
basis/io/windows/launcher/launcher-tests.factor [deleted file]
basis/io/windows/launcher/launcher.factor [deleted file]
basis/io/windows/launcher/tags.txt [deleted file]
basis/io/windows/mmap/authors.txt [deleted file]
basis/io/windows/mmap/mmap.factor [deleted file]
basis/io/windows/mmap/tags.txt [deleted file]
basis/io/windows/nt/authors.txt [deleted file]
basis/io/windows/nt/backend/authors.txt [deleted file]
basis/io/windows/nt/backend/backend.factor [deleted file]
basis/io/windows/nt/backend/tags.txt [deleted file]
basis/io/windows/nt/files/authors.txt [deleted file]
basis/io/windows/nt/files/files-tests.factor [deleted file]
basis/io/windows/nt/files/files.factor [deleted file]
basis/io/windows/nt/files/tags.txt [deleted file]
basis/io/windows/nt/launcher/authors.txt [deleted file]
basis/io/windows/nt/launcher/launcher-tests.factor [deleted file]
basis/io/windows/nt/launcher/launcher.factor [deleted file]
basis/io/windows/nt/launcher/tags.txt [deleted file]
basis/io/windows/nt/launcher/test/append.factor [deleted file]
basis/io/windows/nt/launcher/test/env.factor [deleted file]
basis/io/windows/nt/launcher/test/stderr.factor [deleted file]
basis/io/windows/nt/monitors/authors.txt [deleted file]
basis/io/windows/nt/monitors/monitors-tests.factor [deleted file]
basis/io/windows/nt/monitors/monitors.factor [deleted file]
basis/io/windows/nt/monitors/tags.txt [deleted file]
basis/io/windows/nt/nt.factor [deleted file]
basis/io/windows/nt/pipes/authors.txt [deleted file]
basis/io/windows/nt/pipes/pipes.factor [deleted file]
basis/io/windows/nt/pipes/tags.txt [deleted file]
basis/io/windows/nt/privileges/privileges.factor [deleted file]
basis/io/windows/nt/privileges/tags.txt [deleted file]
basis/io/windows/nt/sockets/authors.txt [deleted file]
basis/io/windows/nt/sockets/sockets.factor [deleted file]
basis/io/windows/nt/sockets/tags.txt [deleted file]
basis/io/windows/nt/summary.txt [deleted file]
basis/io/windows/nt/tags.txt [deleted file]
basis/io/windows/privileges/privileges.factor [deleted file]
basis/io/windows/privileges/tags.txt [deleted file]
basis/io/windows/sockets/sockets.factor [deleted file]
basis/io/windows/sockets/tags.txt [deleted file]
basis/io/windows/summary.txt [deleted file]
basis/io/windows/tags.txt [deleted file]
basis/io/windows/windows.factor [deleted file]
basis/lcs/diff2html/diff2html.factor
basis/lcs/lcs.factor
basis/listener/listener-tests.factor
basis/listener/listener.factor
basis/locals/backend/backend.factor
basis/locals/locals-tests.factor
basis/locals/parser/parser.factor
basis/locals/rewrite/point-free/point-free.factor
basis/locals/rewrite/sugar/sugar.factor
basis/logging/insomniac/insomniac.factor
basis/logging/logging.factor
basis/logging/server/server.factor
basis/match/match.factor
basis/math/bitwise/bitwise.factor [changed mode: 0644->0755]
basis/math/blas/cblas/authors.txt [new file with mode: 0644]
basis/math/blas/cblas/cblas.factor [new file with mode: 0644]
basis/math/blas/cblas/summary.txt [new file with mode: 0644]
basis/math/blas/cblas/tags.txt [new file with mode: 0644]
basis/math/blas/matrices/authors.txt [new file with mode: 0644]
basis/math/blas/matrices/matrices-docs.factor [new file with mode: 0644]
basis/math/blas/matrices/matrices-tests.factor [new file with mode: 0644]
basis/math/blas/matrices/matrices.factor [new file with mode: 0755]
basis/math/blas/matrices/summary.txt [new file with mode: 0644]
basis/math/blas/matrices/tags.txt [new file with mode: 0644]
basis/math/blas/syntax/authors.txt [new file with mode: 0644]
basis/math/blas/syntax/summary.txt [new file with mode: 0644]
basis/math/blas/syntax/syntax-docs.factor [new file with mode: 0644]
basis/math/blas/syntax/syntax.factor [new file with mode: 0644]
basis/math/blas/syntax/tags.txt [new file with mode: 0644]
basis/math/blas/vectors/authors.txt [new file with mode: 0644]
basis/math/blas/vectors/summary.txt [new file with mode: 0644]
basis/math/blas/vectors/tags.txt [new file with mode: 0644]
basis/math/blas/vectors/vectors-docs.factor [new file with mode: 0644]
basis/math/blas/vectors/vectors-tests.factor [new file with mode: 0644]
basis/math/blas/vectors/vectors.factor [new file with mode: 0755]
basis/math/functions/functions-tests.factor
basis/math/functions/functions.factor
basis/math/geometry/rect/rect-docs.factor
basis/math/intervals/intervals-docs.factor
basis/math/intervals/intervals-tests.factor
basis/math/intervals/intervals.factor
basis/math/miller-rabin/authors.txt [new file with mode: 0755]
basis/math/miller-rabin/miller-rabin-tests.factor [new file with mode: 0644]
basis/math/miller-rabin/miller-rabin.factor [new file with mode: 0755]
basis/math/miller-rabin/summary.txt [new file with mode: 0644]
basis/math/quaternions/quaternions.factor
basis/math/ranges/ranges.factor
basis/math/statistics/statistics.factor
basis/mime/multipart/multipart-tests.factor
basis/mime/types/types.factor
basis/mirrors/mirrors-docs.factor
basis/multiline/multiline.factor
basis/nibble-arrays/nibble-arrays.factor
basis/opengl/capabilities/authors.txt [new file with mode: 0644]
basis/opengl/capabilities/capabilities-docs.factor [new file with mode: 0644]
basis/opengl/capabilities/capabilities.factor [new file with mode: 0755]
basis/opengl/capabilities/summary.txt [new file with mode: 0644]
basis/opengl/capabilities/tags.txt [new file with mode: 0644]
basis/opengl/framebuffers/authors.txt [new file with mode: 0644]
basis/opengl/framebuffers/framebuffers-docs.factor [new file with mode: 0644]
basis/opengl/framebuffers/framebuffers.factor [new file with mode: 0644]
basis/opengl/framebuffers/summary.txt [new file with mode: 0644]
basis/opengl/framebuffers/tags.txt [new file with mode: 0644]
basis/opengl/gl/extensions/extensions.factor
basis/opengl/gl/gl.factor
basis/opengl/shaders/authors.txt [new file with mode: 0644]
basis/opengl/shaders/shaders-docs.factor [new file with mode: 0644]
basis/opengl/shaders/shaders.factor [new file with mode: 0755]
basis/opengl/shaders/summary.txt [new file with mode: 0644]
basis/opengl/shaders/tags.txt [new file with mode: 0755]
basis/openssl/libssl/libssl.factor
basis/pack/authors.txt [new file with mode: 0644]
basis/pack/pack-tests.factor [new file with mode: 0755]
basis/pack/pack.factor [new file with mode: 0755]
basis/persistent/deques/deques.factor
basis/persistent/heaps/heaps.factor
basis/persistent/vectors/vectors.factor
basis/porter-stemmer/authors.txt [new file with mode: 0644]
basis/porter-stemmer/porter-stemmer-docs.factor [new file with mode: 0644]
basis/porter-stemmer/porter-stemmer-tests.factor [new file with mode: 0644]
basis/porter-stemmer/porter-stemmer.factor [new file with mode: 0644]
basis/porter-stemmer/summary.txt [new file with mode: 0644]
basis/porter-stemmer/test/output.txt [new file with mode: 0644]
basis/porter-stemmer/test/voc.txt [new file with mode: 0644]
basis/prettyprint/backend/backend.factor
basis/prettyprint/prettyprint-tests.factor
basis/prettyprint/prettyprint.factor
basis/qualified/authors.txt [deleted file]
basis/qualified/qualified-docs.factor [deleted file]
basis/qualified/qualified-tests.factor [deleted file]
basis/qualified/qualified.factor [deleted file]
basis/qualified/summary.txt [deleted file]
basis/qualified/tags.txt [deleted file]
basis/random/random.factor
basis/refs/refs.factor
basis/regexp/classes/classes.factor
basis/regexp/parser/parser.factor
basis/roman/authors.txt [new file with mode: 0644]
basis/roman/roman-docs.factor [new file with mode: 0644]
basis/roman/roman-tests.factor [new file with mode: 0644]
basis/roman/roman.factor [new file with mode: 0644]
basis/roman/summary.txt [new file with mode: 0644]
basis/roman/tags.txt [new file with mode: 0644]
basis/search-deques/search-deques-docs.factor
basis/sequences/complex-components/authors.txt [new file with mode: 0644]
basis/sequences/complex-components/complex-components-docs.factor [new file with mode: 0644]
basis/sequences/complex-components/complex-components-tests.factor [new file with mode: 0644]
basis/sequences/complex-components/complex-components.factor [new file with mode: 0644]
basis/sequences/complex-components/summary.txt [new file with mode: 0644]
basis/sequences/complex-components/tags.txt [new file with mode: 0644]
basis/sequences/complex/authors.txt [new file with mode: 0644]
basis/sequences/complex/complex-docs.factor [new file with mode: 0644]
basis/sequences/complex/complex-tests.factor [new file with mode: 0644]
basis/sequences/complex/complex.factor [new file with mode: 0644]
basis/sequences/complex/summary.txt [new file with mode: 0644]
basis/sequences/complex/tags.txt [new file with mode: 0644]
basis/sequences/deep/authors.txt
basis/sequences/deep/deep-tests.factor
basis/sequences/deep/deep.factor
basis/sequences/next/next.factor
basis/serialize/serialize.factor
basis/smtp/server/server.factor
basis/smtp/smtp-docs.factor
basis/smtp/smtp.factor
basis/soundex/author.txt [new file with mode: 0644]
basis/soundex/soundex-tests.factor [new file with mode: 0644]
basis/soundex/soundex.factor [new file with mode: 0644]
basis/soundex/summary.txt [new file with mode: 0644]
basis/specialized-vectors/functor/functor.factor
basis/splitting/monotonic/authors.txt [new file with mode: 0644]
basis/splitting/monotonic/monotonic-tests.factor [new file with mode: 0644]
basis/splitting/monotonic/monotonic.factor [new file with mode: 0644]
basis/splitting/monotonic/summary.txt [new file with mode: 0644]
basis/splitting/monotonic/tags.txt [new file with mode: 0644]
basis/stack-checker/alien/alien.factor
basis/stack-checker/backend/backend.factor
basis/stack-checker/errors/errors-docs.factor
basis/stack-checker/known-words/known-words.factor
basis/stack-checker/stack-checker-tests.factor
basis/symbols/authors.txt [deleted file]
basis/symbols/summary.txt [deleted file]
basis/symbols/symbols-docs.factor [deleted file]
basis/symbols/symbols-tests.factor [deleted file]
basis/symbols/symbols.factor [deleted file]
basis/symbols/tags.txt [deleted file]
basis/tools/crossref/crossref-tests.factor
basis/tools/deploy/backend/backend.factor
basis/tools/deploy/config/editor/editor.factor
basis/tools/deploy/deploy-tests.factor
basis/tools/deploy/macosx/macosx.factor
basis/tools/deploy/shaker/shaker.factor
basis/tools/deploy/shaker/strip-cocoa.factor
basis/tools/deploy/test/3/deploy.factor
basis/tools/deploy/test/9/9.factor [new file with mode: 0644]
basis/tools/deploy/test/9/deploy.factor [new file with mode: 0644]
basis/tools/deploy/unix/unix.factor
basis/tools/deploy/windows/windows.factor
basis/tools/disassembler/disassembler.factor
basis/tools/disassembler/gdb/gdb.factor [changed mode: 0644->0755]
basis/tools/disassembler/udis/udis.factor
basis/tools/files/files.factor
basis/tools/files/unix/unix.factor
basis/tools/files/windows/windows.factor
basis/tools/profiler/profiler.factor
basis/tools/scaffold/scaffold.factor
basis/tools/vocabs/browser/browser.factor
basis/tools/vocabs/monitor/monitor-tests.factor
basis/tools/vocabs/monitor/monitor.factor
basis/tools/vocabs/vocabs.factor
basis/tuple-arrays/tuple-arrays.factor
basis/ui/backend/backend.factor
basis/ui/cocoa/cocoa.factor
basis/ui/cocoa/tools/tools.factor
basis/ui/cocoa/views/views.factor
basis/ui/event-loop/event-loop-tests.factor [new file with mode: 0644]
basis/ui/event-loop/event-loop.factor [new file with mode: 0644]
basis/ui/freetype/freetype.factor
basis/ui/gadgets/grid-lines/grid-lines.factor
basis/ui/gadgets/panes/panes-docs.factor
basis/ui/gadgets/panes/panes.factor
basis/ui/gadgets/theme/theme.factor
basis/ui/gestures/gestures.factor
basis/ui/tools/deploy/deploy.factor
basis/ui/tools/interactor/interactor.factor
basis/ui/tools/operations/operations.factor
basis/ui/tools/search/search-tests.factor
basis/ui/tools/search/search.factor
basis/ui/ui-docs.factor
basis/ui/ui-tests.factor
basis/ui/ui.factor
basis/ui/windows/windows.factor
basis/ui/x11/x11.factor
basis/unicode/script/script.factor
basis/unix/bsd/bsd.factor
basis/unix/bsd/freebsd/freebsd.factor
basis/unix/bsd/macosx/macosx.factor
basis/unix/bsd/netbsd/netbsd.factor
basis/unix/bsd/openbsd/openbsd.factor
basis/unix/getfsstat/freebsd/freebsd.factor
basis/unix/getfsstat/macosx/macosx.factor
basis/unix/getfsstat/netbsd/netbsd.factor
basis/unix/getfsstat/openbsd/openbsd.factor
basis/unix/groups/groups.factor
basis/unix/kqueue/freebsd/freebsd.factor
basis/unix/kqueue/kqueue.factor
basis/unix/kqueue/macosx/macosx.factor
basis/unix/kqueue/netbsd/netbsd.factor
basis/unix/kqueue/openbsd/openbsd.factor
basis/unix/linux/epoll/epoll.factor
basis/unix/linux/fs/authors.txt [deleted file]
basis/unix/linux/fs/fs.factor [deleted file]
basis/unix/linux/fs/tags.txt [deleted file]
basis/unix/linux/if/authors.txt [deleted file]
basis/unix/linux/if/if.factor [deleted file]
basis/unix/linux/if/tags.txt [deleted file]
basis/unix/linux/ifreq/authors.txt [deleted file]
basis/unix/linux/ifreq/ifreq.factor [deleted file]
basis/unix/linux/ifreq/tags.txt [deleted file]
basis/unix/linux/inotify/inotify.factor
basis/unix/linux/linux.factor
basis/unix/linux/route/authors.txt [deleted file]
basis/unix/linux/route/route.factor [deleted file]
basis/unix/linux/route/tags.txt [deleted file]
basis/unix/linux/sockios/authors.txt [deleted file]
basis/unix/linux/sockios/sockios.factor [deleted file]
basis/unix/linux/sockios/tags.txt [deleted file]
basis/unix/linux/swap/authors.txt [deleted file]
basis/unix/linux/swap/swap.factor [deleted file]
basis/unix/linux/swap/tags.txt [deleted file]
basis/unix/process/process.factor
basis/unix/solaris/solaris.factor
basis/unix/stat/linux/32/32.factor
basis/unix/stat/linux/64/64.factor
basis/unix/stat/netbsd/32/32.factor
basis/unix/stat/netbsd/64/64.factor
basis/unix/stat/stat.factor
basis/unix/statfs/freebsd/freebsd.factor
basis/unix/statfs/macosx/macosx.factor
basis/unix/statfs/openbsd/openbsd.factor
basis/unix/statvfs/freebsd/freebsd.factor
basis/unix/statvfs/linux/linux.factor
basis/unix/statvfs/macosx/macosx.factor
basis/unix/statvfs/netbsd/netbsd.factor
basis/unix/statvfs/openbsd/openbsd.factor
basis/unix/unix.factor
basis/unix/users/users.factor
basis/unix/utmpx/utmpx.factor
basis/urls/urls-docs.factor
basis/validators/validators.factor
basis/vlists/vlists.factor
basis/windows/advapi32/advapi32.factor
basis/windows/com/wrapper/wrapper.factor
basis/windows/dinput/constants/constants.factor
basis/windows/dinput/dinput.factor [changed mode: 0644->0755]
basis/windows/dragdrop-listener/dragdrop-listener.factor
basis/windows/errors/errors.factor
basis/windows/gdi32/gdi32.factor
basis/windows/kernel32/kernel32.factor [changed mode: 0644->0755]
basis/windows/messages/messages.factor [changed mode: 0644->0755]
basis/windows/ole32/ole32.factor
basis/windows/shell32/shell32.factor
basis/windows/time/time.factor
basis/windows/user32/user32.factor
basis/windows/winsock/winsock.factor
basis/x11/clipboard/clipboard.factor
basis/x11/events/events.factor
basis/x11/windows/windows.factor
basis/x11/xlib/xlib.factor
basis/xml-rpc/example.factor
basis/xml-rpc/xml-rpc-docs.factor
basis/xml-rpc/xml-rpc.factor
basis/xml/xml-docs.factor
basis/xmode/catalog/catalog.factor
basis/xmode/code2html/responder/responder.factor
basis/xmode/loader/syntax/syntax.factor
basis/xmode/marker/marker.factor
basis/xmode/marker/state/state.factor
basis/xmode/rules/rules.factor
basis/xmode/tokens/tokens.factor
basis/xmode/utilities/utilities.factor
core/alien/alien.factor
core/assocs/assocs.factor
core/bootstrap/primitives.factor
core/bootstrap/syntax.factor
core/checksums/checksums.factor
core/checksums/crc32/crc32.factor
core/classes/classes.factor
core/classes/singleton/singleton-docs.factor
core/classes/tuple/tuple.factor
core/combinators/combinators.factor
core/compiler/errors/errors-docs.factor
core/continuations/continuations-docs.factor
core/effects/effects.factor
core/generic/standard/standard.factor
core/growable/growable.factor
core/hashtables/hashtables.factor
core/io/backend/backend.factor
core/io/encodings/encodings.factor
core/io/files/files-docs.factor
core/io/files/files-tests.factor
core/io/files/files.factor
core/io/io-tests.factor
core/io/pathnames/authors.txt [new file with mode: 0644]
core/io/pathnames/pathnames-docs.factor [new file with mode: 0644]
core/io/pathnames/pathnames-tests.factor [new file with mode: 0644]
core/io/pathnames/pathnames.factor [new file with mode: 0644]
core/io/pathnames/summary.txt [new file with mode: 0644]
core/io/streams/c/c-docs.factor
core/io/streams/c/c-tests.factor
core/kernel/kernel-tests.factor
core/layouts/layouts.factor
core/math/math-docs.factor
core/math/math.factor [changed mode: 0644->0755]
core/math/order/order-docs.factor
core/memory/memory-tests.factor
core/namespaces/namespaces-docs.factor
core/parser/parser-docs.factor
core/parser/parser-tests.factor
core/parser/parser.factor
core/quotations/quotations.factor
core/sequences/sequences-docs.factor
core/sequences/sequences.factor
core/slots/slots.factor
core/sorting/sorting.factor
core/source-files/source-files-docs.factor
core/source-files/source-files.factor
core/strings/strings.factor
core/syntax/syntax-docs.factor
core/syntax/syntax.factor
core/syntax/tags.txt [deleted file]
core/vocabs/loader/loader-tests.factor
core/vocabs/loader/loader.factor
core/vocabs/parser/authors.txt [new file with mode: 0644]
core/vocabs/parser/parser-docs.factor [new file with mode: 0644]
core/vocabs/parser/parser.factor [new file with mode: 0644]
core/words/alias/alias-docs.factor [new file with mode: 0644]
core/words/alias/alias.factor [new file with mode: 0644]
core/words/alias/authors.txt [new file with mode: 0644]
core/words/alias/summary.txt [new file with mode: 0644]
core/words/constant/constant.factor [new file with mode: 0644]
core/words/symbol/symbol-docs.factor [new file with mode: 0644]
core/words/symbol/symbol.factor [new file with mode: 0644]
core/words/words-docs.factor
core/words/words-tests.factor
core/words/words.factor
extra/advice/advice.factor
extra/assoc-heaps/assoc-heaps-docs.factor [deleted file]
extra/assoc-heaps/assoc-heaps-tests.factor [deleted file]
extra/assoc-heaps/assoc-heaps.factor [deleted file]
extra/assoc-heaps/authors.txt [deleted file]
extra/assocs/lib/authors.txt [deleted file]
extra/assocs/lib/lib-tests.factor [deleted file]
extra/assocs/lib/lib.factor [deleted file]
extra/assocs/lib/summary.txt [deleted file]
extra/assocs/lib/tags.txt [deleted file]
extra/automata/ui/ui.factor
extra/bake/authors.txt [deleted file]
extra/bake/bake-tests.factor [deleted file]
extra/bake/bake.factor [deleted file]
extra/bake/fry/fry-tests.factor [deleted file]
extra/bake/fry/fry.factor [deleted file]
extra/bake/summary.txt [deleted file]
extra/bank/bank.factor
extra/benchmark/binary-trees/binary-trees.factor
extra/benchmark/knucleotide/knucleotide.factor
extra/benchmark/mandel/colors/colors.factor
extra/benchmark/mandel/mandel.factor
extra/benchmark/nbody/nbody.factor
extra/benchmark/nsieve-bits/nsieve-bits.factor
extra/benchmark/nsieve-bytes/nsieve-bytes.factor
extra/benchmark/nsieve/nsieve.factor
extra/benchmark/random/random.factor
extra/benchmark/raytracer/raytracer.factor
extra/benchmark/reverse-complement/reverse-complement.factor
extra/benchmark/xml/xml.factor
extra/bind-in/bind-in.factor [deleted file]
extra/bitfields/authors.txt [deleted file]
extra/bitfields/bitfields-docs.factor [deleted file]
extra/bitfields/bitfields-tests.factor [deleted file]
extra/bitfields/bitfields.factor [deleted file]
extra/bitfields/summary.txt [deleted file]
extra/bitfields/tags.txt [deleted file]
extra/boolean-expr/boolean-expr.factor
extra/bubble-chamber/bubble-chamber-docs.factor [deleted file]
extra/bubble-chamber/bubble-chamber.factor
extra/bubble-chamber/common/common.factor [deleted file]
extra/bubble-chamber/hadron-chamber/hadron-chamber.factor [new file with mode: 0644]
extra/bubble-chamber/hadron-chamber/tags.txt [new file with mode: 0644]
extra/bubble-chamber/large/large.factor [new file with mode: 0644]
extra/bubble-chamber/large/tags.txt [new file with mode: 0644]
extra/bubble-chamber/medium/medium.factor [new file with mode: 0644]
extra/bubble-chamber/medium/tags.txt [new file with mode: 0644]
extra/bubble-chamber/original/original.factor [new file with mode: 0644]
extra/bubble-chamber/original/tags.txt [new file with mode: 0644]
extra/bubble-chamber/particle/axion/axion.factor [deleted file]
extra/bubble-chamber/particle/hadron/hadron.factor [deleted file]
extra/bubble-chamber/particle/muon/colors/colors.factor [deleted file]
extra/bubble-chamber/particle/muon/muon.factor [deleted file]
extra/bubble-chamber/particle/particle.factor [deleted file]
extra/bubble-chamber/particle/quark/quark.factor [deleted file]
extra/bubble-chamber/quark-chamber/quark-chamber.factor [new file with mode: 0644]
extra/bubble-chamber/quark-chamber/tags.txt [new file with mode: 0644]
extra/bubble-chamber/small/small.factor [new file with mode: 0644]
extra/bubble-chamber/small/tags.txt [new file with mode: 0644]
extra/bubble-chamber/tags.txt [deleted file]
extra/bubble-chamber/ten-hadrons/tags.txt [new file with mode: 0644]
extra/bubble-chamber/ten-hadrons/ten-hadrons.factor [new file with mode: 0644]
extra/bunny/cel-shaded/cel-shaded.factor
extra/bunny/model/model.factor
extra/bunny/outlined/outlined.factor
extra/cairo-demo/cairo-demo.factor
extra/cairo-samples/cairo-samples.factor [new file with mode: 0644]
extra/cairo/authors.txt [deleted file]
extra/cairo/cairo.factor [deleted file]
extra/cairo/ffi/ffi.factor [deleted file]
extra/cairo/gadgets/gadgets.factor [deleted file]
extra/cairo/samples/samples.factor [deleted file]
extra/cairo/summary.txt [deleted file]
extra/cairo/tags.txt [deleted file]
extra/cfdg/cfdg.factor
extra/combinators/cleave/cleave.factor
extra/combinators/lib/authors.txt [deleted file]
extra/combinators/lib/lib-docs.factor [deleted file]
extra/combinators/lib/lib-tests.factor [deleted file]
extra/combinators/lib/lib.factor [deleted file]
extra/contributors/contributors.factor
extra/cords/authors.txt [deleted file]
extra/cords/cords-tests.factor [deleted file]
extra/cords/cords.factor [deleted file]
extra/cords/summary.txt [deleted file]
extra/cords/tags.txt [deleted file]
extra/coroutines/coroutines-tests.factor
extra/crypto/hmac/hmac.factor
extra/crypto/passwd-md5/passwd-md5.factor
extra/descriptive/descriptive.factor
extra/dns/dns.factor
extra/dns/server/server.factor
extra/dns/util/util.factor
extra/faq/faq.factor
extra/fjsc/fjsc.factor
extra/frame-buffer/frame-buffer.factor [new file with mode: 0644]
extra/fuel/fuel.factor
extra/game-input/backend/authors.txt [deleted file]
extra/game-input/backend/backend.factor [deleted file]
extra/game-input/backend/dinput/authors.txt [deleted file]
extra/game-input/backend/dinput/dinput.factor [deleted file]
extra/game-input/backend/dinput/keys-array/keys-array.factor [deleted file]
extra/game-input/backend/dinput/summary.txt [deleted file]
extra/game-input/backend/dinput/tags.txt [deleted file]
extra/game-input/backend/iokit/authors.txt [deleted file]
extra/game-input/backend/iokit/iokit.factor [deleted file]
extra/game-input/backend/iokit/summary.txt [deleted file]
extra/game-input/backend/iokit/tags.txt [deleted file]
extra/game-input/backend/summary.txt [deleted file]
extra/game-input/backend/tags.txt [deleted file]
extra/game-input/dinput/authors.txt [new file with mode: 0755]
extra/game-input/dinput/dinput.factor [new file with mode: 0755]
extra/game-input/dinput/keys-array/keys-array.factor [new file with mode: 0755]
extra/game-input/dinput/summary.txt [new file with mode: 0755]
extra/game-input/dinput/tags.txt [new file with mode: 0755]
extra/game-input/game-input.factor
extra/game-input/iokit/authors.txt [new file with mode: 0644]
extra/game-input/iokit/iokit.factor [new file with mode: 0755]
extra/game-input/iokit/summary.txt [new file with mode: 0644]
extra/game-input/iokit/tags.txt [new file with mode: 0755]
extra/geo-ip/geo-ip.factor
extra/graphics/bitmap/bitmap.factor
extra/html/parser/analyzer/analyzer.factor
extra/icfp/2006/2006.factor
extra/inverse/inverse.factor
extra/io/serial/serial.factor
extra/iokit/hid/hid.factor
extra/iokit/iokit.factor
extra/irc/client/client-tests.factor
extra/irc/client/client.factor
extra/irc/messages/messages-tests.factor
extra/irc/messages/messages.factor
extra/irc/ui/load/load.factor
extra/irc/ui/ui.factor
extra/joystick-demo/joystick-demo.factor
extra/koszul/koszul-tests.factor
extra/koszul/koszul.factor
extra/lint/lint.factor
extra/log-viewer/log-viewer.factor
extra/mason/build/build.factor
extra/mason/child/child.factor
extra/mason/cleanup/cleanup.factor
extra/mason/common/common-tests.factor
extra/mason/common/common.factor
extra/mason/config/config.factor
extra/mason/help/help.factor
extra/mason/mason.factor
extra/mason/release/archive/archive.factor
extra/mason/release/branch/branch.factor
extra/mason/release/tidy/tidy.factor
extra/mason/test/test.factor
extra/math/binpack/binpack-docs.factor
extra/math/blas/cblas/authors.txt [deleted file]
extra/math/blas/cblas/cblas.factor [deleted file]
extra/math/blas/cblas/summary.txt [deleted file]
extra/math/blas/cblas/tags.txt [deleted file]
extra/math/blas/matrices/authors.txt [deleted file]
extra/math/blas/matrices/matrices-docs.factor [deleted file]
extra/math/blas/matrices/matrices-tests.factor [deleted file]
extra/math/blas/matrices/matrices.factor [deleted file]
extra/math/blas/matrices/summary.txt [deleted file]
extra/math/blas/matrices/tags.txt [deleted file]
extra/math/blas/syntax/authors.txt [deleted file]
extra/math/blas/syntax/summary.txt [deleted file]
extra/math/blas/syntax/syntax-docs.factor [deleted file]
extra/math/blas/syntax/syntax.factor [deleted file]
extra/math/blas/syntax/tags.txt [deleted file]
extra/math/blas/vectors/authors.txt [deleted file]
extra/math/blas/vectors/summary.txt [deleted file]
extra/math/blas/vectors/tags.txt [deleted file]
extra/math/blas/vectors/vectors-docs.factor [deleted file]
extra/math/blas/vectors/vectors-tests.factor [deleted file]
extra/math/blas/vectors/vectors.factor [deleted file]
extra/math/function-tools/function-tools.factor
extra/math/miller-rabin/authors.txt [deleted file]
extra/math/miller-rabin/miller-rabin-tests.factor [deleted file]
extra/math/miller-rabin/miller-rabin.factor [deleted file]
extra/math/miller-rabin/summary.txt [deleted file]
extra/math/text/english/english.factor
extra/math/trig/trig.factor
extra/multi-methods/multi-methods.factor
extra/multi-methods/tests/definitions.factor
extra/namespaces/lib/authors.txt [deleted file]
extra/namespaces/lib/lib-tests.factor [deleted file]
extra/namespaces/lib/lib.factor [deleted file]
extra/namespaces/lib/summary.txt [deleted file]
extra/namespaces/lib/tags.txt [deleted file]
extra/newfx/newfx.factor
extra/obj/alist/alist.factor [deleted file]
extra/obj/examples/todo/todo.factor [deleted file]
extra/obj/misc/misc.factor [deleted file]
extra/obj/obj.factor [deleted file]
extra/obj/papers/papers.factor [deleted file]
extra/obj/print/print.factor [deleted file]
extra/obj/util/util.factor [deleted file]
extra/obj/view/view.factor [deleted file]
extra/opengl/capabilities/authors.txt [deleted file]
extra/opengl/capabilities/capabilities-docs.factor [deleted file]
extra/opengl/capabilities/capabilities.factor [deleted file]
extra/opengl/capabilities/summary.txt [deleted file]
extra/opengl/capabilities/tags.txt [deleted file]
extra/opengl/demo-support/demo-support.factor
extra/opengl/framebuffers/authors.txt [deleted file]
extra/opengl/framebuffers/framebuffers-docs.factor [deleted file]
extra/opengl/framebuffers/framebuffers.factor [deleted file]
extra/opengl/framebuffers/summary.txt [deleted file]
extra/opengl/framebuffers/tags.txt [deleted file]
extra/opengl/gadgets/gadgets.factor
extra/opengl/shaders/authors.txt [deleted file]
extra/opengl/shaders/shaders-docs.factor [deleted file]
extra/opengl/shaders/shaders.factor [deleted file]
extra/opengl/shaders/summary.txt [deleted file]
extra/opengl/shaders/tags.txt [deleted file]
extra/oracle/authors.txt [deleted file]
extra/oracle/liboci/authors.txt [deleted file]
extra/oracle/liboci/liboci.factor [deleted file]
extra/oracle/oracle-tests.factor [deleted file]
extra/oracle/oracle.factor [deleted file]
extra/oracle/summary.txt [deleted file]
extra/oracle/tags.txt [deleted file]
extra/ori/ori.factor
extra/otug-talk/2bi.png [new file with mode: 0644]
extra/otug-talk/2bi_at.png [new file with mode: 0644]
extra/otug-talk/2bi_star.png [new file with mode: 0644]
extra/otug-talk/authors.txt [new file with mode: 0644]
extra/otug-talk/bi.png [new file with mode: 0644]
extra/otug-talk/bi_at.png [new file with mode: 0644]
extra/otug-talk/bi_star.png [new file with mode: 0644]
extra/otug-talk/otug-talk.factor [new file with mode: 0644]
extra/otug-talk/summary.txt [new file with mode: 0644]
extra/otug-talk/tags.txt [new file with mode: 0644]
extra/pack/authors.txt [deleted file]
extra/pack/pack-tests.factor [deleted file]
extra/pack/pack.factor [deleted file]
extra/parser-combinators/parser-combinators.factor
extra/parser-combinators/regexp/regexp.factor
extra/partial-continuations/partial-continuations.factor
extra/porter-stemmer/authors.txt [deleted file]
extra/porter-stemmer/porter-stemmer-docs.factor [deleted file]
extra/porter-stemmer/porter-stemmer-tests.factor [deleted file]
extra/porter-stemmer/porter-stemmer.factor [deleted file]
extra/porter-stemmer/summary.txt [deleted file]
extra/porter-stemmer/test/output.txt [deleted file]
extra/porter-stemmer/test/voc.txt [deleted file]
extra/printf/authors.txt [deleted file]
extra/printf/printf-docs.factor [deleted file]
extra/printf/printf-tests.factor [deleted file]
extra/printf/printf.factor [deleted file]
extra/printf/summary.txt [deleted file]
extra/processing/gadget/gadget.factor [deleted file]
extra/processing/processing.factor [deleted file]
extra/project-euler/215/215.factor
extra/project-euler/common/common.factor
extra/project-euler/project-euler.factor
extra/random-weighted/random-weighted.factor
extra/random/blum-blum-shub/blum-blum-shub.factor
extra/raptor/authors.txt [deleted file]
extra/raptor/config.factor [deleted file]
extra/raptor/cron/authors.txt [deleted file]
extra/raptor/cron/cron.factor [deleted file]
extra/raptor/cron/tags.txt [deleted file]
extra/raptor/cronjobs.factor [deleted file]
extra/raptor/raptor.factor [deleted file]
extra/raptor/readme [deleted file]
extra/raptor/tags.txt [deleted file]
extra/reports/noise/noise.factor
extra/rewrite-closures/rewrite-closures.factor
extra/roman/authors.txt [deleted file]
extra/roman/roman-docs.factor [deleted file]
extra/roman/roman-tests.factor [deleted file]
extra/roman/roman.factor [deleted file]
extra/roman/summary.txt [deleted file]
extra/roman/tags.txt [deleted file]
extra/self/self.factor
extra/sequences/complex-components/authors.txt [deleted file]
extra/sequences/complex-components/complex-components-docs.factor [deleted file]
extra/sequences/complex-components/complex-components-tests.factor [deleted file]
extra/sequences/complex-components/complex-components.factor [deleted file]
extra/sequences/complex-components/summary.txt [deleted file]
extra/sequences/complex-components/tags.txt [deleted file]
extra/sequences/complex/authors.txt [deleted file]
extra/sequences/complex/complex-docs.factor [deleted file]
extra/sequences/complex/complex-tests.factor [deleted file]
extra/sequences/complex/complex.factor [deleted file]
extra/sequences/complex/summary.txt [deleted file]
extra/sequences/complex/tags.txt [deleted file]
extra/sequences/lib/authors.txt [deleted file]
extra/sequences/lib/lib-docs.factor [deleted file]
extra/sequences/lib/lib-tests.factor [deleted file]
extra/sequences/lib/lib.factor [deleted file]
extra/sequences/lib/summary.txt [deleted file]
extra/sequences/lib/tags.txt [deleted file]
extra/sequences/merged/merged.factor
extra/shell/shell.factor
extra/slides/lib.factor [deleted file]
extra/slides/slides.factor
extra/soundex/author.txt [deleted file]
extra/soundex/soundex-tests.factor [deleted file]
extra/soundex/soundex.factor [deleted file]
extra/soundex/summary.txt [deleted file]
extra/spheres/spheres.factor
extra/state-machine/state-machine.factor
extra/strings/lib/lib-tests.factor [deleted file]
extra/strings/lib/lib.factor [deleted file]
extra/sudoku/sudoku.factor
extra/system-info/linux/linux.factor
extra/system-info/macosx/macosx.factor
extra/tar/tar.factor
extra/taxes/usa/federal/federal.factor
extra/taxes/usa/fica/fica.factor
extra/tetris/game/game.factor
extra/tetris/gl/gl.factor
extra/tetris/tetris.factor
extra/time/authors.txt [deleted file]
extra/time/time-docs.factor [deleted file]
extra/time/time-tests.factor [deleted file]
extra/time/time.factor [deleted file]
extra/trails/trails.factor
extra/ui/gadgets/frame-buffer/frame-buffer.factor [deleted file]
extra/units/units.factor
extra/update/backup/backup.factor
extra/update/latest/latest.factor
extra/update/update.factor
extra/usa-cities/usa-cities.factor
extra/vars/vars.factor
extra/vpri-talk/vpri-talk.factor
extra/webapps/help/help.factor
extra/webapps/irc-log/irc-log.factor
extra/webapps/pastebin/pastebin.factor
extra/webapps/planet/planet.factor
extra/webapps/wiki/wiki.factor
extra/webkit-demo/deploy.factor
extra/websites/concatenative/concatenative.factor
extra/wordtimer/wordtimer.factor
misc/fuel/README
misc/fuel/factor-mode.el
misc/fuel/fuel-base.el
misc/fuel/fuel-completion.el [new file with mode: 0644]
misc/fuel/fuel-connection.el [new file with mode: 0644]
misc/fuel/fuel-debug.el
misc/fuel/fuel-eval.el
misc/fuel/fuel-font-lock.el
misc/fuel/fuel-help.el
misc/fuel/fuel-listener.el
misc/fuel/fuel-log.el [new file with mode: 0644]
misc/fuel/fuel-mode.el
misc/fuel/fuel-syntax.el
unfinished/benchmark/richards/richards.factor
unmaintained/assocs-lib/authors.txt [new file with mode: 0644]
unmaintained/assocs-lib/lib-tests.factor [new file with mode: 0644]
unmaintained/assocs-lib/lib.factor [new file with mode: 0755]
unmaintained/assocs-lib/summary.txt [new file with mode: 0644]
unmaintained/assocs-lib/tags.txt [new file with mode: 0644]
unmaintained/bake/authors.txt [new file with mode: 0644]
unmaintained/bake/bake-tests.factor [new file with mode: 0644]
unmaintained/bake/bake.factor [new file with mode: 0644]
unmaintained/bake/fry/fry-tests.factor [new file with mode: 0755]
unmaintained/bake/fry/fry.factor [new file with mode: 0644]
unmaintained/bake/summary.txt [new file with mode: 0644]
unmaintained/bitfields/authors.txt [new file with mode: 0644]
unmaintained/bitfields/bitfields-docs.factor [new file with mode: 0644]
unmaintained/bitfields/bitfields-tests.factor [new file with mode: 0755]
unmaintained/bitfields/bitfields.factor [new file with mode: 0755]
unmaintained/bitfields/summary.txt [new file with mode: 0644]
unmaintained/bitfields/tags.txt [new file with mode: 0644]
unmaintained/combinators-lib/authors.txt [new file with mode: 0755]
unmaintained/combinators-lib/lib-docs.factor [new file with mode: 0755]
unmaintained/combinators-lib/lib-tests.factor [new file with mode: 0755]
unmaintained/combinators-lib/lib.factor [new file with mode: 0755]
unmaintained/fs/authors.txt [new file with mode: 0755]
unmaintained/fs/fs.factor [new file with mode: 0644]
unmaintained/fs/tags.txt [new file with mode: 0644]
unmaintained/if/authors.txt [new file with mode: 0755]
unmaintained/if/if.factor [new file with mode: 0644]
unmaintained/if/tags.txt [new file with mode: 0644]
unmaintained/ifreq/authors.txt [new file with mode: 0755]
unmaintained/ifreq/ifreq.factor [new file with mode: 0644]
unmaintained/ifreq/tags.txt [new file with mode: 0644]
unmaintained/namespaces-lib/authors.txt [new file with mode: 0644]
unmaintained/namespaces-lib/lib-tests.factor [new file with mode: 0755]
unmaintained/namespaces-lib/lib.factor [new file with mode: 0755]
unmaintained/namespaces-lib/summary.txt [new file with mode: 0644]
unmaintained/namespaces-lib/tags.txt [new file with mode: 0644]
unmaintained/obj/alist/alist.factor [new file with mode: 0644]
unmaintained/obj/examples/todo/todo.factor [new file with mode: 0644]
unmaintained/obj/misc/misc.factor [new file with mode: 0644]
unmaintained/obj/obj.factor [new file with mode: 0644]
unmaintained/obj/papers/papers.factor [new file with mode: 0644]
unmaintained/obj/print/print.factor [new file with mode: 0644]
unmaintained/obj/util/util.factor [new file with mode: 0644]
unmaintained/obj/view/view.factor [new file with mode: 0644]
unmaintained/oracle/authors.txt [new file with mode: 0644]
unmaintained/oracle/liboci/authors.txt [new file with mode: 0755]
unmaintained/oracle/liboci/liboci.factor [new file with mode: 0644]
unmaintained/oracle/oracle-tests.factor [new file with mode: 0755]
unmaintained/oracle/oracle.factor [new file with mode: 0644]
unmaintained/oracle/summary.txt [new file with mode: 0644]
unmaintained/oracle/tags.txt [new file with mode: 0644]
unmaintained/raptor/authors.txt [new file with mode: 0755]
unmaintained/raptor/config.factor [new file with mode: 0644]
unmaintained/raptor/cron/authors.txt [new file with mode: 0755]
unmaintained/raptor/cron/cron.factor [new file with mode: 0755]
unmaintained/raptor/cron/tags.txt [new file with mode: 0644]
unmaintained/raptor/cronjobs.factor [new file with mode: 0644]
unmaintained/raptor/raptor.factor [new file with mode: 0755]
unmaintained/raptor/readme [new file with mode: 0644]
unmaintained/raptor/tags.txt [new file with mode: 0644]
unmaintained/route/authors.txt [new file with mode: 0755]
unmaintained/route/route.factor [new file with mode: 0644]
unmaintained/route/tags.txt [new file with mode: 0644]
unmaintained/sequences-lib/authors.txt [new file with mode: 0644]
unmaintained/sequences-lib/lib-docs.factor [new file with mode: 0755]
unmaintained/sequences-lib/lib-tests.factor [new file with mode: 0755]
unmaintained/sequences-lib/lib.factor [new file with mode: 0755]
unmaintained/sequences-lib/summary.txt [new file with mode: 0644]
unmaintained/sequences-lib/tags.txt [new file with mode: 0644]
unmaintained/sockios/authors.txt [new file with mode: 0755]
unmaintained/sockios/sockios.factor [new file with mode: 0644]
unmaintained/sockios/tags.txt [new file with mode: 0644]
unmaintained/strings-lib/lib-tests.factor [new file with mode: 0644]
unmaintained/strings-lib/lib.factor [new file with mode: 0644]
unmaintained/swap/authors.txt [new file with mode: 0755]
unmaintained/swap/swap.factor [new file with mode: 0644]
unmaintained/swap/tags.txt [new file with mode: 0644]
vm/cpu-ppc.S
vm/os-windows.c
vm/os-windows.h

diff --git a/basis/alias/alias-docs.factor b/basis/alias/alias-docs.factor
deleted file mode 100644 (file)
index 3f2eee6..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel words help.markup help.syntax ;
-IN: alias
-
-HELP: ALIAS:
-{ $syntax "ALIAS: new-word existing-word" }
-{ $values { "new-word" word } { "existing-word" word } }
-{ $description "Creates a " { $snippet "new" } " inlined word that calls the " { $snippet "existing" } " word." }
-{ $examples
-    { $example "USING: alias prettyprint sequences ;"
-               "IN: alias.test"
-               "ALIAS: sequence-nth nth"
-               "0 { 10 20 30 } sequence-nth ."
-               "10"
-    }
-} ;
-
-ARTICLE: "alias" "Word aliasing"
-"The " { $vocab-link "alias" } " vocabulary implements a way to make many different names for the same word. Although creating new names for words is generally frowned upon, aliases are useful for the Win32 API and other cases where words need to be renamed for symmetry." $nl 
-"Make a new word that aliases another word:"
-{ $subsection define-alias }
-"Make an alias at parse-time:"
-{ $subsection POSTPONE: ALIAS: } ;
-
-ABOUT: "alias"
diff --git a/basis/alias/alias.factor b/basis/alias/alias.factor
deleted file mode 100644 (file)
index 4de4d83..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.\r
-! See http://factorcode.org/license.txt for BSD license.\r
-USING: accessors words quotations kernel effects sequences parser ;\r
-IN: alias\r
-\r
-PREDICATE: alias < word "alias" word-prop ;\r
-\r
-M: alias reset-word\r
-    [ call-next-method ] [ f "alias" set-word-prop ] bi ;\r
-\r
-M: alias stack-effect\r
-    def>> first stack-effect ;\r
-\r
-: define-alias ( new old -- )\r
-    [ 1quotation define-inline ]\r
-    [ drop t "alias" set-word-prop ] 2bi ;\r
-\r
-: ALIAS: CREATE-WORD scan-word define-alias ; parsing\r
diff --git a/basis/alias/authors.txt b/basis/alias/authors.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/alias/summary.txt b/basis/alias/summary.txt
deleted file mode 100644 (file)
index 15690a7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Defining multiple words with the same name
index ae148e3ac06f6263c204934bc5b21dc30fdd793f..d1354cb04e03f584263c69250a494b1047321b54 100644 (file)
@@ -234,17 +234,16 @@ M: long-long-type box-return ( type -- )
     f swap box-parameter ;
 
 : define-deref ( name -- )
-    [ CHAR: * prefix "alien.c-types" create ]
-    [ c-getter 0 prefix ] bi
-    define-inline ;
+    [ CHAR: * prefix "alien.c-types" create ] [ c-getter 0 prefix ] bi
+    (( c-ptr -- value )) define-inline ;
 
 : define-out ( name -- )
     [ "alien.c-types" constructor-word ]
-    [ dup c-setter '[ _ <c-object> [ 0 @ ] keep ] ]
-    bi define-inline ;
+    [ dup c-setter '[ _ <c-object> [ 0 @ ] keep ] ] bi
+    (( value -- c-ptr )) define-inline ;
 
 : c-bool> ( int -- ? )
-    zero? not ;
+    0 = not ; inline
 
 : define-primitive-type ( type name -- )
     [ typedef ]
diff --git a/basis/alien/strings/windows/tags.txt b/basis/alien/strings/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
index abce91f56f45ecc86705f76b054beb77394596a0..f5537fa23994d2320f98af4f5859d00845191231 100644 (file)
@@ -52,8 +52,8 @@ PREDICATE: slot-writer < word "writing" word-prop >boolean ;
         [ (>>offset) ] [ type>> heap-size + ] 2bi
     ] reduce ;
 
-: define-struct-slot-word ( word quot spec -- )
-    offset>> prefix define-inline ;
+: define-struct-slot-word ( word quot spec effect -- )
+    [ offset>> prefix ] dip define-inline ;
 
 : define-getter ( type spec -- )
     [ set-reader-props ] keep
@@ -62,11 +62,13 @@ PREDICATE: slot-writer < word "writing" word-prop >boolean ;
         type>>
         [ c-getter ] [ c-type-boxer-quot ] bi append
     ]
-    [ ] tri define-struct-slot-word ;
+    [ ] tri
+    (( c-ptr -- value )) define-struct-slot-word ;
 
 : define-setter ( type spec -- )
     [ set-writer-props ] keep
-    [ writer>> ] [ type>> c-setter ] [ ] tri define-struct-slot-word ;
+    [ writer>> ] [ type>> c-setter ] [ ] tri
+    (( value c-ptr -- )) define-struct-slot-word ;
 
 : define-field ( type spec -- )
     [ define-getter ] [ define-setter ] 2bi ;
index 15d82884f9c82e6fa18bd4e3511a94471efe1f35..a02d2f3cb46e66de39a27d216d4da805e8800c26 100644 (file)
@@ -4,7 +4,7 @@ USING: accessors arrays alien alien.c-types alien.structs
 alien.arrays alien.strings kernel math namespaces parser
 sequences words quotations math.parser splitting grouping
 effects assocs combinators lexer strings.parser alien.parser 
-fry ;
+fry vocabs.parser ;
 IN: alien.syntax
 
 : DLL" lexer get skip-blank parse-string dlopen parsed ; parsing
diff --git a/basis/assoc-heaps/assoc-heaps-docs.factor b/basis/assoc-heaps/assoc-heaps-docs.factor
new file mode 100644 (file)
index 0000000..b148995
--- /dev/null
@@ -0,0 +1,32 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: help.markup help.syntax io.streams.string assocs
+heaps.private ;
+IN: assoc-heaps
+
+HELP: <assoc-heap>
+{ $values { "assoc" assoc } { "heap" heap } { "assoc-heap" assoc-heap } }
+{ $description "Constructs a new " { $link assoc-heap } " from two existing data structures." } ;
+
+HELP: <unique-max-heap>
+{ $values { "unique-heap" assoc-heap } }
+{ $description "Creates a new " { $link assoc-heap } " where the assoc is a hashtable and the heap is a max-heap. Popping an element from the heap leaves this element in the hashtable to ensure that the element will not be processed again." } ;
+
+HELP: <unique-min-heap>
+{ $values { "unique-heap" assoc-heap } }
+{ $description "Creates a new " { $link assoc-heap } " where the assoc is a hashtable and the heap is a min-heap. Popping an element from the heap leaves this element in the hashtable to ensure that the element will not be processed again." } ;
+
+{ <unique-max-heap> <unique-min-heap> } related-words
+
+HELP: assoc-heap
+{ $description "A data structure containing an assoc and a heap to get certain properties with better time constraints at the expense of more space and complexity. For instance, a hashtable and a heap can be combined into one assoc-heap to get a sorted data structure with O(1) lookup. Operations on assoc-heap may update both the assoc and the heap or leave them out of sync if it's advantageous." } ;
+
+ARTICLE: "assoc-heaps" "Associative heaps"
+"The " { $vocab-link "assoc-heaps" } " vocabulary combines exists to synthesize data structures with better time properties than either of the two component data structures alone." $nl
+"Associative heap constructor:"
+{ $subsection <assoc-heap> }
+"Unique heaps:"
+{ $subsection <unique-min-heap> }
+{ $subsection <unique-max-heap> } ;
+
+ABOUT: "assoc-heaps"
diff --git a/basis/assoc-heaps/assoc-heaps-tests.factor b/basis/assoc-heaps/assoc-heaps-tests.factor
new file mode 100644 (file)
index 0000000..6ea3fe1
--- /dev/null
@@ -0,0 +1,4 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: tools.test assoc-heaps ;
+IN: assoc-heaps.tests
diff --git a/basis/assoc-heaps/assoc-heaps.factor b/basis/assoc-heaps/assoc-heaps.factor
new file mode 100644 (file)
index 0000000..a495aed
--- /dev/null
@@ -0,0 +1,30 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors assocs hashtables heaps kernel ;
+IN: assoc-heaps
+
+TUPLE: assoc-heap assoc heap ;
+
+C: <assoc-heap> assoc-heap
+
+: <unique-min-heap> ( -- unique-heap )
+    H{ } clone <min-heap> <assoc-heap> ;
+
+: <unique-max-heap> ( -- unique-heap )
+    H{ } clone <max-heap> <assoc-heap> ;
+
+M: assoc-heap heap-push* ( value key assoc-heap -- entry )
+    pick over assoc>> key? [
+        3drop f
+    ] [
+        [ assoc>> swapd set-at ] [ heap>> heap-push* ] 3bi
+    ] if ;
+
+M: assoc-heap heap-pop ( assoc-heap -- value key )
+    heap>> heap-pop ;
+
+M: assoc-heap heap-peek ( assoc-heap -- value key )
+    heap>> heap-peek ;
+
+M: assoc-heap heap-empty? ( assoc-heap -- value key )
+    heap>> heap-empty? ;
diff --git a/basis/assoc-heaps/authors.txt b/basis/assoc-heaps/authors.txt
new file mode 100644 (file)
index 0000000..b4bd0e7
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
\ No newline at end of file
index d407f0b84d08583d2a83a5c1663fa9d2e6fd7925..66c786f6bb11de62705847b6b926b7c2556c44af 100644 (file)
@@ -11,7 +11,7 @@ TUPLE: bit-array
 
 <PRIVATE
 
-: n>byte -3 shift ; inline
+: n>byte ( m -- n ) -3 shift ; inline
 
 : byte/bit ( n alien -- byte bit )
     over n>byte alien-unsigned-1 swap 7 bitand ; inline
@@ -19,9 +19,9 @@ TUPLE: bit-array
 : set-bit ( ? byte bit -- byte )
     2^ rot [ bitor ] [ bitnot bitand ] if ; inline
 
-: bits>cells 31 + -5 shift ; inline
+: bits>cells ( m -- n ) 31 + -5 shift ; inline
 
-: bits>bytes 7 + n>byte ; inline
+: bits>bytes ( m -- n ) 7 + n>byte ; inline
 
 : (set-bits) ( bit-array n -- )
     [ [ length bits>cells ] keep ] dip swap underlying>>
index 133b64acaa425dd11598dd773baae24dc9924668..36f6291bc6f7bb31ca9617184182ad7a11c00919 100644 (file)
@@ -12,5 +12,6 @@ namespaces eval kernel vocabs.loader io ;
         ignore-cli-args? not script get and
         [ run-script ] [ "run" get run ] if*
         output-stream get [ stream-flush ] when*
+        0 exit
     ] [ print-error 1 exit ] recover
 ] set-boot-quot
index a60ce04e15ad3aa1bcfec4720b9c2888db6dbffb..49f504fd41441d34f148171aefb5c9f3a43f70b4 100644 (file)
@@ -7,4 +7,5 @@ io ;
     (command-line) parse-command-line
     "run" get run
     output-stream get [ stream-flush ] when*
+    0 exit
 ] set-boot-quot
index 91aa22b73814aed26835ea3692967eac4a92333b..3856382ffbb4b2b999c8e7d75821ef258d792d9f 100644 (file)
@@ -1,4 +1,4 @@
-USING: help.markup help.syntax io io.files ;
+USING: help.markup help.syntax io io.files io.pathnames ;
 IN: bootstrap.image
 
 ARTICLE: "bootstrap.image" "Bootstrapping new images"
index c7d87776a19b12a0e18ccbef0ea469c2afe6965e..bbd7df91089d858c2fa98c661f516164f876cae5 100644 (file)
@@ -1,14 +1,15 @@
 ! Copyright (C) 2004, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien arrays byte-arrays generic assocs hashtables assocs
-hashtables.private io kernel kernel.private math namespaces make
-parser prettyprint sequences sequences.private strings sbufs
+hashtables.private io io.binary io.files io.encodings.binary
+io.pathnames kernel kernel.private math namespaces make parser
+prettyprint sequences sequences.private strings sbufs
 vectors words quotations assocs system layouts splitting
 grouping growable classes classes.builtin classes.tuple
-classes.tuple.private words.private io.binary io.files vocabs
+classes.tuple.private words.private vocabs
 vocabs.loader source-files definitions debugger
 quotations.private sequences.private combinators
-io.encodings.binary math.order math.private accessors
+math.order math.private accessors
 slots.private compiler.units ;
 IN: bootstrap.image
 
@@ -65,7 +66,7 @@ M: id equal?
 
 SYMBOL: objects
 
-: (objects) <id> objects get ; inline
+: (objects) ( obj -- id assoc ) <id> objects get ; inline
 
 : lookup-object ( obj -- n/f ) (objects) at ;
 
index f0edf85e653e3a12d0d65d9e0814784f5f8935f7..d70a253e5f46a90cc3231205e2f3061b17d9636a 100644 (file)
@@ -2,7 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: checksums checksums.openssl splitting assocs
 kernel io.files bootstrap.image sequences io namespaces make
-io.launcher math io.encodings.ascii ;
+io.launcher math io.encodings.ascii io.files.temp io.pathnames
+io.directories ;
 IN: bootstrap.image.upload
 
 SYMBOL: upload-images-destination
index a38107fbabcd0ab749af06928b4adc91a752c0ac..b9a49b48b82d43bbd979f740e29ea36cf00064fd 100644 (file)
@@ -1,12 +1,11 @@
 USING: system vocabs vocabs.loader kernel combinators
-namespaces sequences io.backend ;
+namespaces sequences io.backend accessors ;
 IN: bootstrap.io
 
 "bootstrap.compiler" vocab [
-    "io." {
+    "io.backend." {
         { [ "io-backend" get ] [ "io-backend" get ] }
-        { [ os unix? ] [ "unix" ] }
+        { [ os unix? ] [ "unix." os name>> append ] }
         { [ os winnt? ] [ "windows.nt" ] }
-        { [ os wince? ] [ "windows.ce" ] }
     } cond append require
 ] when
index fb7292b989caaa7508711711a014c8d935dc27f7..f0622726f537ebd64d49f6d79aa329f6eb19921e 100644 (file)
@@ -1,11 +1,11 @@
 ! Copyright (C) 2004, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors init namespaces words io
+USING: accessors init namespaces words words.symbol io
 kernel.private math memory continuations kernel io.files
-io.backend system parser vocabs sequences
+io.pathnames io.backend system parser vocabs sequences
 vocabs.loader combinators splitting source-files strings
-definitions assocs compiler.errors compiler.units
-math.parser generic sets command-line ;
+definitions assocs compiler.errors compiler.units math.parser
+generic sets command-line ;
 IN: bootstrap.stage2
 
 SYMBOL: core-bootstrap-time
@@ -102,6 +102,8 @@ SYMBOL: bootstrap-time
     ] if
 ] [
     drop
-    load-help? off
-    "resource:basis/bootstrap/bootstrap-error.factor" run-file
+    [
+        load-help? off
+        "resource:basis/bootstrap/bootstrap-error.factor" run-file
+    ] with-scope
 ] recover
diff --git a/basis/cairo/authors.txt b/basis/cairo/authors.txt
new file mode 100644 (file)
index 0000000..68d35d1
--- /dev/null
@@ -0,0 +1,2 @@
+Sampo Vuori
+Doug Coleman
diff --git a/basis/cairo/cairo.factor b/basis/cairo/cairo.factor
new file mode 100755 (executable)
index 0000000..da7f5a2
--- /dev/null
@@ -0,0 +1,37 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: cairo.ffi kernel accessors sequences
+namespaces fry continuations destructors ;
+IN: cairo
+
+TUPLE: cairo-t alien ;
+C: <cairo-t> cairo-t
+M: cairo-t dispose ( alien -- ) alien>> cairo_destroy ;
+
+TUPLE: cairo-surface-t alien ;
+C: <cairo-surface-t> cairo-surface-t
+M: cairo-surface-t dispose ( alien -- ) alien>> cairo_surface_destroy ;
+
+: check-cairo ( cairo_status_t -- )
+    dup CAIRO_STATUS_SUCCESS = [ drop ]
+    [ cairo_status_to_string "Cairo error: " prepend throw ] if ;
+
+SYMBOL: cairo
+: cr ( -- cairo ) cairo get ; inline
+
+: (with-cairo) ( cairo-t quot -- )
+    [ alien>> cairo ] dip
+    '[ @ cr cairo_status check-cairo ]
+    with-variable ; inline
+    
+: with-cairo ( cairo quot -- )
+    [ <cairo-t> ] dip '[ _ (with-cairo) ] with-disposal ; inline
+
+: (with-surface) ( cairo-surface-t quot -- )
+    [ alien>> ] dip [ cairo_surface_status check-cairo ] bi ; inline
+
+: with-surface ( cairo_surface quot -- )
+    [ <cairo-surface-t> ] dip '[ _ (with-surface) ] with-disposal ; inline
+
+: with-cairo-from-surface ( cairo_surface quot -- )
+    '[ cairo_create _ with-cairo ] with-surface ; inline
diff --git a/basis/cairo/ffi/ffi.factor b/basis/cairo/ffi/ffi.factor
new file mode 100644 (file)
index 0000000..d29a3fb
--- /dev/null
@@ -0,0 +1,948 @@
+! Copyright (c) 2007 Sampo Vuori
+! Copyright (c) 2008 Matthew Willis
+!
+! Adapted from cairo.h, version 1.5.14
+! License: http://factorcode.org/license.txt
+
+USING: system combinators alien alien.syntax kernel 
+alien.c-types accessors sequences arrays ui.gadgets ;
+
+IN: cairo.ffi
+<< "cairo" {
+    { [ os winnt? ] [ "libcairo-2.dll" ] }
+    { [ os macosx? ] [ "/opt/local/lib/libcairo.dylib" ] }
+    { [ os unix? ] [ "libcairo.so.2" ] }
+} cond "cdecl" add-library >>
+
+LIBRARY: cairo
+
+FUNCTION: int cairo_version ( ) ;
+FUNCTION: char* cairo_version_string ( ) ;
+
+TYPEDEF: int cairo_bool_t
+
+! I am leaving these and other void* types as opaque structures
+TYPEDEF: void* cairo_t
+TYPEDEF: void* cairo_surface_t
+
+C-STRUCT: cairo_matrix_t
+    { "double" "xx" }
+    { "double" "yx" }
+    { "double" "xy" }
+    { "double" "yy" }
+    { "double" "x0" }
+    { "double" "y0" } ;
+
+TYPEDEF: void* cairo_pattern_t
+
+TYPEDEF: void* cairo_destroy_func_t
+: cairo-destroy-func ( quot -- callback )
+    [ "void" { "void*" } "cdecl" ] dip alien-callback ; inline
+
+! See cairo.h for details
+C-STRUCT: cairo_user_data_key_t
+    { "int" "unused" } ;
+
+TYPEDEF: int cairo_status_t
+C-ENUM:
+    CAIRO_STATUS_SUCCESS
+    CAIRO_STATUS_NO_MEMORY
+    CAIRO_STATUS_INVALID_RESTORE
+    CAIRO_STATUS_INVALID_POP_GROUP
+    CAIRO_STATUS_NO_CURRENT_POINT
+    CAIRO_STATUS_INVALID_MATRIX
+    CAIRO_STATUS_INVALID_STATUS
+    CAIRO_STATUS_NULL_POINTER
+    CAIRO_STATUS_INVALID_STRING
+    CAIRO_STATUS_INVALID_PATH_DATA
+    CAIRO_STATUS_READ_ERROR
+    CAIRO_STATUS_WRITE_ERROR
+    CAIRO_STATUS_SURFACE_FINISHED
+    CAIRO_STATUS_SURFACE_TYPE_MISMATCH
+    CAIRO_STATUS_PATTERN_TYPE_MISMATCH
+    CAIRO_STATUS_INVALID_CONTENT
+    CAIRO_STATUS_INVALID_FORMAT
+    CAIRO_STATUS_INVALID_VISUAL
+    CAIRO_STATUS_FILE_NOT_FOUND
+    CAIRO_STATUS_INVALID_DASH
+    CAIRO_STATUS_INVALID_DSC_COMMENT
+    CAIRO_STATUS_INVALID_INDEX
+    CAIRO_STATUS_CLIP_NOT_REPRESENTABLE
+    CAIRO_STATUS_TEMP_FILE_ERROR
+    CAIRO_STATUS_INVALID_STRIDE ;
+
+TYPEDEF: int cairo_content_t
+: CAIRO_CONTENT_COLOR          HEX: 1000 ;
+: CAIRO_CONTENT_ALPHA          HEX: 2000 ;
+: CAIRO_CONTENT_COLOR_ALPHA    HEX: 3000 ;
+
+TYPEDEF: void* cairo_write_func_t
+: cairo-write-func ( quot -- callback )
+    [ "cairo_status_t" { "void*" "uchar*" "int" } "cdecl" ] dip alien-callback ; inline
+                          
+TYPEDEF: void* cairo_read_func_t
+: cairo-read-func ( quot -- callback )
+    [ "cairo_status_t" { "void*" "uchar*" "int" } "cdecl" ] dip alien-callback ; inline
+
+! Functions for manipulating state objects
+FUNCTION: cairo_t*
+cairo_create ( cairo_surface_t* target ) ;
+
+FUNCTION: cairo_t*
+cairo_reference ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_destroy ( cairo_t* cr ) ;
+
+FUNCTION: uint
+cairo_get_reference_count ( cairo_t* cr ) ;
+
+FUNCTION: void*
+cairo_get_user_data ( cairo_t* cr, cairo_user_data_key_t* key ) ;
+
+FUNCTION: cairo_status_t
+cairo_set_user_data ( cairo_t* cr, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+
+FUNCTION: void
+cairo_save ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_restore ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_push_group ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_push_group_with_content  ( cairo_t* cr, cairo_content_t content ) ;
+
+FUNCTION: cairo_pattern_t*
+cairo_pop_group ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_pop_group_to_source ( cairo_t* cr ) ;
+
+! Modify state
+TYPEDEF: int cairo_operator_t
+C-ENUM:
+    CAIRO_OPERATOR_CLEAR
+
+    CAIRO_OPERATOR_SOURCE
+    CAIRO_OPERATOR_OVER
+    CAIRO_OPERATOR_IN
+    CAIRO_OPERATOR_OUT
+    CAIRO_OPERATOR_ATOP
+
+    CAIRO_OPERATOR_DEST
+    CAIRO_OPERATOR_DEST_OVER
+    CAIRO_OPERATOR_DEST_IN
+    CAIRO_OPERATOR_DEST_OUT
+    CAIRO_OPERATOR_DEST_ATOP
+
+    CAIRO_OPERATOR_XOR
+    CAIRO_OPERATOR_ADD
+    CAIRO_OPERATOR_SATURATE ;
+
+FUNCTION: void
+cairo_set_operator ( cairo_t* cr, cairo_operator_t op ) ;
+
+FUNCTION: void
+cairo_set_source ( cairo_t* cr, cairo_pattern_t* source ) ;
+
+FUNCTION: void
+cairo_set_source_rgb ( cairo_t* cr, double red, double green, double blue ) ;
+
+FUNCTION: void
+cairo_set_source_rgba ( cairo_t* cr, double red, double green, double blue, double alpha ) ;
+
+FUNCTION: void
+cairo_set_source_surface ( cairo_t* cr, cairo_surface_t* surface, double x, double y ) ;
+
+FUNCTION: void
+cairo_set_tolerance ( cairo_t* cr, double tolerance ) ;
+
+TYPEDEF: int cairo_antialias_t
+C-ENUM:
+    CAIRO_ANTIALIAS_DEFAULT
+    CAIRO_ANTIALIAS_NONE
+    CAIRO_ANTIALIAS_GRAY
+    CAIRO_ANTIALIAS_SUBPIXEL ;
+
+FUNCTION: void
+cairo_set_antialias ( cairo_t* cr, cairo_antialias_t antialias ) ;
+
+TYPEDEF: int cairo_fill_rule_t
+C-ENUM:
+    CAIRO_FILL_RULE_WINDING
+    CAIRO_FILL_RULE_EVEN_ODD ;
+
+FUNCTION: void
+cairo_set_fill_rule ( cairo_t* cr, cairo_fill_rule_t fill_rule ) ;
+
+FUNCTION: void
+cairo_set_line_width ( cairo_t* cr, double width ) ;
+
+TYPEDEF: int cairo_line_cap_t
+C-ENUM:
+    CAIRO_LINE_CAP_BUTT
+    CAIRO_LINE_CAP_ROUND
+    CAIRO_LINE_CAP_SQUARE ;
+
+FUNCTION: void
+cairo_set_line_cap ( cairo_t* cr, cairo_line_cap_t line_cap ) ;
+
+TYPEDEF: int cairo_line_join_t
+C-ENUM:
+    CAIRO_LINE_JOIN_MITER
+    CAIRO_LINE_JOIN_ROUND
+    CAIRO_LINE_JOIN_BEVEL ;
+
+FUNCTION: void
+cairo_set_line_join ( cairo_t* cr, cairo_line_join_t line_join ) ;
+
+FUNCTION: void
+cairo_set_dash ( cairo_t* cr, double* dashes, int num_dashes, double offset ) ;
+
+FUNCTION: void
+cairo_set_miter_limit ( cairo_t* cr, double limit ) ;
+
+FUNCTION: void
+cairo_translate ( cairo_t* cr, double tx, double ty ) ;
+
+FUNCTION: void
+cairo_scale ( cairo_t* cr, double sx, double sy ) ;
+
+FUNCTION: void
+cairo_rotate ( cairo_t* cr, double angle ) ;
+
+FUNCTION: void
+cairo_transform ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+
+FUNCTION: void
+cairo_set_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+
+FUNCTION: void
+cairo_identity_matrix ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_user_to_device ( cairo_t* cr, double* x, double* y ) ;
+
+FUNCTION: void
+cairo_user_to_device_distance ( cairo_t* cr, double* dx, double* dy ) ;
+
+FUNCTION: void
+cairo_device_to_user ( cairo_t* cr, double* x, double* y ) ;
+
+FUNCTION: void
+cairo_device_to_user_distance ( cairo_t* cr, double* dx, double* dy ) ;
+
+! Path creation functions
+FUNCTION: void
+cairo_new_path ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_move_to ( cairo_t* cr, double x, double y ) ;
+
+FUNCTION: void
+cairo_new_sub_path ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_line_to ( cairo_t* cr, double x, double y ) ;
+
+FUNCTION: void
+cairo_curve_to ( cairo_t* cr, double x1, double y1, double x2, double y2, double x3, double y3 ) ;
+
+FUNCTION: void
+cairo_arc ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ;
+
+FUNCTION: void
+cairo_arc_negative ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ;
+
+FUNCTION: void
+cairo_rel_move_to ( cairo_t* cr, double dx, double dy ) ;
+
+FUNCTION: void
+cairo_rel_line_to ( cairo_t* cr, double dx, double dy ) ;
+
+FUNCTION: void
+cairo_rel_curve_to ( cairo_t* cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3 ) ;
+
+FUNCTION: void
+cairo_rectangle ( cairo_t* cr, double x, double y, double width, double height ) ;
+
+FUNCTION: void
+cairo_close_path ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_path_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
+
+! Painting functions
+FUNCTION: void
+cairo_paint ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_paint_with_alpha ( cairo_t* cr, double alpha ) ;
+
+FUNCTION: void
+cairo_mask ( cairo_t* cr, cairo_pattern_t* pattern ) ;
+
+FUNCTION: void
+cairo_mask_surface ( cairo_t* cr, cairo_surface_t* surface, double surface_x, double surface_y ) ;
+
+FUNCTION: void
+cairo_stroke ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_stroke_preserve ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_fill ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_fill_preserve ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_copy_page ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_show_page ( cairo_t* cr ) ;
+
+! Insideness testing
+FUNCTION: cairo_bool_t
+cairo_in_stroke ( cairo_t* cr, double x, double y ) ;
+
+FUNCTION: cairo_bool_t
+cairo_in_fill ( cairo_t* cr, double x, double y ) ;
+
+! Rectangular extents
+FUNCTION: void
+cairo_stroke_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
+
+FUNCTION: void
+cairo_fill_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
+
+! Clipping
+FUNCTION: void
+cairo_reset_clip ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_clip ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_clip_preserve ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_clip_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
+
+C-STRUCT: cairo_rectangle_t
+    { "double" "x" }
+    { "double" "y" }
+    { "double" "width" }
+    { "double" "height" } ;
+    
+C-STRUCT: cairo_rectangle_list_t
+    { "cairo_status_t"     "status" }
+    { "cairo_rectangle_t*" "rectangles" }
+    { "int"                "num_rectangles" } ;
+
+FUNCTION: cairo_rectangle_list_t*
+cairo_copy_clip_rectangle_list ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_rectangle_list_destroy ( cairo_rectangle_list_t* rectangle_list ) ;
+
+! Font/Text functions
+
+TYPEDEF: void* cairo_scaled_font_t
+
+TYPEDEF: void* cairo_font_face_t
+
+C-STRUCT: cairo_glyph_t
+  { "ulong"     "index" }
+  { "double"    "x" }
+  { "double"    "y" } ;
+
+C-STRUCT: cairo_text_extents_t
+    { "double" "x_bearing" }
+    { "double" "y_bearing" }
+    { "double" "width" }
+    { "double" "height" }
+    { "double" "x_advance" }
+    { "double" "y_advance" } ;
+
+C-STRUCT: cairo_font_extents_t
+    { "double" "ascent" }
+    { "double" "descent" }
+    { "double" "height" }
+    { "double" "max_x_advance" }
+    { "double" "max_y_advance" } ;
+
+TYPEDEF: int cairo_font_slant_t
+C-ENUM:
+    CAIRO_FONT_SLANT_NORMAL
+    CAIRO_FONT_SLANT_ITALIC
+    CAIRO_FONT_SLANT_OBLIQUE ;
+
+TYPEDEF: int cairo_font_weight_t
+C-ENUM:
+    CAIRO_FONT_WEIGHT_NORMAL
+    CAIRO_FONT_WEIGHT_BOLD ;
+
+TYPEDEF: int cairo_subpixel_order_t
+C-ENUM:
+    CAIRO_SUBPIXEL_ORDER_DEFAULT
+    CAIRO_SUBPIXEL_ORDER_RGB
+    CAIRO_SUBPIXEL_ORDER_BGR
+    CAIRO_SUBPIXEL_ORDER_VRGB
+    CAIRO_SUBPIXEL_ORDER_VBGR ;
+
+TYPEDEF: int cairo_hint_style_t
+C-ENUM:
+    CAIRO_HINT_STYLE_DEFAULT
+    CAIRO_HINT_STYLE_NONE
+    CAIRO_HINT_STYLE_SLIGHT
+    CAIRO_HINT_STYLE_MEDIUM
+    CAIRO_HINT_STYLE_FULL ;
+
+TYPEDEF: int cairo_hint_metrics_t
+C-ENUM:
+    CAIRO_HINT_METRICS_DEFAULT
+    CAIRO_HINT_METRICS_OFF
+    CAIRO_HINT_METRICS_ON ;
+
+TYPEDEF: void* cairo_font_options_t
+
+FUNCTION: cairo_font_options_t*
+cairo_font_options_create ( ) ;
+
+FUNCTION: cairo_font_options_t*
+cairo_font_options_copy ( cairo_font_options_t* original ) ;
+
+FUNCTION: void
+cairo_font_options_destroy ( cairo_font_options_t* options ) ;
+
+FUNCTION: cairo_status_t
+cairo_font_options_status ( cairo_font_options_t* options ) ;
+
+FUNCTION: void
+cairo_font_options_merge ( cairo_font_options_t* options, cairo_font_options_t* other ) ;
+
+FUNCTION: cairo_bool_t
+cairo_font_options_equal ( cairo_font_options_t* options, cairo_font_options_t* other ) ;
+
+FUNCTION: ulong
+cairo_font_options_hash ( cairo_font_options_t* options ) ;
+
+FUNCTION: void
+cairo_font_options_set_antialias ( cairo_font_options_t* options, cairo_antialias_t antialias ) ;
+
+FUNCTION: cairo_antialias_t
+cairo_font_options_get_antialias ( cairo_font_options_t* options ) ;
+
+FUNCTION: void
+cairo_font_options_set_subpixel_order ( cairo_font_options_t* options, cairo_subpixel_order_t subpixel_order ) ;
+
+FUNCTION: cairo_subpixel_order_t
+cairo_font_options_get_subpixel_order ( cairo_font_options_t* options ) ;
+
+FUNCTION: void
+cairo_font_options_set_hint_style ( cairo_font_options_t* options, cairo_hint_style_t hint_style ) ;
+
+FUNCTION: cairo_hint_style_t
+cairo_font_options_get_hint_style ( cairo_font_options_t* options ) ;
+
+FUNCTION: void
+cairo_font_options_set_hint_metrics ( cairo_font_options_t* options, cairo_hint_metrics_t hint_metrics ) ;
+
+FUNCTION: cairo_hint_metrics_t
+cairo_font_options_get_hint_metrics ( cairo_font_options_t* options ) ;
+
+! This interface is for dealing with text as text, not caring about the
+!  font object inside the the cairo_t.
+
+FUNCTION: void
+cairo_select_font_face ( cairo_t* cr, char* family, cairo_font_slant_t slant, cairo_font_weight_t weight ) ;
+
+FUNCTION: void
+cairo_set_font_size ( cairo_t* cr, double size ) ;
+
+FUNCTION: void
+cairo_set_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+
+FUNCTION: void
+cairo_get_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+
+FUNCTION: void
+cairo_set_font_options ( cairo_t* cr, cairo_font_options_t* options ) ;
+
+FUNCTION: void
+cairo_get_font_options ( cairo_t* cr, cairo_font_options_t* options ) ;
+
+FUNCTION: void
+cairo_set_font_face ( cairo_t* cr, cairo_font_face_t* font_face ) ;
+
+FUNCTION: cairo_font_face_t*
+cairo_get_font_face ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_set_scaled_font ( cairo_t* cr, cairo_scaled_font_t* scaled_font ) ;
+
+FUNCTION: cairo_scaled_font_t*
+cairo_get_scaled_font ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_show_text ( cairo_t* cr, char* utf8 ) ;
+
+FUNCTION: void
+cairo_show_glyphs ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ;
+
+FUNCTION: void
+cairo_text_path  ( cairo_t* cr, char* utf8 ) ;
+
+FUNCTION: void
+cairo_glyph_path ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ;
+
+FUNCTION: void
+cairo_text_extents ( cairo_t* cr, char* utf8, cairo_text_extents_t* extents ) ;
+
+FUNCTION: void
+cairo_glyph_extents ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ;
+
+FUNCTION: void
+cairo_font_extents ( cairo_t* cr, cairo_font_extents_t* extents ) ;
+
+! Generic identifier for a font style
+
+FUNCTION: cairo_font_face_t*
+cairo_font_face_reference ( cairo_font_face_t* font_face ) ;
+
+FUNCTION: void
+cairo_font_face_destroy ( cairo_font_face_t* font_face ) ;
+
+FUNCTION: uint
+cairo_font_face_get_reference_count ( cairo_font_face_t* font_face ) ;
+
+FUNCTION: cairo_status_t
+cairo_font_face_status ( cairo_font_face_t* font_face ) ;
+
+TYPEDEF: int cairo_font_type_t
+C-ENUM:
+    CAIRO_FONT_TYPE_TOY
+    CAIRO_FONT_TYPE_FT
+    CAIRO_FONT_TYPE_WIN32
+    CAIRO_FONT_TYPE_QUARTZ ;
+
+FUNCTION: cairo_font_type_t
+cairo_font_face_get_type ( cairo_font_face_t* font_face ) ;
+
+FUNCTION: void* 
+cairo_font_face_get_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key ) ;
+
+FUNCTION: cairo_status_t
+cairo_font_face_set_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+
+! Portable interface to general font features.
+
+FUNCTION: cairo_scaled_font_t*
+cairo_scaled_font_create ( cairo_font_face_t* font_face, cairo_matrix_t* font_matrix, cairo_matrix_t* ctm, cairo_font_options_t* options ) ;
+
+FUNCTION: cairo_scaled_font_t*
+cairo_scaled_font_reference ( cairo_scaled_font_t* scaled_font ) ;
+
+FUNCTION: void
+cairo_scaled_font_destroy ( cairo_scaled_font_t* scaled_font ) ;
+
+FUNCTION: uint
+cairo_scaled_font_get_reference_count ( cairo_scaled_font_t* scaled_font ) ;
+
+FUNCTION: cairo_status_t
+cairo_scaled_font_status ( cairo_scaled_font_t* scaled_font ) ;
+
+FUNCTION: cairo_font_type_t
+cairo_scaled_font_get_type ( cairo_scaled_font_t* scaled_font ) ;
+
+FUNCTION: void* 
+cairo_scaled_font_get_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key ) ;
+
+FUNCTION: cairo_status_t
+cairo_scaled_font_set_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+
+FUNCTION: void
+cairo_scaled_font_extents ( cairo_scaled_font_t* scaled_font, cairo_font_extents_t* extents ) ;
+
+FUNCTION: void
+cairo_scaled_font_text_extents ( cairo_scaled_font_t* scaled_font, char* utf8, cairo_text_extents_t* extents ) ;
+
+FUNCTION: void
+cairo_scaled_font_glyph_extents ( cairo_scaled_font_t* scaled_font, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ;
+
+FUNCTION: cairo_font_face_t*
+cairo_scaled_font_get_font_face ( cairo_scaled_font_t* scaled_font ) ;
+
+FUNCTION: void
+cairo_scaled_font_get_font_matrix ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* font_matrix ) ;
+
+FUNCTION: void
+cairo_scaled_font_get_ctm ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* ctm ) ;
+
+FUNCTION: void
+cairo_scaled_font_get_font_options ( cairo_scaled_font_t* scaled_font, cairo_font_options_t* options ) ;
+
+! Query functions
+
+FUNCTION: cairo_operator_t
+cairo_get_operator ( cairo_t* cr ) ;
+
+FUNCTION: cairo_pattern_t*
+cairo_get_source ( cairo_t* cr ) ;
+
+FUNCTION: double
+cairo_get_tolerance ( cairo_t* cr ) ;
+
+FUNCTION: cairo_antialias_t
+cairo_get_antialias ( cairo_t* cr ) ;
+
+FUNCTION: cairo_bool_t
+cairo_has_current_point ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_get_current_point ( cairo_t* cr, double* x, double* y ) ;
+
+FUNCTION: cairo_fill_rule_t
+cairo_get_fill_rule ( cairo_t* cr ) ;
+
+FUNCTION: double
+cairo_get_line_width ( cairo_t* cr ) ;
+
+FUNCTION: cairo_line_cap_t
+cairo_get_line_cap ( cairo_t* cr ) ;
+
+FUNCTION: cairo_line_join_t
+cairo_get_line_join ( cairo_t* cr ) ;
+
+FUNCTION: double
+cairo_get_miter_limit ( cairo_t* cr ) ;
+
+FUNCTION: int
+cairo_get_dash_count ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_get_dash ( cairo_t* cr, double* dashes, double* offset ) ;
+
+FUNCTION: void
+cairo_get_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+
+FUNCTION: cairo_surface_t*
+cairo_get_target ( cairo_t* cr ) ;
+
+FUNCTION: cairo_surface_t*
+cairo_get_group_target ( cairo_t* cr ) ;
+
+TYPEDEF: int cairo_path_data_type_t
+C-ENUM:
+    CAIRO_PATH_MOVE_TO
+    CAIRO_PATH_LINE_TO
+    CAIRO_PATH_CURVE_TO
+    CAIRO_PATH_CLOSE_PATH ;
+
+! NEED TO DO UNION HERE
+C-STRUCT: cairo_path_data_t-point
+    { "double" "x" }
+    { "double" "y" } ;
+
+C-STRUCT: cairo_path_data_t-header
+    { "cairo_path_data_type_t" "type" }
+    { "int" "length" } ;
+
+C-UNION: cairo_path_data_t "cairo_path_data_t-point" "cairo_path_data_t-header" ;
+
+C-STRUCT: cairo_path_t
+    { "cairo_status_t"      "status" }
+    { "cairo_path_data_t*"  "data" }
+    { "int"                 "num_data" } ;
+
+FUNCTION: cairo_path_t*
+cairo_copy_path ( cairo_t* cr ) ;
+
+FUNCTION: cairo_path_t*
+cairo_copy_path_flat ( cairo_t* cr ) ;
+
+FUNCTION: void
+cairo_append_path ( cairo_t* cr, cairo_path_t* path ) ;
+
+FUNCTION: void
+cairo_path_destroy ( cairo_path_t* path ) ;
+
+! Error status queries
+
+FUNCTION: cairo_status_t
+cairo_status ( cairo_t* cr ) ;
+
+FUNCTION: char* 
+cairo_status_to_string ( cairo_status_t status ) ;
+
+! Surface manipulation
+
+FUNCTION: cairo_surface_t*
+cairo_surface_create_similar ( cairo_surface_t* other, cairo_content_t content, int width, int height ) ;
+
+FUNCTION: cairo_surface_t*
+cairo_surface_reference ( cairo_surface_t* surface ) ;
+
+FUNCTION: void
+cairo_surface_finish ( cairo_surface_t* surface ) ;
+
+FUNCTION: void
+cairo_surface_destroy ( cairo_surface_t* surface ) ;
+
+FUNCTION: uint
+cairo_surface_get_reference_count ( cairo_surface_t* surface ) ;
+
+FUNCTION: cairo_status_t
+cairo_surface_status ( cairo_surface_t* surface ) ;
+
+TYPEDEF: int cairo_surface_type_t
+C-ENUM:
+    CAIRO_SURFACE_TYPE_IMAGE
+    CAIRO_SURFACE_TYPE_PDF
+    CAIRO_SURFACE_TYPE_PS
+    CAIRO_SURFACE_TYPE_XLIB
+    CAIRO_SURFACE_TYPE_XCB
+    CAIRO_SURFACE_TYPE_GLITZ
+    CAIRO_SURFACE_TYPE_QUARTZ
+    CAIRO_SURFACE_TYPE_WIN32
+    CAIRO_SURFACE_TYPE_BEOS
+    CAIRO_SURFACE_TYPE_DIRECTFB
+    CAIRO_SURFACE_TYPE_SVG
+    CAIRO_SURFACE_TYPE_OS2
+    CAIRO_SURFACE_TYPE_WIN32_PRINTING
+    CAIRO_SURFACE_TYPE_QUARTZ_IMAGE ;
+
+FUNCTION: cairo_surface_type_t
+cairo_surface_get_type ( cairo_surface_t* surface ) ;
+
+FUNCTION: cairo_content_t
+cairo_surface_get_content ( cairo_surface_t* surface ) ;
+
+FUNCTION: cairo_status_t
+cairo_surface_write_to_png ( cairo_surface_t* surface, char* filename ) ;
+
+FUNCTION: cairo_status_t
+cairo_surface_write_to_png_stream ( cairo_surface_t* surface, cairo_write_func_t write_func, void* closure ) ;
+
+FUNCTION: void* 
+cairo_surface_get_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key ) ;
+
+FUNCTION: cairo_status_t
+cairo_surface_set_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+
+FUNCTION: void
+cairo_surface_get_font_options ( cairo_surface_t* surface, cairo_font_options_t* options ) ;
+
+FUNCTION: void
+cairo_surface_flush ( cairo_surface_t* surface ) ;
+
+FUNCTION: void
+cairo_surface_mark_dirty ( cairo_surface_t* surface ) ;
+
+FUNCTION: void
+cairo_surface_mark_dirty_rectangle ( cairo_surface_t* surface, int x, int y, int width, int height ) ;
+
+FUNCTION: void
+cairo_surface_set_device_offset ( cairo_surface_t* surface, double x_offset, double y_offset ) ;
+
+FUNCTION: void
+cairo_surface_get_device_offset ( cairo_surface_t* surface, double* x_offset, double* y_offset ) ;
+
+FUNCTION: void
+cairo_surface_set_fallback_resolution ( cairo_surface_t* surface, double x_pixels_per_inch, double y_pixels_per_inch ) ;
+
+FUNCTION: void
+cairo_surface_copy_page ( cairo_surface_t* surface ) ;
+
+FUNCTION: void
+cairo_surface_show_page ( cairo_surface_t* surface ) ;
+
+! Image-surface functions
+
+TYPEDEF: int cairo_format_t
+C-ENUM:
+    CAIRO_FORMAT_ARGB32
+    CAIRO_FORMAT_RGB24
+    CAIRO_FORMAT_A8
+    CAIRO_FORMAT_A1
+    CAIRO_FORMAT_RGB16_565 ;
+
+FUNCTION: cairo_surface_t*
+cairo_image_surface_create ( cairo_format_t format, int width, int height ) ;
+
+FUNCTION: int
+cairo_format_stride_for_width ( cairo_format_t format, int width ) ;
+
+FUNCTION: cairo_surface_t*
+cairo_image_surface_create_for_data ( uchar* data, cairo_format_t format, int width, int height, int stride ) ;
+
+FUNCTION: uchar*
+cairo_image_surface_get_data ( cairo_surface_t* surface ) ;
+
+FUNCTION: cairo_format_t
+cairo_image_surface_get_format ( cairo_surface_t* surface ) ;
+
+FUNCTION: int
+cairo_image_surface_get_width ( cairo_surface_t* surface ) ;
+
+FUNCTION: int
+cairo_image_surface_get_height ( cairo_surface_t* surface ) ;
+
+FUNCTION: int
+cairo_image_surface_get_stride ( cairo_surface_t* surface ) ;
+
+FUNCTION: cairo_surface_t*
+cairo_image_surface_create_from_png ( char* filename ) ;
+
+FUNCTION: cairo_surface_t*
+cairo_image_surface_create_from_png_stream ( cairo_read_func_t read_func, void* closure ) ;
+
+! Pattern creation functions
+
+FUNCTION: cairo_pattern_t*
+cairo_pattern_create_rgb ( double red, double green, double blue ) ;
+
+FUNCTION: cairo_pattern_t*
+cairo_pattern_create_rgba ( double red, double green, double blue, double alpha ) ;
+
+FUNCTION: cairo_pattern_t*
+cairo_pattern_create_for_surface ( cairo_surface_t* surface ) ;
+
+FUNCTION: cairo_pattern_t*
+cairo_pattern_create_linear ( double x0, double y0, double x1, double y1 ) ;
+
+FUNCTION: cairo_pattern_t*
+cairo_pattern_create_radial ( double cx0, double cy0, double radius0, double cx1, double cy1, double radius1 ) ;
+
+FUNCTION: cairo_pattern_t*
+cairo_pattern_reference ( cairo_pattern_t* pattern ) ;
+
+FUNCTION: void
+cairo_pattern_destroy ( cairo_pattern_t* pattern ) ;
+
+FUNCTION: uint
+cairo_pattern_get_reference_count ( cairo_pattern_t* pattern ) ;
+
+FUNCTION: cairo_status_t
+cairo_pattern_status ( cairo_pattern_t* pattern ) ;
+
+FUNCTION: void*
+cairo_pattern_get_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key ) ;
+
+FUNCTION: cairo_status_t
+cairo_pattern_set_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+
+TYPEDEF: int cairo_pattern_type_t
+C-ENUM:
+    CAIRO_PATTERN_TYPE_SOLID
+    CAIRO_PATTERN_TYPE_SURFACE
+    CAIRO_PATTERN_TYPE_LINEAR
+    CAIRO_PATTERN_TYPE_RADIA ;
+
+FUNCTION: cairo_pattern_type_t
+cairo_pattern_get_type ( cairo_pattern_t* pattern ) ;
+
+FUNCTION: void
+cairo_pattern_add_color_stop_rgb ( cairo_pattern_t* pattern, double offset, double red, double green, double blue ) ;
+
+FUNCTION: void
+cairo_pattern_add_color_stop_rgba ( cairo_pattern_t* pattern, double offset, double red, double green, double blue, double alpha ) ;
+
+FUNCTION: void
+cairo_pattern_set_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ;
+
+FUNCTION: void
+cairo_pattern_get_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ;
+
+TYPEDEF: int cairo_extend_t
+C-ENUM:
+    CAIRO_EXTEND_NONE
+    CAIRO_EXTEND_REPEAT
+    CAIRO_EXTEND_REFLECT
+    CAIRO_EXTEND_PAD ;
+
+FUNCTION: void
+cairo_pattern_set_extend ( cairo_pattern_t* pattern, cairo_extend_t extend ) ;
+
+FUNCTION: cairo_extend_t
+cairo_pattern_get_extend ( cairo_pattern_t* pattern ) ;
+
+TYPEDEF: int cairo_filter_t
+C-ENUM:
+    CAIRO_FILTER_FAST
+    CAIRO_FILTER_GOOD
+    CAIRO_FILTER_BEST
+    CAIRO_FILTER_NEAREST
+    CAIRO_FILTER_BILINEAR
+    CAIRO_FILTER_GAUSSIAN ;
+
+FUNCTION: void
+cairo_pattern_set_filter ( cairo_pattern_t* pattern, cairo_filter_t filter ) ;
+
+FUNCTION: cairo_filter_t
+cairo_pattern_get_filter ( cairo_pattern_t* pattern ) ;
+
+FUNCTION: cairo_status_t
+cairo_pattern_get_rgba ( cairo_pattern_t* pattern, double* red, double* green, double* blue, double* alpha ) ;
+
+FUNCTION: cairo_status_t
+cairo_pattern_get_surface ( cairo_pattern_t* pattern, cairo_surface_t* *surface ) ;
+
+FUNCTION: cairo_status_t
+cairo_pattern_get_color_stop_rgba ( cairo_pattern_t* pattern, int index, double* offset, double* red, double* green, double* blue, double* alpha ) ;
+
+FUNCTION: cairo_status_t
+cairo_pattern_get_color_stop_count ( cairo_pattern_t* pattern, int* count ) ;
+
+FUNCTION: cairo_status_t
+cairo_pattern_get_linear_points ( cairo_pattern_t* pattern, double* x0, double* y0, double* x1, double* y1 ) ;
+
+FUNCTION: cairo_status_t
+cairo_pattern_get_radial_circles ( cairo_pattern_t* pattern, double* x0, double* y0, double* r0, double* x1, double* y1, double* r1 ) ;
+
+! Matrix functions
+
+FUNCTION: void
+cairo_matrix_init ( cairo_matrix_t* matrix, double  xx, double  yx, double  xy, double  yy, double  x0, double  y0 ) ;
+
+FUNCTION: void
+cairo_matrix_init_identity ( cairo_matrix_t* matrix ) ;
+
+FUNCTION: void
+cairo_matrix_init_translate ( cairo_matrix_t* matrix, double tx, double ty ) ;
+
+FUNCTION: void
+cairo_matrix_init_scale ( cairo_matrix_t* matrix, double sx, double sy ) ;
+
+FUNCTION: void
+cairo_matrix_init_rotate ( cairo_matrix_t* matrix, double radians ) ;
+
+FUNCTION: void
+cairo_matrix_translate ( cairo_matrix_t* matrix, double tx, double ty ) ;
+
+FUNCTION: void
+cairo_matrix_scale ( cairo_matrix_t* matrix, double sx, double sy ) ;
+
+FUNCTION: void
+cairo_matrix_rotate ( cairo_matrix_t* matrix, double radians ) ;
+
+FUNCTION: cairo_status_t
+cairo_matrix_invert ( cairo_matrix_t* matrix ) ;
+
+FUNCTION: void
+cairo_matrix_multiply ( cairo_matrix_t* result, cairo_matrix_t* a, cairo_matrix_t* b ) ;
+
+FUNCTION: void
+cairo_matrix_transform_distance ( cairo_matrix_t* matrix, double* dx, double* dy ) ;
+
+FUNCTION: void
+cairo_matrix_transform_point ( cairo_matrix_t* matrix, double* x, double* y ) ;
+
+! Functions to be used while debugging (not intended for use in production code)
+FUNCTION: void
+cairo_debug_reset_static_data ( ) ;
diff --git a/basis/cairo/gadgets/gadgets.factor b/basis/cairo/gadgets/gadgets.factor
new file mode 100644 (file)
index 0000000..131f742
--- /dev/null
@@ -0,0 +1,34 @@
+! Copyright (C) 2008 Matthew Willis.
+! See http://factorcode.org/license.txt for BSD license.
+USING: sequences math kernel byte-arrays cairo.ffi cairo
+io.backend ui.gadgets accessors opengl.gl arrays fry
+classes ui.render namespaces ;
+
+IN: cairo.gadgets
+
+: width>stride ( width -- stride ) 4 * ;
+    
+GENERIC: render-cairo* ( gadget -- )
+
+: render-cairo ( gadget -- byte-array )
+    dup dim>> first2 over width>stride
+    [ * nip <byte-array> dup CAIRO_FORMAT_ARGB32 ] 
+    [ cairo_image_surface_create_for_data ] 3bi
+    rot '[ _ render-cairo* ] with-cairo-from-surface ; inline
+
+TUPLE: cairo-gadget < gadget ;
+
+: <cairo-gadget> ( dim -- gadget )
+    cairo-gadget new-gadget
+        swap >>dim ;
+
+M: cairo-gadget draw-gadget*
+    [ dim>> ] [ render-cairo ] bi
+    origin get first2 glRasterPos2i
+    1.0 -1.0 glPixelZoom
+    [ first2 GL_BGRA GL_UNSIGNED_BYTE ] dip
+    glDrawPixels ;
+
+: copy-surface ( surface -- )
+    cr swap 0 0 cairo_set_source_surface
+    cr cairo_paint ;
diff --git a/basis/cairo/summary.txt b/basis/cairo/summary.txt
new file mode 100644 (file)
index 0000000..f6cb370
--- /dev/null
@@ -0,0 +1 @@
+Cairo graphics library binding
diff --git a/basis/cairo/tags.txt b/basis/cairo/tags.txt
new file mode 100644 (file)
index 0000000..bb863cf
--- /dev/null
@@ -0,0 +1 @@
+bindings
index 793c771b64a1eaab9090c5c50939e0a997e0e33e..522e0c52f34e11b3dd0574aa0fb7b55569f7b23d 100644 (file)
@@ -211,7 +211,7 @@ M: real +minute ( timestamp n -- timestamp )
 M: number +second ( timestamp n -- timestamp )
     [ over second>> + seconds/minutes [ >>second ] dip +minute ] unless-zero ;
 
-: (time+)
+: (time+) ( timestamp duration -- timestamp' duration )
     [ second>> +second ] keep
     [ minute>> +minute ] keep
     [ hour>>   +hour   ] keep
@@ -219,7 +219,8 @@ M: number +second ( timestamp n -- timestamp )
     [ month>>  +month  ] keep
     [ year>>   +year   ] keep ; inline
 
-: +slots [ bi@ + ] curry 2keep ; inline
+: +slots ( obj1 obj2 quot -- n obj1 obj2 )
+    [ bi@ + ] curry 2keep ; inline
 
 PRIVATE>
 
index 862084e1d9e4a856f0f04102d0b7e894fc971aeb..309f764d2da6f1e6a3deb4baef1901fc0932b2ac 100644 (file)
@@ -6,6 +6,7 @@ IN: channels.remote
 HELP: <remote-channel>
 { $values { "node" "a node object" }
           { "id" "the id of the published channel on the node" } 
+          { "remote-channel" remote-channel }
 }
 { $description "Create a remote channel that acts as a proxy for a "
 "channel on another node. The remote node's channel must have been "
index 7d5f34777d74acc1f3de92d279272cda19e6ee94..0ae4328446c1d1e4aa8295c7165f70845277f75b 100644 (file)
@@ -1,21 +1,20 @@
 ! Copyright (C) 2006, 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel math math.bitwise strings io.binary namespaces
-make grouping ;
+make grouping byte-arrays ;
 IN: checksums.common
 
 SYMBOL: bytes-read
 
-: calculate-pad-length ( length -- pad-length )
-    dup 56 < 55 119 ? swap - ;
+: calculate-pad-length ( length -- length' )
+    [ 56 < 55 119 ? ] keep - ;
 
 : pad-last-block ( str big-endian? length -- str )
     [
-        rot %
-        HEX: 80 ,
-        dup HEX: 3f bitand calculate-pad-length 0 <string> %
-        3 shift 8 rot [ >be ] [ >le ] if %
-    ] "" make 64 group ;
+        [ % ] 2dip HEX: 80 ,
+        [ HEX: 3f bitand calculate-pad-length <byte-array> % ]
+        [ 3 shift 8 rot [ >be ] [ >le ] if % ] bi
+    ] B{ } make 64 group ;
 
 : update-old-new ( old new -- )
     [ [ get ] bi@ w+ dup ] 2keep [ set ] bi@ ; inline
index d919b0e31305b366b1b05cb6691429d9cfc74856..7931828217f941f20b4b3724bd9619c563578a81 100644 (file)
@@ -3,7 +3,7 @@
 USING: kernel io io.binary io.files io.streams.byte-array math
 math.functions math.parser namespaces splitting grouping strings
 sequences byte-arrays locals sequences.private
-io.encodings.binary symbols math.bitwise checksums
+io.encodings.binary math.bitwise checksums
 checksums.common checksums.stream ;
 IN: checksums.md5
 
index fd067997a78c082b67747e869651025b3f8549cc..750e05f3c89bea6b2d61366189bb119f3044fcb5 100644 (file)
@@ -4,8 +4,8 @@ USING: help.syntax help.markup ;
 HELP: openssl-checksum
 { $class-description "The class of checksum algorithms implemented by OpenSSL. The exact set of algorithms supported depends on how the OpenSSL library was compiled; " { $snippet "md5" } " and " { $snippet "sha1" } " should be universally available." } ;
 
-HELP: <openssl-checksum> ( name -- checksum )
-{ $values { "name" "an EVP message digest name" } { "checksum" openssl-checksum } }
+HELP: <openssl-checksum>
+{ $values { "name" "an EVP message digest name" } { "openssl-checksum" openssl-checksum } }
 { $description "Creates a new OpenSSL checksum object." } ;
 
 HELP: openssl-md5
index 6cdc9270aa7262b8057db66b94007975e359f2f7..ede8a8f6532cba1585fb0b4bfd5d327518fb93c6 100644 (file)
@@ -3,7 +3,7 @@
 USING: arrays combinators kernel io io.encodings.binary io.files
 io.streams.byte-array math.vectors strings sequences namespaces
 make math parser sequences assocs grouping vectors io.binary
-hashtables symbols math.bitwise checksums checksums.common
+hashtables math.bitwise checksums checksums.common
 checksums.stream ;
 IN: checksums.sha1
 
index beb657bd3e1ab5b0b332ca64805e0f85959ebd7e..898a695b34d5ce3308ec1fa19ba47db105ea9fd2 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel splitting grouping math sequences namespaces make
-io.binary symbols math.bitwise checksums checksums.common
+io.binary math.bitwise checksums checksums.common
 sbufs strings ;
 IN: checksums.sha2
 
index 791613e876ee7747bdae4902555adab3c2385f85..60a0232a2cc5ed823884bec79fb71d6c559a9960 100644 (file)
@@ -1,5 +1,5 @@
 USING: debugger quotations help.markup help.syntax strings alien
-core-foundation ;
+core-foundation core-foundation.strings core-foundation.arrays ;
 IN: cocoa.application
 
 HELP: <NSString>
@@ -30,10 +30,6 @@ HELP: cocoa-app
 { $values { "quot" quotation } }
 { $description "Initializes Cocoa, calls the quotation, and starts the Cocoa event loop." } ;
 
-HELP: do-event
-{ $values { "app" "an " { $snippet "NSApplication" } } { "?" "a boolean" } }
-{ $description "Processes a pending event in the queue, if any, returning a boolean indicating if there was one. Does not block." } ;
-
 HELP: add-observer
 { $values { "observer" "an " { $snippet "NSObject" } } { "selector" string } { "name" "an " { $snippet "NSString" } } { "object" "an " { $snippet "NSObject" } } }
 { $description "Registers an observer with the " { $snippet "NSNotificationCenter" } " singleton." } ;
@@ -52,7 +48,6 @@ HELP: objc-error
 ARTICLE: "cocoa-application-utils" "Cocoa application utilities"
 "Utilities:"
 { $subsection NSApp }
-{ $subsection do-event }
 { $subsection add-observer }
 { $subsection remove-observer }
 { $subsection install-delegate }
index e2c853ea77ed19d0c7fbd48f62f65a497a9c97ab..ab2b6375a90b04fd4da7c1131fbef0f646939e4c 100644 (file)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2006, 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.syntax io kernel namespaces core-foundation
-core-foundation.run-loop cocoa.messages cocoa cocoa.classes
+core-foundation.arrays core-foundation.data
+core-foundation.strings cocoa.messages cocoa cocoa.classes
 cocoa.runtime sequences threads init summary kernel.private
 assocs ;
 IN: cocoa.application
@@ -34,13 +35,6 @@ FUNCTION: void NSBeep ( ) ;
 : with-cocoa ( quot -- )
     [ NSApp drop call ] with-autorelease-pool ; inline
 
-: next-event ( app -- event )
-    NSAnyEventMask f CFRunLoopDefaultMode 1
-    -> nextEventMatchingMask:untilDate:inMode:dequeue: ;
-
-: do-event ( app -- ? )
-    dup next-event [ dupd -> sendEvent: -> updateWindows t ] [ drop f ] if* ;
-
 : add-observer ( observer selector name object -- )
     [
         [ NSNotificationCenter -> defaultCenter ] 2dip
index ab86796236108bd5251620060c753e751dabaff5..44252a3b19fd35aa1b6e7314fb91573ff25a62d6 100644 (file)
@@ -2,8 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: compiler io kernel cocoa.runtime cocoa.subclassing
 cocoa.messages cocoa.types sequences words vocabs parser
-core-foundation namespaces assocs hashtables compiler.units
-lexer init ;
+core-foundation.bundles namespaces assocs hashtables
+compiler.units lexer init ;
 IN: cocoa
 
 : (remember-send) ( selector variable -- )
index 2b01c5d751215eced96995d3e87779e27f7c4930..13f6f0b7d61f2f2ad24948f7e0ad4b98957456cc 100644 (file)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2006, 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel cocoa cocoa.messages cocoa.classes
-cocoa.application sequences splitting core-foundation ;
+cocoa.application sequences splitting core-foundation
+core-foundation.strings ;
 IN: cocoa.dialogs
 
 : <NSOpenPanel> ( -- panel )
index 31dac2531b532d161f86922c4f883764f7280109..a39cc794d0f09d2f41f2468d563975f2a54c8896 100644 (file)
@@ -1,5 +1,8 @@
-USING: cocoa.application cocoa.messages cocoa.classes cocoa.runtime 
-kernel cocoa core-foundation alien.c-types ;
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: cocoa.application cocoa.messages cocoa.classes
+cocoa.runtime kernel cocoa alien.c-types core-foundation
+core-foundation.arrays ;
 IN: cocoa.nibs
 
 : load-nib ( name -- )
index b530ccbc3760620e0e1abb1a70d1f35efbe58c3b..888f5452e2d619c5e9097a7b37243a48159cf11e 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2006, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien.accessors arrays kernel cocoa.messages
-cocoa.classes cocoa.application cocoa core-foundation sequences
-;
+cocoa.classes cocoa.application sequences cocoa core-foundation
+core-foundation.strings core-foundation.arrays ;
 IN: cocoa.pasteboard
 
 : NSStringPboardType "NSStringPboardType" ;
index bb73b8fac31b4901d24bc08785796a2d71a2a7eb..cf68f9864ae059ec7c4d46c63e040a21198e0ab7 100644 (file)
@@ -3,7 +3,7 @@
 USING: strings arrays hashtables assocs sequences
 cocoa.messages cocoa.classes cocoa.application cocoa kernel
 namespaces io.backend math cocoa.enumeration byte-arrays
-combinators alien.c-types core-foundation ;
+combinators alien.c-types core-foundation core-foundation.data ;
 IN: cocoa.plists
 
 GENERIC: >plist ( value -- plist )
index a1cd7924366b9476aead1f05e7afcb1c9276f9e2..3b533f98c38a4eed90c0877aa22a5ed8ce119f95 100644 (file)
@@ -2,7 +2,7 @@ USING: help.syntax help.markup ;
 IN: cocoa.views
 
 HELP: <PixelFormat>
-{ $values { "pixelfmt" "an " { $snippet "NSOpenGLPixelFormat" } } }
+{ $values { "attributes" "a sequence of attributes" } { "pixelfmt" "an " { $snippet "NSOpenGLPixelFormat" } } }
 { $description "Creates an " { $snippet "NSOpenGLPixelFormat" } " with some reasonable defaults." } ;
 
 HELP: <GLView>
index 3a53a1cc3cfde331251e64bb92cb6cc04052380d..51f692d02d6658e7d8b2f60f77108246345357e6 100644 (file)
@@ -14,7 +14,7 @@ IN: cocoa.windows
 : NSBackingStoreNonretained 1 ; inline
 : NSBackingStoreBuffered    2 ; inline
 
-: standard-window-type
+: standard-window-type ( -- n )
     {
         NSTitledWindowMask
         NSClosableWindowMask
index 27dc1608127e35241dc034124024b8038b40eaca..1dd9257281d6ff66e29b5513d3c89ab0a2bba43a 100644 (file)
@@ -4,8 +4,8 @@ IN: columns
 HELP: column
 { $class-description "A virtual sequence which presents a fixed column of a matrix represented as a sequence of rows. New instances can be created by calling " { $link <column> } "." } ;
 
-HELP: <column> ( seq n -- column )
-{ $values { "seq" sequence } { "n" "a non-negative integer" } { "column" column } }
+HELP: <column>
+{ $values { "seq" sequence } { "col" "a non-negative integer" } { "column" column } }
 { $description "Outputs a new virtual sequence which presents a fixed column of a matrix represented as a sequence of rows." "The " { $snippet "i" } "th element of a column is the " { $snippet "n" } "th element of the " { $snippet "i" } "th element of " { $snippet "seq" } ". Every element of " { $snippet "seq" } " must be a sequence, and all sequences must have equal length." }
 { $examples
     { $example
index 7d5a041951a6320fbb2872afb9b2410e20e5c38e..38d40d84828b0055873718a7c3be9221e151d3c1 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2003, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: init continuations hashtables io io.encodings.utf8
-io.files kernel kernel.private namespaces parser sequences
-strings system splitting vocabs.loader ;
+io.files io.pathnames kernel kernel.private namespaces parser
+sequences strings system splitting vocabs.loader ;
 IN: command-line
 
 SYMBOL: script
index 90227bb5dae9ffd79c26355f18cfa3f639b7396f..86bd388d8dadc64338f60e41e1c88a5fc5b0cfe2 100644 (file)
@@ -68,7 +68,8 @@ IN: compiler.cfg.alias-analysis
 ! Map vregs -> alias classes
 SYMBOL: vregs>acs
 
-: check [ "BUG: static type error detected" throw ] unless* ; inline
+: check ( obj -- obj )
+    [ "BUG: static type error detected" throw ] unless* ; inline
  
 : vreg>ac ( vreg -- ac )
     #! Only vregs produced by ##allot, ##peek and ##slot can
index c3cce1425e9705c11f02e585629b48bb24f26a1e..0b303a8a43440429ba748dcbc7765ec96aed3fa5 100644 (file)
@@ -14,7 +14,7 @@ kernel.private math ;
     [ ]
     [ dup ]
     [ swap ]
-    [ >r r> ]
+    [ [ ] dip ]
     [ fixnum+ ]
     [ fixnum+fast ]
     [ 3 fixnum+fast ]
index c0d5bf79a6f7a24b993d546f91338f47c2c18666..817c0f4680ff8f7d7e4a0ceec9c3fa7ad21c96f4 100644 (file)
@@ -5,17 +5,17 @@ sequences classes.tuple cpu.architecture compiler.cfg.registers
 compiler.cfg.instructions ;
 IN: compiler.cfg.hats
 
-: i int-regs next-vreg ; inline
-: ^^i i dup ; inline
-: ^^i1 [ ^^i ] dip ; inline
-: ^^i2 [ ^^i ] 2dip ; inline
-: ^^i3 [ ^^i ] 3dip ; inline
+: i ( -- vreg ) int-regs next-vreg ; inline
+: ^^i ( -- vreg vreg ) i dup ; inline
+: ^^i1 ( obj -- vreg vreg obj ) [ ^^i ] dip ; inline
+: ^^i2 ( obj obj -- vreg vreg obj obj ) [ ^^i ] 2dip ; inline
+: ^^i3 ( obj obj obj -- vreg vreg obj obj obj ) [ ^^i ] 3dip ; inline
 
-: d double-float-regs next-vreg ; inline
-: ^^d d dup ; inline
-: ^^d1 [ ^^d ] dip ; inline
-: ^^d2 [ ^^d ] 2dip ; inline
-: ^^d3 [ ^^d ] 3dip ; inline
+: d ( -- vreg ) double-float-regs next-vreg ; inline
+: ^^d  ( -- vreg vreg ) d dup ; inline
+: ^^d1 ( obj -- vreg vreg obj ) [ ^^d ] dip ; inline
+: ^^d2 ( obj obj -- vreg vreg obj obj ) [ ^^d ] 2dip ; inline
+: ^^d3 ( obj obj obj -- vreg vreg obj obj obj ) [ ^^d ] 3dip ; inline
 
 : ^^load-literal ( obj -- dst ) ^^i1 ##load-literal ; inline
 : ^^peek ( loc -- dst ) ^^i1 ##peek ; inline
index 5a5df881124d52f4b7db6429bca40da70b11b85a..30d062d4cce1a8795f3c181ba22a7786ec796a8b 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: classes.tuple classes.tuple.parser kernel words
-make fry sequences parser ;
+make fry sequences parser accessors ;
 IN: compiler.cfg.instructions.syntax
 
 : insn-word ( -- word )
@@ -10,10 +10,13 @@ IN: compiler.cfg.instructions.syntax
     #! this one.
     "insn" "compiler.cfg.instructions" lookup ;
 
+: insn-effect ( word -- effect )
+    boa-effect [ but-last ] change-in { } >>out ;
+
 : INSN:
     parse-tuple-definition "regs" suffix
     [ dup tuple eq? [ drop insn-word ] when ] dip
     [ define-tuple-class ]
     [ 2drop save-location ]
-    [ 2drop dup '[ f _ boa , ] define-inline ]
+    [ 2drop [ ] [ '[ f _ boa , ] ] [ insn-effect ] tri define-inline ]
     3tri ; parsing
index 5f753308655f96a8aa1e108057b89fe8a90b695b..3d0a7bec9c39a50667b4d4695bb884c3d652646b 100644 (file)
@@ -1,7 +1,6 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: qualified words sequences kernel combinators
-cpu.architecture
+USING: words sequences kernel combinators cpu.architecture
 compiler.cfg.hats
 compiler.cfg.instructions
 compiler.cfg.intrinsics.alien
index 948302c74b58093678213d610c3dfd010a92741e..7420b4fd175f7ad1c495d8a689aab1b3f6234e01 100644 (file)
@@ -249,7 +249,7 @@ SYMBOL: max-uses
     ] with-scope ;
 
 : random-test ( num-intervals max-uses max-registers max-insns -- )
-    over >r random-live-intervals r> int-regs associate check-linear-scan ;
+    over [ random-live-intervals ] dip int-regs associate check-linear-scan ;
 
 [ ] [ 30 2 1 60 random-test ] unit-test
 [ ] [ 60 2 2 60 random-test ] unit-test
index 7433df9617cbab44cbfe28c660f25f457e17c9df..584c4cd6629cbe15fc64d7147188584c4c3bcf87 100644 (file)
@@ -37,7 +37,7 @@ M: insn linearize-insn , drop ;
 M: ##branch linearize-insn
     drop dup successors>> first emit-branch ;
 
-: (binary-conditional)
+: (binary-conditional) ( basic-block insn -- basic-block successor1 successor2 src1 src2 cc )
     [ dup successors>> first2 ]
     [ [ src1>> ] [ src2>> ] [ cc>> ] tri ] bi* ; inline
 
index 9f134c02d7f0a0112d246993964f36becbb2d7cb..0dc5a855e35e37afd23ec0f5a70733be6df90f6f 100644 (file)
@@ -95,7 +95,7 @@ M: ##dispatch-label generate-insn label>> %dispatch-label ;
 M: ##dispatch generate-insn
     [ src>> register ] [ temp>> register ] [ offset>> ] tri %dispatch ;
 
-: >slot<
+: >slot< ( insn -- dst obj slot tag )
     {
         [ dst>> register ]
         [ obj>> register ]
@@ -109,7 +109,7 @@ M: ##slot generate-insn
 M: ##slot-imm generate-insn
     >slot< %slot-imm ;
 
-: >set-slot<
+: >set-slot< ( insn -- src obj slot tag )
     {
         [ src>> register ]
         [ obj>> register ]
@@ -209,7 +209,8 @@ M: ##alien-cell       generate-insn dst/src %alien-cell       ;
 M: ##alien-float      generate-insn dst/src %alien-float      ;
 M: ##alien-double     generate-insn dst/src %alien-double     ;
 
-: >alien-setter< [ src>> register ] [ value>> register ] bi ; inline
+: >alien-setter< ( insn -- src value )
+    [ src>> register ] [ value>> register ] bi ; inline
 
 M: ##set-alien-integer-1 generate-insn >alien-setter< %set-alien-integer-1 ;
 M: ##set-alien-integer-2 generate-insn >alien-setter< %set-alien-integer-2 ;
index e743c8484bc3c2cc1e9786e5822380ab27bc822e..3d17009e311c695b199de9451ded4a0ded547adc 100644 (file)
@@ -75,7 +75,7 @@ unit-test
     -12 -13 [ [ 0 swap fixnum-fast ] bi@ ] compile-call
 ] unit-test
 
-[ -1 2 ] [ 1 2 [ >r 0 swap fixnum- r> ] compile-call ] unit-test
+[ -1 2 ] [ 1 2 [ [ 0 swap fixnum- ] dip ] compile-call ] unit-test
 
 [ 12 13 ] [
     -12 -13 [ [ 0 swap fixnum- ] bi@ ] compile-call
@@ -88,13 +88,13 @@ unit-test
 ! Test slow shuffles
 [ 3 1 2 3 4 5 6 7 8 9 ] [
     1 2 3 4 5 6 7 8 9
-    [ >r >r >r >r >r >r >r >r >r 3 r> r> r> r> r> r> r> r> r> ]
+    [ [ [ [ [ [ [ [ [ [ 3 ] dip ] dip ] dip ] dip ] dip ] dip ] dip ] dip ] dip ]
     compile-call
 ] unit-test
 
 [ 2 2 2 2 2 2 2 2 2 2 1 ] [
     1 2
-    [ swap >r dup dup dup dup dup dup dup dup dup r> ] compile-call
+    [ swap [ dup dup dup dup dup dup dup dup dup ] dip ] compile-call
 ] unit-test
 
 [ ] [ [ 9 [ ] times ] compile-call ] unit-test
@@ -110,7 +110,7 @@ unit-test
     float+ swap { [ "hey" ] [ "bye" ] } dispatch ;
 
 : try-breaking-dispatch-2 ( -- ? )
-    1 1.0 2.5 try-breaking-dispatch "bye" = >r 3.5 = r> and ;
+    1 1.0 2.5 try-breaking-dispatch "bye" = [ 3.5 = ] dip and ;
 
 [ t ] [
     10000000 [ drop try-breaking-dispatch-2 ] all?
@@ -131,10 +131,10 @@ unit-test
     2dup 1 slot eq? [ 2drop ] [ 
         2dup array-nth tombstone? [ 
             [
-                [ array-nth ] 2keep >r 1 fixnum+fast r> array-nth
+                [ array-nth ] 2keep [ 1 fixnum+fast ] dip array-nth
                 pick 2dup hellish-bug-1 3drop
             ] 2keep
-        ] unless >r 2 fixnum+fast r> hellish-bug-2
+        ] unless [ 2 fixnum+fast ] dip hellish-bug-2
     ] if ; inline recursive
 
 : hellish-bug-3 ( hash array -- ) 
@@ -159,9 +159,9 @@ TUPLE: my-tuple ;
 [ 5 ] [ "hi" foox ] unit-test
 
 ! Making sure we don't needlessly unbox/rebox
-[ t 3.0 ] [ 1.0 dup [ dup 2.0 float+ >r eq? r> ] compile-call ] unit-test
+[ t 3.0 ] [ 1.0 dup [ dup 2.0 float+ [ eq? ] dip ] compile-call ] unit-test
 
-[ t 3.0 ] [ 1.0 dup [ dup 2.0 float+ ] compile-call >r eq? r> ] unit-test
+[ t 3.0 ] [ 1.0 dup [ dup 2.0 float+ ] compile-call [ eq? ] dip ] unit-test
 
 [ t ] [ 1.0 dup [ [ 2.0 float+ ] keep ] compile-call nip eq? ] unit-test
 
@@ -188,7 +188,7 @@ TUPLE: my-tuple ;
 
 [ 2 1 ] [
     2 1
-    [ 2dup fixnum< [ >r die r> ] when ] compile-call
+    [ 2dup fixnum< [ [ die ] dip ] when ] compile-call
 ] unit-test
 
 ! Regression
index ecc2d87b7330f1910c431477f509a1a47d04f4f1..1857baf503560e798d37e17a37d515fa6131bded 100644 (file)
@@ -8,7 +8,7 @@ IN: compiler.tests
 [ 3 ] [ 5 [ 2 [ - ] 2curry call ] compile-call ] unit-test
 [ 3 ] [ 5 2 [ [ - ] 2curry call ] compile-call ] unit-test
 [ 3 ] [ 5 2 [ [ - ] 2curry 9 swap call /i ] compile-call ] unit-test
-[ 3 ] [ 5 2 [ [ - ] 2curry >r 9 r> call /i ] compile-call ] unit-test
+[ 3 ] [ 5 2 [ [ - ] 2curry [ 9 ] dip call /i ] compile-call ] unit-test
 
 [ -10 -20 ] [ 10 20 -1 [ [ * ] curry bi@ ] compile-call ] unit-test
 
@@ -21,14 +21,14 @@ IN: compiler.tests
 [ [ 6 2 + ] ]
 [
     2 5
-    [ >r [ + ] curry r> 0 < [ -2 ] [ 6 ] if swap curry ]
+    [ [ [ + ] curry ] dip 0 < [ -2 ] [ 6 ] if swap curry ]
     compile-call >quotation
 ] unit-test
 
 [ 8 ]
 [
     2 5
-    [ >r [ + ] curry r> 0 < [ -2 ] [ 6 ] if swap curry call ]
+    [ [ [ + ] curry ] dip 0 < [ -2 ] [ 6 ] if swap curry call ]
     compile-call
 ] unit-test
 
index fa6a3c7b21647ff3282cdc2f974268f7df8cf80b..bb1cb2eab5079f8a89d56076a137f2e8de09080f 100644 (file)
@@ -248,12 +248,12 @@ USE: binary-search.private
 
 : lift-loop-tail-test-1 ( a quot -- )
     over even? [
-        [ >r 3 - r> call ] keep lift-loop-tail-test-1
+        [ [ 3 - ] dip call ] keep lift-loop-tail-test-1
     ] [
         over 0 < [
             2drop
         ] [
-            [ >r 2 - r> call ] keep lift-loop-tail-test-1
+            [ [ 2 - ] dip call ] keep lift-loop-tail-test-1
         ] if
     ] if ; inline
 
@@ -290,7 +290,7 @@ HINTS: recursive-inline-hang-3 array ;
 
 ! Wow
 : counter-example ( a b c d -- a' b' c' d' )
-    dup 0 > [ 1 - >r rot 2 * r> counter-example ] when ; inline
+    dup 0 > [ 1 - [ rot 2 * ] dip counter-example ] when ; inline
 
 : counter-example' ( -- a' b' c' d' )
     1 2 3.0 3 counter-example ;
@@ -330,7 +330,7 @@ PREDICATE: list < improper-list
 [ 0 5 ] [ 0 interval-inference-bug ] unit-test
 
 : aggressive-flush-regression ( a -- b )
-    f over >r <array> drop r> 1 + ;
+    f over [ <array> drop ] dip 1 + ;
 
 [ 1.0 aggressive-flush-regression drop ] must-fail
 
index b64e30d8f94394a9ac5914fe95035504a3ea4a94..7c28866e94ba4770322b2b6b723532280baf0d29 100644 (file)
@@ -79,7 +79,7 @@ IN: compiler.tree.dead-code.tests
 
 [ [ read drop 1 2 ] ] [ [ read [ 1 2 ] dip drop ] optimize-quot ] unit-test
 
-[ [ over >r + r> ] ] [ [ [ + ] [ drop ] 2bi ] optimize-quot ] unit-test
+[ [ over >R + R> ] ] [ [ [ + ] [ drop ] 2bi ] optimize-quot ] unit-test
 
 [ [ [ ] [ ] if ] ] [ [ [ 1 ] [ 2 ] if drop ] optimize-quot ] unit-test
 
index e75e7f60469af5bf79589e34d418917a04ee4b71..9f2cc0536e34a9bc622317e9b67d8410484aa61a 100644 (file)
@@ -4,7 +4,7 @@ USING: kernel assocs match fry accessors namespaces make effects
 sequences sequences.private quotations generic macros arrays
 prettyprint prettyprint.backend prettyprint.custom
 prettyprint.sections math words combinators
-combinators.short-circuit io sorting hints qualified
+combinators.short-circuit io sorting hints
 compiler.tree
 compiler.tree.recursive
 compiler.tree.normalization
@@ -80,10 +80,12 @@ M: shuffle-node pprint* effect>> effect>string text ;
         [ out-d>> length 1 = ]
     } 1&& ;
 
+SYMBOLS: >R R> ;
+
 M: #shuffle node>quot
     {
-        { [ dup #>r? ] [ drop \ >r , ] }
-        { [ dup #r>? ] [ drop \ r> , ] }
+        { [ dup #>r? ] [ drop \ >R , ] }
+        { [ dup #r>? ] [ drop \ R> , ] }
         {
             [ dup [ in-r>> empty? ] [ out-r>> empty? ] bi and ]
             [
index b535dfe39c2047a420254db4aa3405c9298b497b..5d6a9cdea1661206c285515a78ef8602fd0d9c0a 100644 (file)
@@ -8,13 +8,13 @@ compiler.tree.debugger ;
 : test-modular-arithmetic ( quot -- quot' )
     build-tree optimize-tree nodes>quot ;
 
-[ [ >r >fixnum r> >fixnum fixnum+fast ] ]
+[ [ >R >fixnum R> >fixnum fixnum+fast ] ]
 [ [ { integer integer } declare + >fixnum ] test-modular-arithmetic ] unit-test
 
 [ [ +-integer-integer dup >fixnum ] ]
 [ [ { integer integer } declare + dup >fixnum ] test-modular-arithmetic ] unit-test
 
-[ [ >r >fixnum r> >fixnum fixnum+fast 4 fixnum*fast ] ]
+[ [ >R >fixnum R> >fixnum fixnum+fast 4 fixnum*fast ] ]
 [ [ { integer integer } declare + 4 * >fixnum ] test-modular-arithmetic ] unit-test
 
 TUPLE: declared-fixnum { x fixnum } ;
index 4d8d9354771ca406f23941d8c574b72f6454909b..d5aa5318a4a47503048f0ee7cabcfaffad4626ac 100644 (file)
@@ -6,7 +6,7 @@ math.parser math.order layouts words sequences sequences.private
 arrays assocs classes classes.algebra combinators generic.math
 splitting fry locals classes.tuple alien.accessors
 classes.tuple.private slots.private definitions strings.private
-vectors hashtables
+vectors hashtables generic
 stack-checker.state
 compiler.tree.comparisons
 compiler.tree.propagation.info
@@ -337,3 +337,12 @@ generic-comparison-ops [
         bi
     ] [ 2drop object-info ] if
 ] "outputs" set-word-prop
+
+\ equal? [
+    ! If first input has a known type and second input is an
+    ! object, we convert this to [ swap equal? ].
+    in-d>> first2 value-info class>> object class= [
+        value-info class>> \ equal? specific-method
+        [ swap equal? ] f ?
+    ] [ drop f ] if
+] "custom-inlining" set-word-prop
index d95245fe8303ff8ce4b5efc748c35c08c7f60b28..b9a88de34aaed1110ec814beecc46ee3812cde12 100644 (file)
@@ -18,7 +18,7 @@ IN: compiler.tree.propagation.tests
 
 [ V{ fixnum } ] [ [ 1 ] final-classes ] unit-test
 
-[ V{ fixnum } ] [ [ 1 >r r> ] final-classes ] unit-test
+[ V{ fixnum } ] [ [ 1 [ ] dip ] final-classes ] unit-test
 
 [ V{ fixnum object } ] [ [ 1 swap ] final-classes ] unit-test
 
@@ -198,7 +198,7 @@ IN: compiler.tree.propagation.tests
     [
         { fixnum byte-array } declare
         [ nth-unsafe ] 2keep [ nth-unsafe ] 2keep nth-unsafe
-        >r >r 298 * r> 100 * - r> 208 * - 128 + -8 shift
+        [ [ 298 * ] dip 100 * - ] dip 208 * - 128 + -8 shift
         255 min 0 max
     ] final-classes
 ] unit-test
@@ -640,6 +640,10 @@ MIXIN: empty-mixin
     [ { fixnum } declare log2 0 >= ] final-classes
 ] unit-test
 
+[ V{ POSTPONE: f } ] [
+    [ { word object } declare equal? ] final-classes
+] unit-test
+
 ! [ V{ string } ] [
 !     [ dup string? t xor [ "A" throw ] [ ] if ] final-classes
 ! ] unit-test
old mode 100644 (file)
new mode 100755 (executable)
index 932605f..3d18b9e
@@ -28,7 +28,8 @@ PRIVATE>
 \r
 : [future] ( quot -- quot' ) '[ _ curry future ] ; inline\r
 \r
-: future-values dup [ ?future ] change-each ; inline\r
+: future-values ( futures -- futures )\r
+    dup [ ?future ] change-each ; inline\r
 \r
 PRIVATE>\r
 \r
index 1087823aa0ff2e93ee623c2068b2e8c58a8a3954..996e3db4c0dfb6c3ccdfe33f8bd3d3568ee84635 100644 (file)
@@ -1,7 +1,8 @@
 IN: concurrency.distributed.tests
 USING: tools.test concurrency.distributed kernel io.files
-arrays io.sockets system combinators threads math sequences
-concurrency.messaging continuations accessors prettyprint ;
+io.files.temp io.directories arrays io.sockets system
+combinators threads math sequences concurrency.messaging
+continuations accessors prettyprint ;
 
 : test-node ( -- addrspec )
     {
index 99ad239011ad1e9545c6bfefcb450b11495ede6d..ca1c5762f68378cdebb924d72bf2a6862eb21945 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: serialize sequences concurrency.messaging threads io
 io.servers.connection io.encodings.binary
-qualified arrays namespaces kernel accessors ;
+arrays namespaces kernel accessors ;
 FROM: io.sockets => host-name <inet> with-client ;
 IN: concurrency.distributed
 
index 7a00f62e9ebdc95bd7c06f2864713c768d984918..61a3c3899192b8bf15051f4545b2038d81d84145 100644 (file)
@@ -20,13 +20,13 @@ M: thread send ( message thread -- )
     my-mailbox mailbox-get ?linked ;\r
 \r
 : receive-timeout ( timeout -- message )\r
-    my-mailbox swap mailbox-get-timeout ?linked ;\r
+    [ my-mailbox ] dip mailbox-get-timeout ?linked ;\r
 \r
 : receive-if ( pred -- message )\r
-    my-mailbox swap mailbox-get? ?linked ; inline\r
+    [ my-mailbox ] dip mailbox-get? ?linked ; inline\r
 \r
 : receive-if-timeout ( timeout pred -- message )\r
-    my-mailbox -rot mailbox-get-timeout? ?linked ; inline\r
+    [ my-mailbox ] 2dip mailbox-get-timeout? ?linked ; inline\r
 \r
 : rethrow-linked ( error process supervisor -- )\r
     [ <linked-error> ] dip send ;\r
diff --git a/basis/cords/authors.txt b/basis/cords/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/cords/cords-tests.factor b/basis/cords/cords-tests.factor
new file mode 100644 (file)
index 0000000..0058c8f
--- /dev/null
@@ -0,0 +1,5 @@
+IN: cords.tests
+USING: cords strings tools.test kernel sequences ;
+
+[ "hello world" ] [ "hello" " world" cord-append dup like ] unit-test
+[ "hello world" ] [ { "he" "llo" " world" } cord-concat dup like ] unit-test
diff --git a/basis/cords/cords.factor b/basis/cords/cords.factor
new file mode 100644 (file)
index 0000000..9157444
--- /dev/null
@@ -0,0 +1,70 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors assocs sequences sorting binary-search math
+math.order arrays combinators kernel ;
+IN: cords
+
+<PRIVATE
+
+TUPLE: simple-cord first second ;
+
+M: simple-cord length
+    [ first>> length ] [ second>> length ] bi + ;
+
+M: simple-cord virtual-seq first>> ;
+
+M: simple-cord virtual@
+    2dup first>> length <
+    [ first>> ] [ [ first>> length - ] [ second>> ] bi ] if ;
+
+TUPLE: multi-cord count seqs ;
+
+M: multi-cord length count>> ;
+
+M: multi-cord virtual@
+    dupd
+    seqs>> [ first <=> ] with search nip
+    [ first - ] [ second ] bi ;
+
+M: multi-cord virtual-seq
+    seqs>> [ f ] [ first second ] if-empty ;
+
+: <cord> ( seqs -- cord )
+    dup length 2 = [
+        first2 simple-cord boa
+    ] [
+        [ 0 [ length + ] accumulate ] keep zip multi-cord boa
+    ] if ;
+
+PRIVATE>
+
+UNION: cord simple-cord multi-cord ;
+
+INSTANCE: cord virtual-sequence
+
+INSTANCE: multi-cord virtual-sequence
+
+: cord-append ( seq1 seq2 -- cord )
+    {
+        { [ over empty? ] [ nip ] }
+        { [ dup empty? ] [ drop ] }
+        { [ 2dup [ cord? ] both? ] [ [ seqs>> values ] bi@ append <cord> ] }
+        { [ over cord? ] [ [ seqs>> values ] dip suffix <cord> ] }
+        { [ dup cord? ] [ seqs>> values swap prefix <cord> ] }
+        [ 2array <cord> ]
+    } cond ;
+
+: cord-concat ( seqs -- cord )
+    {
+        { [ dup empty? ] [ drop f ] }
+        { [ dup length 1 = ] [ first ] }
+        [
+            [
+                {
+                    { [ dup cord? ] [ seqs>> values ] }
+                    { [ dup empty? ] [ drop { } ] }
+                    [ 1array ]
+                } cond
+            ] map concat <cord>
+        ]
+    } cond ;
diff --git a/basis/cords/summary.txt b/basis/cords/summary.txt
new file mode 100644 (file)
index 0000000..3c69862
--- /dev/null
@@ -0,0 +1 @@
+Virtual sequence concatenation
diff --git a/basis/cords/tags.txt b/basis/cords/tags.txt
new file mode 100644 (file)
index 0000000..42d711b
--- /dev/null
@@ -0,0 +1 @@
+collections
diff --git a/basis/core-foundation/arrays/arrays-docs.factor b/basis/core-foundation/arrays/arrays-docs.factor
new file mode 100644 (file)
index 0000000..36d14a8
--- /dev/null
@@ -0,0 +1,11 @@
+USING: help.syntax help.markup arrays alien ;
+IN: core-foundation.arrays
+
+HELP: CF>array
+{ $values { "alien" "a " { $snippet "CFArray" } } { "array" "an array of " { $link alien } " instances" } }
+{ $description "Creates a Factor array from a Core Foundation array." } ;
+
+HELP: <CFArray>
+{ $values { "seq" "a sequence of " { $link alien } " instances" } { "alien" "a " { $snippet "CFArray" } } }
+{ $description "Creates a Core Foundation array from a Factor array." } ;
+
diff --git a/basis/core-foundation/arrays/arrays.factor b/basis/core-foundation/arrays/arrays.factor
new file mode 100644 (file)
index 0000000..3708059
--- /dev/null
@@ -0,0 +1,22 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax kernel sequences ;
+IN: core-foundation.arrays
+
+TYPEDEF: void* CFArrayRef
+
+FUNCTION: CFArrayRef CFArrayCreateMutable ( CFAllocatorRef allocator, CFIndex capacity, void* callbacks ) ;
+
+FUNCTION: void* CFArrayGetValueAtIndex ( CFArrayRef array, CFIndex idx ) ;
+
+FUNCTION: void CFArraySetValueAtIndex ( CFArrayRef array, CFIndex index, void* value ) ;
+
+FUNCTION: CFIndex CFArrayGetCount ( CFArrayRef array ) ;
+
+: CF>array ( alien -- array )
+    dup CFArrayGetCount [ CFArrayGetValueAtIndex ] with map ;
+
+: <CFArray> ( seq -- alien )
+    [ f swap length f CFArrayCreateMutable ] keep
+    [ length ] keep
+    [ [ dupd ] dip CFArraySetValueAtIndex ] 2each ;
diff --git a/basis/core-foundation/arrays/tags.txt b/basis/core-foundation/arrays/tags.txt
new file mode 100644 (file)
index 0000000..2320bdd
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+bindings
diff --git a/basis/core-foundation/bundles/bundles-docs.factor b/basis/core-foundation/bundles/bundles-docs.factor
new file mode 100644 (file)
index 0000000..baa1b4d
--- /dev/null
@@ -0,0 +1,11 @@
+USING: help.syntax help.markup ;
+IN: core-foundation.bundles
+
+HELP: <CFBundle>
+{ $values { "string" "a pathname string" } { "bundle" "a " { $snippet "CFBundle" } } }
+{ $description "Creates a new " { $snippet "CFBundle" } "." } ;
+
+HELP: load-framework
+{ $values { "name" "a pathname string" } }
+{ $description "Loads a Core Foundation framework." } ;
+
diff --git a/basis/core-foundation/bundles/bundles.factor b/basis/core-foundation/bundles/bundles.factor
new file mode 100644 (file)
index 0000000..790f176
--- /dev/null
@@ -0,0 +1,23 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax kernel sequences core-foundation
+core-foundation.urls ;
+IN: core-foundation.bundles
+
+TYPEDEF: void* CFBundleRef
+
+FUNCTION: CFBundleRef CFBundleCreate ( CFAllocatorRef allocator, CFURLRef bundleURL ) ;
+
+FUNCTION: Boolean CFBundleLoadExecutable ( CFBundleRef bundle ) ;
+
+: <CFBundle> ( string -- bundle )
+    t <CFFileSystemURL> [
+        f swap CFBundleCreate
+    ] keep CFRelease ;
+
+: load-framework ( name -- )
+    dup <CFBundle> [
+        CFBundleLoadExecutable drop
+    ] [
+        "Cannot load bundle named " prepend throw
+    ] ?if ;
diff --git a/basis/core-foundation/bundles/tags.txt b/basis/core-foundation/bundles/tags.txt
new file mode 100644 (file)
index 0000000..2320bdd
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+bindings
index d577c523cff2afc01cd139ae6fa7df9b15cecb67..c1783cb92bd0012976c3f790a34e5bc1eec0cb6c 100644 (file)
@@ -1,42 +1,6 @@
 USING: alien strings arrays help.markup help.syntax destructors ;
 IN: core-foundation
 
-HELP: CF>array
-{ $values { "alien" "a " { $snippet "CFArray" } } { "array" "an array of " { $link alien } " instances" } }
-{ $description "Creates a Factor array from a Core Foundation array." } ;
-
-HELP: <CFArray>
-{ $values { "seq" "a sequence of " { $link alien } " instances" } { "alien" "a " { $snippet "CFArray" } } }
-{ $description "Creates a Core Foundation array from a Factor array." } ;
-
-HELP: <CFString>
-{ $values { "string" string } { "alien" "a " { $snippet "CFString" } } }
-{ $description "Creates a Core Foundation string from a Factor string." } ;
-
-HELP: CF>string
-{ $values { "alien" "a " { $snippet "CFString" } } { "string" string } }
-{ $description "Creates a Factor string from a Core Foundation string." } ;
-
-HELP: CF>string-array
-{ $values { "alien" "a " { $snippet "CFArray" } " of " { $snippet "CFString" } " instances" } { "seq" string } }
-{ $description "Creates an array of Factor strings from a " { $snippet "CFArray" } " of " { $snippet "CFString" } "s." } ;
-
-HELP: <CFFileSystemURL>
-{ $values { "string" "a pathname string" } { "dir?" "a boolean indicating if the pathname is a directory" } { "url" "a " { $snippet "CFURL" } } }
-{ $description "Creates a new " { $snippet "CFURL" } " pointing to the given local pathname." } ;
-
-HELP: <CFURL>
-{ $values { "string" "a URL string" } { "url" "a " { $snippet "CFURL" } } }
-{ $description "Creates a new " { $snippet "CFURL" } "." } ;
-
-HELP: <CFBundle>
-{ $values { "string" "a pathname string" } { "bundle" "a " { $snippet "CFBundle" } } }
-{ $description "Creates a new " { $snippet "CFBundle" } "." } ;
-
-HELP: load-framework
-{ $values { "name" "a pathname string" } }
-{ $description "Loads a Core Foundation framework." } ;
-
 HELP: &CFRelease
 { $values { "alien" "Pointer to a Core Foundation object" } }
 { $description "Marks the given Core Foundation object for unconditional release via " { $link CFRelease } " at the end of the enclosing " { $link with-destructors } " scope." } ;
@@ -46,24 +10,3 @@ HELP: |CFRelease
 { $description "Marks the given Core Foundation object for release via " { $link CFRelease } " in the event of an error at the end of the enclosing " { $link with-destructors } " scope." } ;
 
 { CFRelease |CFRelease &CFRelease } related-words
-
-ARTICLE: "core-foundation" "Core foundation utilities"
-"The " { $vocab-link "core-foundation" } " vocabulary defines bindings for some frequently-used Core Foundation functions. It also provides some utility words."
-$nl
-"Strings:"
-{ $subsection <CFString> }
-{ $subsection CF>string }
-"Arrays:"
-{ $subsection <CFArray> }
-{ $subsection CF>array }
-{ $subsection CF>string-array }
-"URLs:"
-{ $subsection <CFFileSystemURL> }
-{ $subsection <CFURL> }
-"Frameworks:"
-{ $subsection load-framework }
-"Memory management:"
-{ $subsection &CFRelease }
-{ $subsection |CFRelease } ;
-
-ABOUT: "core-foundation"
diff --git a/basis/core-foundation/core-foundation-tests.factor b/basis/core-foundation/core-foundation-tests.factor
deleted file mode 100644 (file)
index c1d6788..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: core-foundation tools.test kernel ;
-IN: core-foundation
-
-[ ] [ "Hello" <CFString> CFRelease ] unit-test
-[ "Hello" ] [ "Hello" <CFString> [ CF>string ] [ CFRelease ] bi ] unit-test
-[ "Hello\u003456" ] [ "Hello\u003456" <CFString> [ CF>string ] [ CFRelease ] bi ] unit-test
-[ "Hello\u013456" ] [ "Hello\u013456" <CFString> [ CF>string ] [ CFRelease ] bi ] unit-test
index 48d7b7e4832b5243bdf580ce59965eff78bf6d21..ec83ba7a8bd5f5f7ba04d4296d09681d7a2ed5e0 100644 (file)
 ! Copyright (C) 2006, 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types alien.strings alien.syntax kernel
-math sequences io.encodings.utf8 destructors accessors
-combinators byte-arrays ;
+USING: alien.syntax destructors accessors kernel ;
 IN: core-foundation
 
-TYPEDEF: void* CFAllocatorRef
-TYPEDEF: void* CFArrayRef
-TYPEDEF: void* CFDataRef
-TYPEDEF: void* CFDictionaryRef
-TYPEDEF: void* CFMutableDictionaryRef
-TYPEDEF: void* CFNumberRef
-TYPEDEF: void* CFBundleRef
-TYPEDEF: void* CFSetRef
-TYPEDEF: void* CFStringRef
-TYPEDEF: void* CFURLRef
-TYPEDEF: void* CFUUIDRef
 TYPEDEF: void* CFTypeRef
-TYPEDEF: void* CFFileDescriptorRef
+
+TYPEDEF: void* CFAllocatorRef
+: kCFAllocatorDefault f ; inline
+
 TYPEDEF: bool Boolean
 TYPEDEF: long CFIndex
 TYPEDEF: int SInt32
 TYPEDEF: uint UInt32
 TYPEDEF: ulong CFTypeID
 TYPEDEF: UInt32 CFOptionFlags
-TYPEDEF: double CFTimeInterval
-TYPEDEF: double CFAbsoluteTime
-TYPEDEF: int CFFileDescriptorNativeDescriptor
-TYPEDEF: void* CFFileDescriptorCallBack
-
-TYPEDEF: int CFNumberType
-: kCFNumberSInt8Type 1 ; inline
-: kCFNumberSInt16Type 2 ; inline
-: kCFNumberSInt32Type 3 ; inline
-: kCFNumberSInt64Type 4 ; inline
-: kCFNumberFloat32Type 5 ; inline
-: kCFNumberFloat64Type 6 ; inline
-: kCFNumberCharType 7 ; inline
-: kCFNumberShortType 8 ; inline
-: kCFNumberIntType 9 ; inline
-: kCFNumberLongType 10 ; inline
-: kCFNumberLongLongType 11 ; inline
-: kCFNumberFloatType 12 ; inline
-: kCFNumberDoubleType 13 ; inline
-: kCFNumberCFIndexType 14 ; inline
-: kCFNumberNSIntegerType 15 ; inline
-: kCFNumberCGFloatType 16 ; inline
-: kCFNumberMaxType 16 ; inline
-
-TYPEDEF: int CFPropertyListMutabilityOptions
-: kCFPropertyListImmutable                  0 ; inline
-: kCFPropertyListMutableContainers          1 ; inline
-: kCFPropertyListMutableContainersAndLeaves 2 ; inline
-
-FUNCTION: CFArrayRef CFArrayCreateMutable ( CFAllocatorRef allocator, CFIndex capacity, void* callbacks ) ;
-
-FUNCTION: void* CFArrayGetValueAtIndex ( CFArrayRef array, CFIndex idx ) ;
-
-FUNCTION: void CFArraySetValueAtIndex ( CFArrayRef array, CFIndex index, void* value ) ;
-
-FUNCTION: CFIndex CFArrayGetCount ( CFArrayRef array ) ;
-
-: kCFURLPOSIXPathStyle 0 ; inline
-: kCFAllocatorDefault f ; inline
-
-FUNCTION: CFURLRef CFURLCreateWithFileSystemPath ( CFAllocatorRef allocator, CFStringRef filePath, int pathStyle, Boolean isDirectory ) ;
-
-FUNCTION: CFURLRef CFURLCreateWithString ( CFAllocatorRef allocator, CFStringRef string, CFURLRef base ) ;
-
-FUNCTION: CFURLRef CFURLCopyFileSystemPath ( CFURLRef url, int pathStyle ) ;
-
-TYPEDEF: int CFStringEncoding
-: kCFStringEncodingMacRoman HEX: 0 ;
-: kCFStringEncodingWindowsLatin1 HEX: 0500 ;
-: kCFStringEncodingISOLatin1 HEX: 0201 ;
-: kCFStringEncodingNextStepLatin HEX: 0B01 ;
-: kCFStringEncodingASCII HEX: 0600 ;
-: kCFStringEncodingUnicode HEX: 0100 ;
-: kCFStringEncodingUTF8 HEX: 08000100 ;
-: kCFStringEncodingNonLossyASCII HEX: 0BFF ;
-: kCFStringEncodingUTF16 HEX: 0100 ;
-: kCFStringEncodingUTF16BE HEX: 10000100 ;
-: kCFStringEncodingUTF16LE HEX: 14000100 ;
-: kCFStringEncodingUTF32 HEX: 0c000100 ;
-: kCFStringEncodingUTF32BE HEX: 18000100 ;
-: kCFStringEncodingUTF32LE HEX: 1c000100 ;
-
-FUNCTION: CFStringRef CFStringCreateFromExternalRepresentation (
-   CFAllocatorRef alloc,
-   CFDataRef data,
-   CFStringEncoding encoding
-) ;
-
-FUNCTION: CFStringRef CFStringCreateWithBytes (
-   CFAllocatorRef alloc,
-   UInt8* bytes,
-   CFIndex numBytes,
-   CFStringEncoding encoding,
-   Boolean isExternalRepresentation
-) ;
-
-FUNCTION: CFIndex CFStringGetLength ( CFStringRef theString ) ;
-
-FUNCTION: void CFStringGetCharacters ( void* theString, CFIndex start, CFIndex length, void* buffer ) ;
-
-FUNCTION: Boolean CFStringGetCString (
-   CFStringRef theString,
-   char* buffer,
-   CFIndex bufferSize,
-   CFStringEncoding encoding
-) ;
-
-FUNCTION: CFStringRef CFStringCreateWithCString (
-   CFAllocatorRef alloc,
-   char* cStr,
-   CFStringEncoding encoding
-) ;
-
-FUNCTION: CFNumberRef CFNumberCreate ( CFAllocatorRef allocator, CFNumberType theType, void* valuePtr ) ;
-
-FUNCTION: CFDataRef CFDataCreate ( CFAllocatorRef allocator, uchar* bytes, CFIndex length ) ;
-
-FUNCTION: CFBundleRef CFBundleCreate ( CFAllocatorRef allocator, CFURLRef bundleURL ) ;
-
-FUNCTION: Boolean CFBundleLoadExecutable ( CFBundleRef bundle ) ;
+TYPEDEF: void* CFUUIDRef
 
 FUNCTION: CFTypeRef CFRetain ( CFTypeRef cf ) ;
-FUNCTION: void CFRelease ( CFTypeRef cf ) ;
-
-FUNCTION: CFTypeID CFGetTypeID ( CFTypeRef cf ) ;
-
-: CF>array ( alien -- array )
-    dup CFArrayGetCount [ CFArrayGetValueAtIndex ] with map ;
-
-: <CFArray> ( seq -- alien )
-    [ f swap length f CFArrayCreateMutable ] keep
-    [ length ] keep
-    [ [ dupd ] dip CFArraySetValueAtIndex ] 2each ;
-
-: <CFString> ( string -- alien )
-    f swap utf8 string>alien kCFStringEncodingUTF8 CFStringCreateWithCString
-    [ "CFStringCreateWithCString failed" throw ] unless* ;
-
-: CF>string ( alien -- string )
-    dup CFStringGetLength 4 * 1 + <byte-array> [
-        dup length
-        kCFStringEncodingUTF8
-        CFStringGetCString
-        [ "CFStringGetCString failed" throw ] unless
-    ] keep utf8 alien>string ;
-
-: CF>string-array ( alien -- seq )
-    CF>array [ CF>string ] map ;
-
-: <CFStringArray> ( seq -- alien )
-    [ <CFString> ] map [ <CFArray> ] [ [ CFRelease ] each ] bi ;
 
-: <CFFileSystemURL> ( string dir? -- url )
-    [ <CFString> f over kCFURLPOSIXPathStyle ] dip
-    CFURLCreateWithFileSystemPath swap CFRelease ;
-
-: <CFURL> ( string -- url )
-    <CFString>
-    [ f swap f CFURLCreateWithString ] keep
-    CFRelease ;
-
-: <CFBundle> ( string -- bundle )
-    t <CFFileSystemURL> [
-        f swap CFBundleCreate
-    ] keep CFRelease ;
-
-GENERIC: <CFNumber> ( number -- alien )
-
-M: integer <CFNumber>
-    [ f kCFNumberLongLongType ] dip <longlong> CFNumberCreate ;
-
-M: float <CFNumber>
-    [ f kCFNumberDoubleType ] dip <double> CFNumberCreate ;
-
-M: t <CFNumber>
-    drop f kCFNumberIntType 1 <int> CFNumberCreate ;
-
-M: f <CFNumber>
-    drop f kCFNumberIntType 0 <int> CFNumberCreate ;
-
-: <CFData> ( byte-array -- alien )
-    [ f ] dip dup length CFDataCreate ;
-
-FUNCTION: CFFileDescriptorRef CFFileDescriptorCreate (
-    CFAllocatorRef allocator,
-    CFFileDescriptorNativeDescriptor fd,
-    Boolean closeOnInvalidate,
-    CFFileDescriptorCallBack callout, 
-    CFFileDescriptorContext* context
-) ;
-
-FUNCTION: void CFFileDescriptorEnableCallBacks (
-    CFFileDescriptorRef f,
-    CFOptionFlags callBackTypes
-) ;
-
-: load-framework ( name -- )
-    dup <CFBundle> [
-        CFBundleLoadExecutable drop
-    ] [
-        "Cannot load bundle named " prepend throw
-    ] ?if ;
+FUNCTION: void CFRelease ( CFTypeRef cf ) ;
 
 TUPLE: CFRelease-destructor alien disposed ;
 
diff --git a/basis/core-foundation/data/data.factor b/basis/core-foundation/data/data.factor
new file mode 100644 (file)
index 0000000..f4d2bab
--- /dev/null
@@ -0,0 +1,57 @@
+! Copyright (C) 2008 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax alien.c-types sequences kernel math ;
+IN: core-foundation.data
+
+TYPEDEF: void* CFDataRef
+TYPEDEF: void* CFDictionaryRef
+TYPEDEF: void* CFMutableDictionaryRef
+TYPEDEF: void* CFNumberRef
+TYPEDEF: void* CFSetRef
+
+TYPEDEF: int CFNumberType
+: kCFNumberSInt8Type 1 ; inline
+: kCFNumberSInt16Type 2 ; inline
+: kCFNumberSInt32Type 3 ; inline
+: kCFNumberSInt64Type 4 ; inline
+: kCFNumberFloat32Type 5 ; inline
+: kCFNumberFloat64Type 6 ; inline
+: kCFNumberCharType 7 ; inline
+: kCFNumberShortType 8 ; inline
+: kCFNumberIntType 9 ; inline
+: kCFNumberLongType 10 ; inline
+: kCFNumberLongLongType 11 ; inline
+: kCFNumberFloatType 12 ; inline
+: kCFNumberDoubleType 13 ; inline
+: kCFNumberCFIndexType 14 ; inline
+: kCFNumberNSIntegerType 15 ; inline
+: kCFNumberCGFloatType 16 ; inline
+: kCFNumberMaxType 16 ; inline
+
+TYPEDEF: int CFPropertyListMutabilityOptions
+: kCFPropertyListImmutable                  0 ; inline
+: kCFPropertyListMutableContainers          1 ; inline
+: kCFPropertyListMutableContainersAndLeaves 2 ; inline
+
+FUNCTION: CFNumberRef CFNumberCreate ( CFAllocatorRef allocator, CFNumberType theType, void* valuePtr ) ;
+
+FUNCTION: CFDataRef CFDataCreate ( CFAllocatorRef allocator, uchar* bytes, CFIndex length ) ;
+
+FUNCTION: CFTypeID CFGetTypeID ( CFTypeRef cf ) ;
+
+GENERIC: <CFNumber> ( number -- alien )
+
+M: integer <CFNumber>
+    [ f kCFNumberLongLongType ] dip <longlong> CFNumberCreate ;
+
+M: float <CFNumber>
+    [ f kCFNumberDoubleType ] dip <double> CFNumberCreate ;
+
+M: t <CFNumber>
+    drop f kCFNumberIntType 1 <int> CFNumberCreate ;
+
+M: f <CFNumber>
+    drop f kCFNumberIntType 0 <int> CFNumberCreate ;
+
+: <CFData> ( byte-array -- alien )
+    [ f ] dip dup length CFDataCreate ;
diff --git a/basis/core-foundation/data/tags.txt b/basis/core-foundation/data/tags.txt
new file mode 100644 (file)
index 0000000..2320bdd
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+bindings
diff --git a/basis/core-foundation/file-descriptors/file-descriptors.factor b/basis/core-foundation/file-descriptors/file-descriptors.factor
new file mode 100644 (file)
index 0000000..29c4219
--- /dev/null
@@ -0,0 +1,32 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax kernel math.bitwise core-foundation ;
+IN: core-foundation.file-descriptors
+
+TYPEDEF: void* CFFileDescriptorRef
+TYPEDEF: int CFFileDescriptorNativeDescriptor
+TYPEDEF: void* CFFileDescriptorCallBack
+
+FUNCTION: CFFileDescriptorRef CFFileDescriptorCreate (
+    CFAllocatorRef allocator,
+    CFFileDescriptorNativeDescriptor fd,
+    Boolean closeOnInvalidate,
+    CFFileDescriptorCallBack callout, 
+    CFFileDescriptorContext* context
+) ;
+
+: kCFFileDescriptorReadCallBack 1 ; inline
+: kCFFileDescriptorWriteCallBack 2 ; inline
+   
+FUNCTION: void CFFileDescriptorEnableCallBacks (
+    CFFileDescriptorRef f,
+    CFOptionFlags callBackTypes
+) ;
+
+: enable-all-callbacks ( fd -- )
+    { kCFFileDescriptorReadCallBack kCFFileDescriptorWriteCallBack } flags
+    CFFileDescriptorEnableCallBacks ;
+
+: <CFFileDescriptor> ( fd callback -- handle )
+    [ f swap ] [ t swap ] bi* f CFFileDescriptorCreate
+    [ "CFFileDescriptorCreate failed" throw ] unless* ;
diff --git a/basis/core-foundation/file-descriptors/tags.txt b/basis/core-foundation/file-descriptors/tags.txt
new file mode 100644 (file)
index 0000000..2320bdd
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+bindings
index b3c1444043c9ea6be3e706ce938db61aeae83516..b0c299a83178ec477413cf7a23c496d38d02b173 100644 (file)
@@ -2,11 +2,11 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.strings alien.syntax kernel
 math sequences namespaces make assocs init accessors
-continuations combinators core-foundation
-core-foundation.run-loop core-foundation.run-loop.thread
-io.encodings.utf8 destructors locals arrays
-specialized-arrays.direct.alien specialized-arrays.direct.int
-specialized-arrays.direct.longlong ;
+continuations combinators io.encodings.utf8 destructors locals
+arrays specialized-arrays.direct.alien
+specialized-arrays.direct.int specialized-arrays.direct.longlong
+core-foundation core-foundation.run-loop core-foundation.strings
+core-foundation.time ;
 IN: core-foundation.fsevents
 
 : kFSEventStreamCreateFlagUseCFTypes 2 ; inline
index 39f4101301352e85226bfe93037672459bf6ebf4..8b2106685a1f110912cfaf1728a3d5a28b5e8422 100644 (file)
@@ -1,6 +1,10 @@
 ! Copyright (C) 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.syntax core-foundation kernel namespaces ;
+USING: accessors alien alien.syntax kernel math namespaces
+sequences destructors combinators threads heaps deques calendar
+core-foundation core-foundation.strings
+core-foundation.file-descriptors core-foundation.timers
+core-foundation.time ;
 IN: core-foundation.run-loop
 
 : kCFRunLoopRunFinished 1 ; inline
@@ -32,6 +36,24 @@ FUNCTION: void CFRunLoopAddSource (
    CFStringRef mode
 ) ;
 
+FUNCTION: void CFRunLoopRemoveSource (
+   CFRunLoopRef rl,
+   CFRunLoopSourceRef source,
+   CFStringRef mode
+) ;
+
+FUNCTION: void CFRunLoopAddTimer (
+   CFRunLoopRef rl,
+   CFRunLoopTimerRef timer,
+   CFStringRef mode
+) ;
+
+FUNCTION: void CFRunLoopRemoveTimer (
+   CFRunLoopRef rl,
+   CFRunLoopTimerRef timer,
+   CFStringRef mode
+) ;
+
 : CFRunLoopDefaultMode ( -- alien )
     #! Ugly, but we don't have static NSStrings
     \ CFRunLoopDefaultMode get-global dup expired? [
@@ -39,3 +61,80 @@ FUNCTION: void CFRunLoopAddSource (
         "kCFRunLoopDefaultMode" <CFString>
         dup \ CFRunLoopDefaultMode set-global
     ] when ;
+
+TUPLE: run-loop fds sources timers ;
+
+: <run-loop> ( -- run-loop )
+    V{ } clone V{ } clone V{ } clone \ run-loop boa ;
+
+SYMBOL: expiry-check
+
+: run-loop ( -- run-loop )
+    \ run-loop get-global not expiry-check get expired? or
+    [
+        31337 <alien> expiry-check set-global
+        <run-loop> dup \ run-loop set-global
+    ] [ \ run-loop get-global ] if ;
+
+: add-source-to-run-loop ( source -- )
+    [ run-loop sources>> push ]
+    [
+        CFRunLoopGetMain
+        swap CFRunLoopDefaultMode
+        CFRunLoopAddSource
+    ] bi ;
+
+: create-fd-source ( CFFileDescriptor -- source )
+    f swap 0 CFFileDescriptorCreateRunLoopSource ;
+
+: add-fd-to-run-loop ( fd callback -- )
+    [
+        <CFFileDescriptor> |CFRelease
+        [ run-loop fds>> push ]
+        [ create-fd-source |CFRelease add-source-to-run-loop ]
+        bi
+    ] with-destructors ;
+
+: add-timer-to-run-loop ( timer -- )
+    [ run-loop timers>> push ]
+    [
+        CFRunLoopGetMain
+        swap CFRunLoopDefaultMode
+        CFRunLoopAddTimer
+    ] bi ;
+
+<PRIVATE
+
+: ((reset-timer)) ( timer counter timestamp -- )
+    nip >CFAbsoluteTime CFRunLoopTimerSetNextFireDate ;
+
+: (reset-timer) ( timer counter -- )
+    yield {
+        { [ dup 0 = ] [ now ((reset-timer)) ] }
+        { [ run-queue deque-empty? not ] [ 1- (reset-timer) ] }
+        { [ sleep-queue heap-empty? ] [ 5 minutes hence ((reset-timer)) ] }
+        [ sleep-queue heap-peek nip micros>timestamp ((reset-timer)) ]
+    } cond ;
+
+: reset-timer ( timer -- )
+    10 (reset-timer) ;
+
+PRIVATE>
+
+: reset-run-loop ( -- )
+    run-loop
+    [ timers>> [ reset-timer ] each ]
+    [ fds>> [ enable-all-callbacks ] each ] bi ;
+
+: timer-callback ( -- callback )
+    "void" { "CFRunLoopTimerRef" "void*" } "cdecl"
+    [ 2drop reset-run-loop yield ] alien-callback ;
+
+: init-thread-timer ( -- )
+    timer-callback <CFTimer> add-timer-to-run-loop ;
+
+: run-one-iteration ( us -- handled? )
+    reset-run-loop
+    CFRunLoopDefaultMode
+    swap [ microseconds ] [ 5 minutes ] if* >CFTimeInterval
+    t CFRunLoopRunInMode kCFRunLoopRunHandledSource = ;
diff --git a/basis/core-foundation/run-loop/thread/authors.txt b/basis/core-foundation/run-loop/thread/authors.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/core-foundation/run-loop/thread/summary.txt b/basis/core-foundation/run-loop/thread/summary.txt
deleted file mode 100644 (file)
index e5818b3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Vocabulary with init hook for running CoreFoundation event loop
diff --git a/basis/core-foundation/run-loop/thread/tags.txt b/basis/core-foundation/run-loop/thread/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/core-foundation/run-loop/thread/thread.factor b/basis/core-foundation/run-loop/thread/thread.factor
deleted file mode 100644 (file)
index aeeff31..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-! Copyright (C) 2008 Slava Pestov
-! See http://factorcode.org/license.txt for BSD license.
-USING: calendar core-foundation.run-loop init kernel threads ;
-IN: core-foundation.run-loop.thread
-
-! Load this vocabulary if you need a run loop running.
-
-: run-loop-thread ( -- )
-    CFRunLoopDefaultMode 0 f CFRunLoopRunInMode
-    kCFRunLoopRunHandledSource = [ 1 seconds sleep ] unless
-    run-loop-thread ;
-
-: start-run-loop-thread ( -- )
-    [ run-loop-thread t ] "CFRunLoop dispatcher" spawn-server drop ;
-
-[ start-run-loop-thread ] "core-foundation.run-loop.thread" add-init-hook
diff --git a/basis/core-foundation/strings/strings-docs.factor b/basis/core-foundation/strings/strings-docs.factor
new file mode 100644 (file)
index 0000000..4c12fb5
--- /dev/null
@@ -0,0 +1,14 @@
+USING: help.syntax help.markup strings ;
+IN: core-foundation.strings
+
+HELP: <CFString>
+{ $values { "string" string } { "alien" "a " { $snippet "CFString" } } }
+{ $description "Creates a Core Foundation string from a Factor string." } ;
+
+HELP: CF>string
+{ $values { "alien" "a " { $snippet "CFString" } } { "string" string } }
+{ $description "Creates a Factor string from a Core Foundation string." } ;
+
+HELP: CF>string-array
+{ $values { "alien" "a " { $snippet "CFArray" } " of " { $snippet "CFString" } " instances" } { "seq" string } }
+{ $description "Creates an array of Factor strings from a " { $snippet "CFArray" } " of " { $snippet "CFString" } "s." } ;
diff --git a/basis/core-foundation/strings/strings-tests.factor b/basis/core-foundation/strings/strings-tests.factor
new file mode 100644 (file)
index 0000000..39d5ee6
--- /dev/null
@@ -0,0 +1,9 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: core-foundation.strings core-foundation tools.test kernel ;
+IN: core-foundation
+
+[ ] [ "Hello" <CFString> CFRelease ] unit-test
+[ "Hello" ] [ "Hello" <CFString> [ CF>string ] [ CFRelease ] bi ] unit-test
+[ "Hello\u003456" ] [ "Hello\u003456" <CFString> [ CF>string ] [ CFRelease ] bi ] unit-test
+[ "Hello\u013456" ] [ "Hello\u013456" <CFString> [ CF>string ] [ CFRelease ] bi ] unit-test
diff --git a/basis/core-foundation/strings/strings.factor b/basis/core-foundation/strings/strings.factor
new file mode 100644 (file)
index 0000000..2e6180c
--- /dev/null
@@ -0,0 +1,66 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax alien.strings kernel sequences byte-arrays
+io.encodings.utf8 math core-foundation core-foundation.arrays ;
+IN: core-foundation.strings
+
+TYPEDEF: void* CFStringRef
+
+TYPEDEF: int CFStringEncoding
+: kCFStringEncodingMacRoman HEX: 0 ;
+: kCFStringEncodingWindowsLatin1 HEX: 0500 ;
+: kCFStringEncodingISOLatin1 HEX: 0201 ;
+: kCFStringEncodingNextStepLatin HEX: 0B01 ;
+: kCFStringEncodingASCII HEX: 0600 ;
+: kCFStringEncodingUnicode HEX: 0100 ;
+: kCFStringEncodingUTF8 HEX: 08000100 ;
+: kCFStringEncodingNonLossyASCII HEX: 0BFF ;
+: kCFStringEncodingUTF16 HEX: 0100 ;
+: kCFStringEncodingUTF16BE HEX: 10000100 ;
+: kCFStringEncodingUTF16LE HEX: 14000100 ;
+: kCFStringEncodingUTF32 HEX: 0c000100 ;
+: kCFStringEncodingUTF32BE HEX: 18000100 ;
+: kCFStringEncodingUTF32LE HEX: 1c000100 ;
+
+FUNCTION: CFStringRef CFStringCreateWithBytes (
+   CFAllocatorRef alloc,
+   UInt8* bytes,
+   CFIndex numBytes,
+   CFStringEncoding encoding,
+   Boolean isExternalRepresentation
+) ;
+
+FUNCTION: CFIndex CFStringGetLength ( CFStringRef theString ) ;
+
+FUNCTION: void CFStringGetCharacters ( void* theString, CFIndex start, CFIndex length, void* buffer ) ;
+
+FUNCTION: Boolean CFStringGetCString (
+   CFStringRef theString,
+   char* buffer,
+   CFIndex bufferSize,
+   CFStringEncoding encoding
+) ;
+
+FUNCTION: CFStringRef CFStringCreateWithCString (
+   CFAllocatorRef alloc,
+   char* cStr,
+   CFStringEncoding encoding
+) ;
+
+: <CFString> ( string -- alien )
+    f swap utf8 string>alien kCFStringEncodingUTF8 CFStringCreateWithCString
+    [ "CFStringCreateWithCString failed" throw ] unless* ;
+
+: CF>string ( alien -- string )
+    dup CFStringGetLength 4 * 1 + <byte-array> [
+        dup length
+        kCFStringEncodingUTF8
+        CFStringGetCString
+        [ "CFStringGetCString failed" throw ] unless
+    ] keep utf8 alien>string ;
+
+: CF>string-array ( alien -- seq )
+    CF>array [ CF>string ] map ;
+
+: <CFStringArray> ( seq -- alien )
+    [ <CFString> ] map [ <CFArray> ] [ [ CFRelease ] each ] bi ;
diff --git a/basis/core-foundation/strings/tags.txt b/basis/core-foundation/strings/tags.txt
new file mode 100644 (file)
index 0000000..2320bdd
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+bindings
diff --git a/basis/core-foundation/time/time.factor b/basis/core-foundation/time/time.factor
new file mode 100644 (file)
index 0000000..15ad7bb
--- /dev/null
@@ -0,0 +1,14 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: calendar alien.syntax ;
+IN: core-foundation.time
+
+TYPEDEF: double CFTimeInterval
+TYPEDEF: double CFAbsoluteTime
+
+: >CFTimeInterval ( duration -- interval )
+    duration>seconds ; inline
+
+: >CFAbsoluteTime ( timestamp -- time )
+    T{ timestamp { year 2001 } { month 1 } { day 1 } } time-
+    duration>seconds ; inline
diff --git a/basis/core-foundation/timers/tags.txt b/basis/core-foundation/timers/tags.txt
new file mode 100644 (file)
index 0000000..2320bdd
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+bindings
diff --git a/basis/core-foundation/timers/timers.factor b/basis/core-foundation/timers/timers.factor
new file mode 100644 (file)
index 0000000..51ee982
--- /dev/null
@@ -0,0 +1,35 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax system math kernel calendar core-foundation
+core-foundation.time ;
+IN: core-foundation.timers
+
+TYPEDEF: void* CFRunLoopTimerRef
+TYPEDEF: void* CFRunLoopTimerCallBack
+TYPEDEF: void* CFRunLoopTimerContext
+
+FUNCTION: CFRunLoopTimerRef CFRunLoopTimerCreate (
+   CFAllocatorRef allocator,
+   CFAbsoluteTime fireDate,
+   CFTimeInterval interval,
+   CFOptionFlags flags,
+   CFIndex order,
+   CFRunLoopTimerCallBack callout,
+   CFRunLoopTimerContext* context
+) ;
+
+: <CFTimer> ( callback -- timer )
+    [ f now >CFAbsoluteTime 60 0 0 ] dip f CFRunLoopTimerCreate ;
+
+FUNCTION: void CFRunLoopTimerInvalidate (
+   CFRunLoopTimerRef timer
+) ;
+
+FUNCTION: Boolean CFRunLoopTimerIsValid (
+   CFRunLoopTimerRef timer
+) ;
+
+FUNCTION: void CFRunLoopTimerSetNextFireDate (
+   CFRunLoopTimerRef timer,
+   CFAbsoluteTime fireDate
+) ;
diff --git a/basis/core-foundation/urls/tags.txt b/basis/core-foundation/urls/tags.txt
new file mode 100644 (file)
index 0000000..2320bdd
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+bindings
diff --git a/basis/core-foundation/urls/urls-docs.factor b/basis/core-foundation/urls/urls-docs.factor
new file mode 100644 (file)
index 0000000..d017e70
--- /dev/null
@@ -0,0 +1,10 @@
+USING: help.syntax help.markup ;
+IN: core-foundation.urls
+
+HELP: <CFFileSystemURL>
+{ $values { "string" "a pathname string" } { "dir?" "a boolean indicating if the pathname is a directory" } { "url" "a " { $snippet "CFURL" } } }
+{ $description "Creates a new " { $snippet "CFURL" } " pointing to the given local pathname." } ;
+
+HELP: <CFURL>
+{ $values { "string" "a URL string" } { "url" "a " { $snippet "CFURL" } } }
+{ $description "Creates a new " { $snippet "CFURL" } "." } ;
diff --git a/basis/core-foundation/urls/urls.factor b/basis/core-foundation/urls/urls.factor
new file mode 100644 (file)
index 0000000..9f9d3a6
--- /dev/null
@@ -0,0 +1,24 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax kernel core-foundation.strings
+core-foundation ;
+IN: core-foundation.urls
+
+: kCFURLPOSIXPathStyle 0 ; inline
+
+TYPEDEF: void* CFURLRef
+
+FUNCTION: CFURLRef CFURLCreateWithFileSystemPath ( CFAllocatorRef allocator, CFStringRef filePath, int pathStyle, Boolean isDirectory ) ;
+
+FUNCTION: CFURLRef CFURLCreateWithString ( CFAllocatorRef allocator, CFStringRef string, CFURLRef base ) ;
+
+FUNCTION: CFURLRef CFURLCopyFileSystemPath ( CFURLRef url, int pathStyle ) ;
+
+: <CFFileSystemURL> ( string dir? -- url )
+    [ <CFString> f over kCFURLPOSIXPathStyle ] dip
+    CFURLCreateWithFileSystemPath swap CFRelease ;
+
+: <CFURL> ( string -- url )
+    <CFString>
+    [ f swap f CFURLCreateWithString ] keep
+    CFRelease ;
index f94cc00abc2857d409125b012658772cf1332d78..0bb0d70ee077bef4a34992164760a5cface81da9 100644 (file)
@@ -189,21 +189,21 @@ MTSPR: LR 8
 MTSPR: CTR 9
 
 ! Pseudo-instructions
-: LI 0 rot ADDI ; inline
-: SUBI neg ADDI ; inline
-: LIS 0 rot ADDIS ; inline
-: SUBIC neg ADDIC ; inline
-: SUBIC. neg ADDIC. ; inline
-: NOT dup NOR ; inline
-: NOT. dup NOR. ; inline
-: MR dup OR ; inline
-: MR. dup OR. ; inline
-: (SLWI) 0 31 pick - ; inline
+: LI ( value dst -- ) 0 rot ADDI ; inline
+: SUBI ( dst src1 src2 -- ) neg ADDI ; inline
+: LIS ( value dst -- ) 0 rot ADDIS ; inline
+: SUBIC ( dst src1 src2 -- ) neg ADDIC ; inline
+: SUBIC. ( dst src1 src2 -- ) neg ADDIC. ; inline
+: NOT ( dst src -- ) dup NOR ; inline
+: NOT. ( dst src -- ) dup NOR. ; inline
+: MR ( dst src -- ) dup OR ; inline
+: MR. ( dst src -- ) dup OR. ; inline
+: (SLWI) ( d a b -- d a b x y ) 0 31 pick - ; inline
 : SLWI ( d a b -- ) (SLWI) RLWINM ;
 : SLWI. ( d a b -- ) (SLWI) RLWINM. ;
-: (SRWI) 32 over - swap 31 ; inline
+: (SRWI) ( d a b -- d a b x y ) 32 over - swap 31 ; inline
 : SRWI ( d a b -- ) (SRWI) RLWINM ;
 : SRWI. ( d a b -- ) (SRWI) RLWINM. ;
-: LOAD32 ( n r -- ) >r w>h/h r> tuck LIS dup rot ORI ;
+: LOAD32 ( n r -- ) [ w>h/h ] dip tuck LIS dup rot ORI ;
 : immediate? ( n -- ? ) HEX: -8000 HEX: 7fff between? ;
 : LOAD ( n r -- ) over immediate? [ LI ] [ LOAD32 ] if ;
index 881b094ca229e9fdd32d194e449de3d34e351d98..a2c3a6c8d519723aa81697732ac8a1070247edef 100644 (file)
@@ -79,8 +79,8 @@ M: label (B) 0 -rot (B) rc-relative-ppc-3 label-fixup ;
 
 GENERIC: BC ( a b c -- )
 M: integer BC 0 0 16 b-insn ;
-M: word BC >r 0 BC r> rc-relative-ppc-2 rel-word ;
-M: label BC >r 0 BC r> rc-relative-ppc-2 label-fixup ;
+M: word BC [ 0 BC ] dip rc-relative-ppc-2 rel-word ;
+M: label BC [ 0 BC ] dip rc-relative-ppc-2 label-fixup ;
 
 : CREATE-B ( -- word ) scan "B" prepend create-in ;
 
index 445c7082bcbce551b35a676a5fcbbf194f5d65b8..b27f3aee72b0f7940405ce65572943d501af3ce4 100644 (file)
@@ -302,9 +302,7 @@ big-endian on
     4 ds-reg 0 STW\r
 ] f f f \ -rot define-sub-primitive\r
 \r
-[ jit->r ] f f f \ >r define-sub-primitive\r
-\r
-[ jit-r> ] f f f \ r> define-sub-primitive\r
+[ jit->r ] f f f \ load-local define-sub-primitive\r
 \r
 ! Comparisons\r
 : jit-compare ( insn -- )\r
index c555c4b8090ba60779b5e0f097d54e5ce8b2a876..232608e4ef89b8c776fc9b775e8a1c85498fde43 100644 (file)
@@ -467,19 +467,21 @@ M: ppc %gc
 M: ppc %prologue ( n -- )
     0 11 LOAD32 rc-absolute-ppc-2/2 rel-this
     0 MFLR
-    1 1 pick neg ADDI
-    11 1 pick xt-save STW
-    dup 11 LI
-    11 1 pick next-save STW
-    0 1 rot lr-save + STW ;
+    {
+        [ [ 1 1 ] dip neg ADDI ]
+        [ [ 11 1 ] dip xt-save STW ]
+        [ 11 LI ]
+        [ [ 11 1 ] dip next-save STW ]
+        [ [ 0 1 ] dip lr-save + STW ]
+    } cleave ;
 
 M: ppc %epilogue ( n -- )
     #! At the end of each word that calls a subroutine, we store
     #! the previous link register value in r0 by popping it off
     #! the stack, set the link register to the contents of r0,
     #! and jump to the link register.
-    0 1 pick lr-save + LWZ
-    1 1 rot ADDI
+    [ [ 0 1 ] dip lr-save + LWZ ]
+    [ [ 1 1 ] dip ADDI ] bi
     0 MTLR ;
 
 :: (%boolean) ( dst temp word -- )
@@ -541,17 +543,17 @@ GENERIC: STF ( src dst off reg-class -- )
 M: single-float-regs STF drop STFS ;
 M: double-float-regs STF drop STFD ;
 
-M: float-regs %save-param-reg >r 1 rot local@ r> STF ;
+M: float-regs %save-param-reg [ 1 rot local@ ] dip STF ;
 
 GENERIC: LF ( dst src off reg-class -- )
 
 M: single-float-regs LF drop LFS ;
 M: double-float-regs LF drop LFD ;
 
-M: float-regs %load-param-reg >r 1 rot local@ r> LF ;
+M: float-regs %load-param-reg [ 1 rot local@ ] dip LF ;
 
 M: stack-params %load-param-reg ( stack reg reg-class -- )
-    drop >r 0 1 rot local@ LWZ 0 1 r> param@ STW ;
+    drop [ 0 1 rot local@ LWZ 0 1 ] dip param@ STW ;
 
 : next-param@ ( n -- x ) param@ stack-frame get total-size>> + ;
 
@@ -559,8 +561,8 @@ M: stack-params %save-param-reg ( stack reg reg-class -- )
     #! Funky. Read the parameter from the caller's stack frame.
     #! This word is used in callbacks
     drop
-    0 1 rot next-param@ LWZ
-    0 1 rot local@ STW ;
+    [ 0 1 ] dip next-param@ LWZ
+    [ 0 1 ] dip local@ STW ;
 
 M: ppc %prepare-unbox ( -- )
     ! First parameter is top of stack
@@ -580,14 +582,14 @@ M: ppc %unbox-long-long ( n func -- )
     f %alien-invoke
     ! Store the return value on the C stack
     [
-        3 1 pick local@ STW
-        4 1 rot cell + local@ STW
+        [ [ 3 1 ] dip local@ STW ]
+        [ [ 4 1 ] dip cell + local@ STW ] bi
     ] when* ;
 
 M: ppc %unbox-large-struct ( n c-type -- )
     ! Value must be in r3
     ! Compute destination address and load struct size
-    [ 4 1 rot local@ ADDI ] [ heap-size 5 LI ] bi*
+    [ [ 4 1 ] dip local@ ADDI ] [ heap-size 5 LI ] bi*
     ! Call the function
     "to_value_struct" f %alien-invoke ;
 
@@ -595,15 +597,16 @@ M: ppc %box ( n reg-class func -- )
     ! If the source is a stack location, load it into freg #0.
     ! If the source is f, then we assume the value is already in
     ! freg #0.
-    >r
-    over [ 0 over param-reg swap %load-param-reg ] [ 2drop ] if
-    r> f %alien-invoke ;
+    [ over [ 0 over param-reg swap %load-param-reg ] [ 2drop ] if ] dip
+    f %alien-invoke ;
 
 M: ppc %box-long-long ( n func -- )
-    >r [
-        3 1 pick local@ LWZ
-        4 1 rot cell + local@ LWZ
-    ] when* r> f %alien-invoke ;
+    [
+        [
+            [ [ 3 1 ] dip local@ LWZ ]
+            [ [ 4 1 ] dip cell + local@ LWZ ] bi
+        ] when*
+    ] dip f %alien-invoke ;
 
 : struct-return@ ( n -- n )
     [ stack-frame get params>> ] unless* local@ ;
@@ -616,7 +619,7 @@ M: ppc %prepare-box-struct ( -- )
 M: ppc %box-large-struct ( n c-type -- )
     ! If n = f, then we're boxing a returned struct
     ! Compute destination address and load struct size
-    [ 3 1 rot struct-return@ ADDI ] [ heap-size 4 LI ] bi*
+    [ [ 3 1 ] dip struct-return@ ADDI ] [ heap-size 4 LI ] bi*
     ! Call the function
     "box_value_struct" f %alien-invoke ;
 
index 2077f51e0a7c8b5b1302bfb7ddf58f556d6e92f7..e46c8f691457c20d125760f2ff9819cf227d9ab6 100644 (file)
@@ -37,7 +37,7 @@ M:: x86.64 %dispatch ( src temp offset -- )
 
 M: x86.64 param-reg-1 int-regs param-regs first ;
 M: x86.64 param-reg-2 int-regs param-regs second ;
-: param-reg-3 int-regs param-regs third ; inline
+: param-reg-3 ( -- reg ) int-regs param-regs third ; inline
 
 M: int-regs return-reg drop RAX ;
 M: float-regs return-reg drop XMM0 ;
@@ -50,8 +50,8 @@ M: x86.64 %prologue ( n -- )
 
 M: stack-params %load-param-reg
     drop
-    >r R11 swap param@ MOV
-    r> param@ R11 MOV ;
+    [ R11 swap param@ MOV ] dip
+    param@ R11 MOV ;
 
 M: stack-params %save-param-reg
     drop
index 6ddec4af07e87ff914a9339b47c8ed68f2677058..343850f9e639dc47ffb8bb59947cb1e868721de9 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel words sequences lexer parser fry ;
+USING: kernel words words.symbol sequences lexer parser fry ;
 IN: cpu.x86.assembler.syntax
 
 : define-register ( name num size -- )
index 42fcfaa6a2421f0d851c884a701ea24485059b80..5e3405e93ad80fe5544787b57021762fcd0f5dc7 100644 (file)
@@ -79,9 +79,10 @@ big-endian off
     ! compute quotation location
     temp0 temp1 ADD
     ! load quotation
-    temp0 temp0 array-start-offset [+] MOV
-    ! execute branch
-    temp0 quot-xt-offset [+] JMP
+    arg temp0 array-start-offset [+] MOV
+    ! execute branch. the quot must be in arg, since it might
+    ! not be compiled yet
+    arg quot-xt-offset [+] JMP
 ] rc-absolute-cell rt-immediate 1 rex-length + jit-dispatch jit-define
 
 : jit->r ( -- )
@@ -318,9 +319,7 @@ big-endian off
     ds-reg [] temp1 MOV
 ] f f f \ -rot define-sub-primitive
 
-[ jit->r ] f f f \ >r define-sub-primitive
-
-[ jit-r> ] f f f \ r> define-sub-primitive
+[ jit->r ] f f f \ load-local define-sub-primitive
 
 ! Comparisons
 : jit-compare ( insn -- )
index 133223b6e4787c0c37b0a8a2e2410a68b087dea6..483a5825a9e00e1674529d8be513ea3e18b5ec45 100644 (file)
@@ -12,7 +12,7 @@ SYMBOL: delimiter
 
 CHAR: , delimiter set-global
 
-: delimiter> delimiter get ; inline
+: delimiter> ( -- delimiter ) delimiter get ; inline
     
 DEFER: quoted-field ( -- endchar )
     
index 8173ff6a5b137ac24122a582d4ad61cf3e815b99..ae7451cb484dc2f26c7060509dd52b454cce4d7d 100644 (file)
@@ -1,20 +1,20 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: classes kernel help.markup help.syntax sequences
-alien assocs strings math multiline quotations ;
+alien assocs strings math multiline quotations db.private ;
 IN: db
 
-HELP: db
-{ $description "The " { $snippet "db" } " class is the superclass of all other database classes. It stores a " { $snippet "handle" } " to the database as well as insert, update, and delete queries." } ;
+HELP: db-connection
+{ $description "The " { $snippet "db-connection" } " class is the superclass of all other database classes. It stores a " { $snippet "handle" } " to the database as well as insert, update, and delete queries. Stores the current database object as a dynamic variable." } ;
 
-HELP: new-db
-{ $values { "class" class } { "obj" object } }
+HELP: new-db-connection
+{ $values { "class" class } { "obj" db-connection } }
 { $description "Creates a new database object from a given class with caches for prepared statements. Does not actually connect to the database until " { $link db-open } " or " { $link with-db } " is called." }
 { $notes "User-defined databases must call this constructor word instead of " { $link new } "." } ;
 
 HELP: db-open
-{ $values { "db" db } { "db" db } }
-{ $description "Opens a database using the configuration data stored in a " { $link db } " tuple. The database object now references a database handle that must be cleaned up. Therefore, it is better to use the " { $link with-db } " combinator than calling this word directly." } ;
+{ $values { "db" "a database configuration object" } { "db-connection" db-connection } }
+{ $description "Opens a database using the configuration data stored in a " { $snippet "database configuration object" } "tuple. The database object now references a database handle that must be cleaned up. Therefore, it is better to use the " { $link with-db } " combinator than calling this word directly." } ;
 
 HELP: db-close
 { $values { "handle" alien } }
@@ -141,13 +141,13 @@ HELP: rollback-transaction
 HELP: sql-command
 { $values
      { "sql" string } }
-{ $description "Executes a SQL string using the databse in the " { $link db } " symbol." } ;
+{ $description "Executes a SQL string using the databse in the " { $link db-connection } " symbol." } ;
 
 HELP: sql-query
 { $values
      { "sql" string }
      { "rows" "an array of arrays of strings" } }
-{ $description "Runs a SQL query of raw text in the database in the " { $link db } " symbol. Each row is returned as an array of strings; no type-conversions are done on the resulting data." } ;
+{ $description "Runs a SQL query of raw text in the database in the " { $link db-connection } " symbol. Each row is returned as an array of strings; no type-conversions are done on the resulting data." } ;
 
 { sql-command sql-query } related-words
 
@@ -167,8 +167,8 @@ HELP: sql-row-typed
 
 HELP: with-db
 { $values
-     { "db" db } { "quot" quotation } }
-{ $description "Calls the quotation with a database bound to the " { $link db } " symbol. See " { $link "db-custom-database-combinators" } " for help setting up database access." } ;
+     { "db" "a database configuration object" } { "quot" quotation } }
+{ $description "Calls the quotation with a database bound to the " { $link db-connection } " symbol. See " { $link "db-custom-database-combinators" } " for help setting up database access." } ;
 
 HELP: with-transaction
 { $values
index b7bd8218a2e0d832e9083ec95d75a78ed4cd2e98..0b18044f2b8002a57eccba0b257c47f5c2cab671 100644 (file)
@@ -5,25 +5,29 @@ namespaces sequences classes.tuple words strings
 tools.walker accessors combinators fry ;
 IN: db
 
-TUPLE: db
+<PRIVATE
+
+TUPLE: db-connection
     handle
     insert-statements
     update-statements
     delete-statements ;
 
-: new-db ( class -- obj )
+: new-db-connection ( class -- obj )
     new
         H{ } clone >>insert-statements
         H{ } clone >>update-statements
         H{ } clone >>delete-statements ; inline
 
-GENERIC: db-open ( db -- db )
-HOOK: db-close db ( handle -- )
+PRIVATE>
+
+GENERIC: db-open ( db -- db-connection )
+HOOK: db-close db-connection ( handle -- )
 
 : dispose-statements ( assoc -- ) values dispose-each ;
 
-M: db dispose ( db -- ) 
-    dup db [
+M: db-connection dispose ( db-connection -- ) 
+    dup db-connection [
         [ dispose-statements H{ } clone ] change-insert-statements
         [ dispose-statements H{ } clone ] change-update-statements
         [ dispose-statements H{ } clone ] change-delete-statements
@@ -63,8 +67,8 @@ TUPLE: prepared-statement < statement ;
         swap >>in-params
         swap >>sql ;
 
-HOOK: <simple-statement> db ( string in out -- statement )
-HOOK: <prepared-statement> db ( string in out -- statement )
+HOOK: <simple-statement> db-connection ( string in out -- statement )
+HOOK: <prepared-statement> db-connection ( string in out -- statement )
 GENERIC: prepare-statement ( statement -- )
 GENERIC: bind-statement* ( statement -- )
 GENERIC: low-level-bind ( statement -- )
@@ -107,8 +111,8 @@ M: object execute-statement* ( statement type -- )
     accumulator [ query-each ] dip { } like ; inline
 
 : with-db ( db quot -- )
-    [ db-open db ] dip
-    '[ db get [ drop @ ] with-disposal ] with-variable ; inline
+    [ db-open db-connection ] dip
+    '[ db-connection get [ drop @ ] with-disposal ] with-variable ; inline
 
 ! Words for working with raw SQL statements
 : default-query ( query -- result-set )
@@ -126,13 +130,13 @@ M: object execute-statement* ( statement type -- )
 ! Transactions
 SYMBOL: in-transaction
 
-HOOK: begin-transaction db ( -- )
-HOOK: commit-transaction db ( -- )
-HOOK: rollback-transaction db ( -- )
+HOOK: begin-transaction db-connection ( -- )
+HOOK: commit-transaction db-connection ( -- )
+HOOK: rollback-transaction db-connection ( -- )
 
-M: db begin-transaction ( -- ) "BEGIN" sql-command ;
-M: db commit-transaction ( -- ) "COMMIT" sql-command ;
-M: db rollback-transaction ( -- ) "ROLLBACK" sql-command ;
+M: db-connection begin-transaction ( -- ) "BEGIN" sql-command ;
+M: db-connection commit-transaction ( -- ) "COMMIT" sql-command ;
+M: db-connection rollback-transaction ( -- ) "ROLLBACK" sql-command ;
 
 : in-transaction? ( -- ? ) in-transaction get ;
 
index 0a68db501b9a1404edc02bfff95c86389883e979..7ff2a33d92239fcba935a00cd5c72726953b4d38 100644 (file)
@@ -1,6 +1,6 @@
 IN: db.pools.tests
-USING: db.pools tools.test continuations io.files namespaces
-accessors kernel math destructors ;
+USING: db.pools tools.test continuations io.files io.files.temp
+io.directories namespaces accessors kernel math destructors ;
 
 \ <db-pool> must-infer
 
index 8bc5e87f0ea4ef26f17fed72410746c70e9c4306..55ff3a383b58a22c1007cb375706126524b6d975 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors kernel arrays namespaces sequences continuations
-io.pools db fry ;
+io.pools db fry db.private ;
 IN: db.pools
 
 TUPLE: db-pool < pool db ;
@@ -17,4 +17,4 @@ M: db-pool make-connection ( pool -- )
     db>> db-open ;
 
 : with-pooled-db ( pool quot -- )
-    '[ db _ with-variable ] with-pooled-connection ; inline
+    '[ db-connection _ with-variable ] with-pooled-connection ; inline
index 5149d14f3d8986d5a77c1b015b970cc010244e45..19cf5c5002f91161f0df6afb2c681d0d75ee3259 100644 (file)
@@ -6,7 +6,7 @@ db.types tools.walker ascii splitting math.parser combinators
 libc shuffle calendar.format byte-arrays destructors prettyprint
 accessors strings serialize io.encodings.binary io.encodings.utf8
 alien.strings io.streams.byte-array summary present urls
-specialized-arrays.uint specialized-arrays.alien ;
+specialized-arrays.uint specialized-arrays.alien db.private ;
 IN: db.postgresql.lib
 
 : postgresql-result-error-message ( res -- str/f )
@@ -24,7 +24,7 @@ IN: db.postgresql.lib
     "\n" split [ [ blank? ] trim ] map "\n" join ;
 
 : postgresql-error-message ( -- str )
-    db get handle>> (postgresql-error-message) ;
+    db-connection get handle>> (postgresql-error-message) ;
 
 : postgresql-error ( res -- res )
     dup [ postgresql-error-message throw ] unless ;
@@ -44,7 +44,7 @@ M: postgresql-result-null summary ( obj -- str )
     dup PQstatus zero? [ (postgresql-error-message) throw ] unless ;
 
 : do-postgresql-statement ( statement -- res )
-    db get handle>> swap sql>> PQexec dup postgresql-result-ok? [
+    db-connection get handle>> swap sql>> PQexec dup postgresql-result-ok? [
         [ postgresql-result-error-message ] [ PQclear ] bi throw
     ] unless ;
 
@@ -99,7 +99,7 @@ M: postgresql-result-null summary ( obj -- str )
 
 : do-postgresql-bound-statement ( statement -- res )
     [
-        [ db get handle>> ] dip
+        [ db-connection get handle>> ] dip
         {
             [ sql>> ]
             [ bind-params>> length ]
index bc5ec2f0c5d10633319240f7eb86cec6dc0e5cac..cf6dc903f10081b3109577c2e13f6904c3df8e5d 100644 (file)
@@ -1,5 +1,5 @@
 USING: kernel db.postgresql alien continuations io classes
-prettyprint sequences namespaces tools.test db
+prettyprint sequences namespaces tools.test db db.private
 db.tuples db.types unicode.case accessors system ;
 IN: db.postgresql.tests
 
@@ -92,7 +92,3 @@ os windows? cpu x86.64? and [
         ] with-db
     ] unit-test
 ] unless
-
-
-: with-dummy-db ( quot -- )
-    [ T{ postgresql-db } db ] dip with-variable ;
index 90a875b8fff6f4992731f1073ffd538d79a596e5..a094fbc542ac3ca1eace837be31a95615f04f38e 100644 (file)
@@ -4,23 +4,31 @@ USING: arrays assocs alien alien.syntax continuations io
 kernel math math.parser namespaces make prettyprint quotations
 sequences debugger db db.postgresql.lib db.postgresql.ffi
 db.tuples db.types tools.annotations math.ranges
-combinators classes locals words tools.walker
+combinators classes locals words tools.walker db.private
 nmake accessors random db.queries destructors db.tuples.private ;
 USE: tools.walker
 IN: db.postgresql
 
-TUPLE: postgresql-db < db
-    host port pgopts pgtty database username password ;
+TUPLE: postgresql-db host port pgopts pgtty database username password ;
 
 : <postgresql-db> ( -- postgresql-db )
-    postgresql-db new-db ;
+    postgresql-db new ;
+
+<PRIVATE
+
+TUPLE: postgresql-db-connection < db-connection ;
+: <postgresql-db-connection> ( handle -- db-connection )
+    postgresql-db-connection new-db-connection
+        swap >>handle ;
+
+PRIVATE>
 
 TUPLE: postgresql-statement < statement ;
 
 TUPLE: postgresql-result-set < result-set ;
 
-M: postgresql-db db-open ( db -- db )
-    dup {
+M: postgresql-db db-open ( db -- db-connection )
+    {
         [ host>> ]
         [ port>> ]
         [ pgopts>> ]
@@ -28,10 +36,9 @@ M: postgresql-db db-open ( db -- db )
         [ database>> ]
         [ username>> ]
         [ password>> ]
-    } cleave connect-postgres >>handle ;
+    } cleave connect-postgres <postgresql-db-connection> ;
 
-M: postgresql-db db-close ( handle -- )
-    PQfinish ;
+M: postgresql-db-connection db-close ( handle -- ) PQfinish ;
 
 M: postgresql-statement bind-statement* ( statement -- ) drop ;
 
@@ -98,25 +105,25 @@ M: postgresql-result-set dispose ( result-set -- )
 
 M: postgresql-statement prepare-statement ( statement -- )
     dup
-    [ db get handle>> f ] dip
+    [ db-connection get handle>> f ] dip
     [ sql>> ] [ in-params>> ] bi
     length f PQprepare postgresql-error
     >>handle drop ;
 
-M: postgresql-db <simple-statement> ( sql in out -- statement )
+M: postgresql-db-connection <simple-statement> ( sql in out -- statement )
     postgresql-statement new-statement ;
 
-M: postgresql-db <prepared-statement> ( sql in out -- statement )
+M: postgresql-db-connection <prepared-statement> ( sql in out -- statement )
     <simple-statement> dup prepare-statement ;
 
 : bind-name% ( -- )
     CHAR: $ 0,
     sql-counter [ inc ] [ get 0# ] bi ;
 
-M: postgresql-db bind% ( spec -- )
+M: postgresql-db-connection bind% ( spec -- )
     bind-name% 1, ;
 
-M: postgresql-db bind# ( spec object -- )
+M: postgresql-db-connection bind# ( spec object -- )
     [ bind-name% f swap type>> ] dip
     <literal-bind> 1, ;
 
@@ -162,7 +169,7 @@ M: postgresql-db bind# ( spec object -- )
         "_seq'');' language sql;" 0%
     ] query-make ;
 
-M: postgresql-db create-sql-statement ( class -- seq )
+M: postgresql-db-connection create-sql-statement ( class -- seq )
     [
         [ create-table-sql , ] keep
         dup db-assigned? [ create-function-sql , ] [ drop ] if
@@ -182,13 +189,13 @@ M: postgresql-db create-sql-statement ( class -- seq )
         "drop table " 0% 0% drop
     ] query-make ;
 
-M: postgresql-db drop-sql-statement ( class -- seq )
+M: postgresql-db-connection drop-sql-statement ( class -- seq )
     [
         [ drop-table-sql , ] keep
         dup db-assigned? [ drop-function-sql , ] [ drop ] if
     ] { } make ;
 
-M: postgresql-db <insert-db-assigned-statement> ( class -- statement )
+M: postgresql-db-connection <insert-db-assigned-statement> ( class -- statement )
     [
         "select add_" 0% 0%
         "(" 0%
@@ -198,7 +205,7 @@ M: postgresql-db <insert-db-assigned-statement> ( class -- statement )
         ");" 0%
     ] query-make ;
 
-M: postgresql-db <insert-user-assigned-statement> ( class -- statement )
+M: postgresql-db-connection <insert-user-assigned-statement> ( class -- statement )
     [
         "insert into " 0% 0%
         "(" 0%
@@ -221,10 +228,10 @@ M: postgresql-db <insert-user-assigned-statement> ( class -- statement )
         ");" 0%
     ] query-make ;
 
-M: postgresql-db insert-tuple-set-key ( tuple statement -- )
+M: postgresql-db-connection insert-tuple-set-key ( tuple statement -- )
     query-modify-tuple ;
 
-M: postgresql-db persistent-table ( -- hashtable )
+M: postgresql-db-connection persistent-table ( -- hashtable )
     H{
         { +db-assigned-id+ { "integer" "serial" f } }
         { +user-assigned-id+ { f f f } }
@@ -264,7 +271,7 @@ M: postgresql-db persistent-table ( -- hashtable )
     } ;
 
 ERROR: no-compound-found string object ;
-M: postgresql-db compound ( string object -- string' )
+M: postgresql-db-connection compound ( string object -- string' )
     over {
         { "default" [ first number>string " " glue ] }
         { "varchar" [ first number>string "(" ")" surround append ] }
index a96398ff2c88c93be25c58583ead3f50386a6927..2d7ea67107147ea23b6ae89e33a99780304d34fb 100644 (file)
@@ -3,7 +3,8 @@
 USING: accessors kernel math namespaces make sequences random
 strings math.parser math.intervals combinators math.bitwise
 nmake db db.tuples db.types classes words shuffle arrays
-destructors continuations db.tuples.private prettyprint ;
+destructors continuations db.tuples.private prettyprint
+db.private ;
 IN: db.queries
 
 GENERIC: where ( specs obj -- )
@@ -62,7 +63,7 @@ M: retryable execute-statement* ( statement type -- )
         dup column-name>> 0% " = " 0% bind%
     ] interleave ;
 
-M: db <update-tuple-statement> ( class -- statement )
+M: db-connection <update-tuple-statement> ( class -- statement )
     [
         "update " 0% 0%
         " set " 0%
@@ -142,7 +143,7 @@ M: string where ( spec obj -- ) object-where ;
 : where-clause ( tuple specs -- )
     dupd filter-slots [ drop ] [ many-where ] if-empty ;
 
-M: db <delete-tuples-statement> ( tuple table -- sql )
+M: db-connection <delete-tuples-statement> ( tuple table -- sql )
     [
         "delete from " 0% 0%
         where-clause
@@ -150,7 +151,7 @@ M: db <delete-tuples-statement> ( tuple table -- sql )
 
 ERROR: all-slots-ignored class ;
 
-M: db <select-by-slots-statement> ( tuple class -- statement )
+M: db-connection <select-by-slots-statement> ( tuple class -- statement )
     [
         "select " 0%
         [ dupd filter-ignores ] dip
@@ -185,13 +186,13 @@ M: db <select-by-slots-statement> ( tuple class -- statement )
         [ offset>> [ do-offset ] [ drop ] if* ]
     } 2cleave ;
 
-M: db query>statement ( query -- tuple )
+M: db-connection query>statement ( query -- tuple )
     [ tuple>> dup class ] keep
     [ <select-by-slots-statement> ] dip make-query* ;
 
 ! select ID, NAME, SCORE from EXAM limit 1 offset 3
 
-M: db <count-statement> ( query -- statement )
+M: db-connection <count-statement> ( query -- statement )
     [ tuple>> dup class ] keep
     [ [ "select count(*) from " 0% 0% where-clause ] query-make ]
     dip make-query* ;
index 1ec18260cd56268410af8e442c1d07b497ff25bc..b1bc9aa1a218933a4b93e79db6128d29c5e630df 100644 (file)
@@ -5,7 +5,8 @@ namespaces sequences db.sqlite.ffi db combinators
 continuations db.types calendar.format serialize
 io.streams.byte-array byte-arrays io.encodings.binary
 io.backend db.errors present urls io.encodings.utf8
-io.encodings.string accessors shuffle ;
+io.encodings.string accessors shuffle io prettyprint
+db.private ;
 IN: db.sqlite.lib
 
 ERROR: sqlite-error < db-error n string ;
@@ -16,7 +17,7 @@ ERROR: sqlite-sql-error < sql-error n string ;
 
 : sqlite-statement-error ( -- * )
     SQLITE_ERROR
-    db get handle>> sqlite3_errmsg sqlite-sql-error ;
+    db-connection get handle>> sqlite3_errmsg sqlite-sql-error ;
 
 : sqlite-check-result ( n -- )
     {
@@ -42,7 +43,7 @@ ERROR: sqlite-sql-error < sql-error n string ;
     sqlite3_bind_parameter_index ;
 
 : parameter-index ( handle name text -- handle name text )
-    >r dupd sqlite-bind-parameter-index r> ;
+    [ dupd sqlite-bind-parameter-index ] dip ;
 
 : sqlite-bind-text ( handle index text -- )
     utf8 encode dup length SQLITE_TRANSIENT
@@ -124,7 +125,8 @@ ERROR: sqlite-sql-error < sql-error n string ;
     ] if* (sqlite-bind-type) ;
 
 : sqlite-finalize ( handle -- ) sqlite3_finalize sqlite-check-result ;
-: sqlite-reset ( handle -- ) sqlite3_reset sqlite-check-result ;
+: sqlite-reset ( handle -- )
+"resetting: " write dup . sqlite3_reset sqlite-check-result ;
 : sqlite-clear-bindings ( handle -- )
     sqlite3_clear_bindings sqlite-check-result ;
 : sqlite-#columns ( query -- int ) sqlite3_column_count ;
@@ -166,7 +168,7 @@ ERROR: sqlite-sql-error < sql-error n string ;
 : sqlite-row ( handle -- seq )
     dup sqlite-#columns [ sqlite-column ] with map ;
 
-: sqlite-step-has-more-rows? ( prepared -- bool )
+: sqlite-step-has-more-rows? ( prepared -- ? )
     {
         { SQLITE_ROW [ t ] }
         { SQLITE_DONE [ f ] }
index fe95980bcf9658cad74a7ffd53691a1ef1eefc2b..6fb1cd19adccb262b943a4bbad49ccfaa90135e5 100644 (file)
@@ -1,10 +1,10 @@
-USING: io io.files io.launcher kernel namespaces
-prettyprint tools.test db.sqlite db sequences
+USING: io io.files io.files.temp io.directories io.launcher
+kernel namespaces prettyprint tools.test db.sqlite db sequences
 continuations db.types db.tuples unicode.case ;
 IN: db.sqlite.tests
 
-: db-path "test.db" temp-file ;
-: test.db db-path <sqlite-db> ;
+: db-path ( -- path ) "test.db" temp-file ;
+: test.db ( -- sqlite-db ) db-path <sqlite-db> ;
 
 [ ] [ [ db-path delete-file ] ignore-errors ] unit-test
 
index 32c5ca00752149fd24a07266188cc8083dc6f6f5..0f545030a33dc9d930b70aeeccf51cf24ca38b95 100644 (file)
@@ -6,33 +6,43 @@ sequences strings classes.tuple alien.c-types continuations
 db.sqlite.lib db.sqlite.ffi db.tuples words db.types combinators
 math.intervals io nmake accessors vectors math.ranges random
 math.bitwise db.queries destructors db.tuples.private interpolate
-io.streams.string multiline make ;
+io.streams.string multiline make db.private ;
 IN: db.sqlite
 
-TUPLE: sqlite-db < db path ;
+TUPLE: sqlite-db path ;
 
 : <sqlite-db> ( path -- sqlite-db )
-    sqlite-db new-db
+    sqlite-db new
         swap >>path ;
 
-M: sqlite-db db-open ( db -- db )
-    dup path>> sqlite-open >>handle ;
+<PRIVATE
 
-M: sqlite-db db-close ( handle -- ) sqlite-close ;
+TUPLE: sqlite-db-connection < db-connection ;
+
+: <sqlite-db-connection> ( handle -- db-connection )
+    sqlite-db-connection new-db-connection
+        swap >>handle ;
+
+PRIVATE>
+
+M: sqlite-db db-open ( db -- db-connection )
+    path>> sqlite-open <sqlite-db-connection> ;
+
+M: sqlite-db-connection db-close ( handle -- ) sqlite-close ;
 
 TUPLE: sqlite-statement < statement ;
 
 TUPLE: sqlite-result-set < result-set has-more? ;
 
-M: sqlite-db <simple-statement> ( str in out -- obj )
+M: sqlite-db-connection <simple-statement> ( str in out -- obj )
     <prepared-statement> ;
 
-M: sqlite-db <prepared-statement> ( str in out -- obj )
+M: sqlite-db-connection <prepared-statement> ( str in out -- obj )
     sqlite-statement new-statement ;
 
 : sqlite-maybe-prepare ( statement -- statement )
     dup handle>> [
-        db get handle>> over sql>> sqlite-prepare
+        db-connection get handle>> over sql>> sqlite-prepare
         >>handle
     ] unless ;
 
@@ -89,10 +99,10 @@ M: sqlite-statement bind-tuple ( tuple statement -- )
 ERROR: sqlite-last-id-fail ;
 
 : last-insert-id ( -- id )
-    db get handle>> sqlite3_last_insert_rowid
+    db-connection get handle>> sqlite3_last_insert_rowid
     dup zero? [ sqlite-last-id-fail ] when ;
 
-M: sqlite-db insert-tuple-set-key ( tuple statement -- )
+M: sqlite-db-connection insert-tuple-set-key ( tuple statement -- )
     execute-statement last-insert-id swap set-primary-key ;
 
 M: sqlite-result-set #columns ( result-set -- n )
@@ -116,7 +126,7 @@ M: sqlite-statement query-results ( query -- result-set )
     dup handle>> sqlite-result-set new-result-set
     dup advance-row ;
 
-M: sqlite-db create-sql-statement ( class -- statement )
+M: sqlite-db-connection create-sql-statement ( class -- statement )
     [
         dupd
         "create table " 0% 0%
@@ -135,10 +145,10 @@ M: sqlite-db create-sql-statement ( class -- statement )
         "));" 0%
     ] query-make ;
 
-M: sqlite-db drop-sql-statement ( class -- statement )
+M: sqlite-db-connection drop-sql-statement ( class -- statement )
     [ "drop table " 0% 0% ";" 0% drop ] query-make ;
 
-M: sqlite-db <insert-db-assigned-statement> ( tuple -- statement )
+M: sqlite-db-connection <insert-db-assigned-statement> ( tuple -- statement )
     [
         "insert into " 0% 0%
         "(" 0%
@@ -159,19 +169,19 @@ M: sqlite-db <insert-db-assigned-statement> ( tuple -- statement )
         ");" 0%
     ] query-make ;
 
-M: sqlite-db <insert-user-assigned-statement> ( tuple -- statement )
+M: sqlite-db-connection <insert-user-assigned-statement> ( tuple -- statement )
     <insert-db-assigned-statement> ;
 
-M: sqlite-db bind# ( spec obj -- )
+M: sqlite-db-connection bind# ( spec obj -- )
     [
         [ column-name>> ":" next-sql-counter surround dup 0% ]
         [ type>> ] bi
     ] dip <literal-bind> 1, ;
 
-M: sqlite-db bind% ( spec -- )
+M: sqlite-db-connection bind% ( spec -- )
     dup 1, column-name>> ":" prepend 0% ;
 
-M: sqlite-db persistent-table ( -- assoc )
+M: sqlite-db-connection persistent-table ( -- assoc )
     H{
         { +db-assigned-id+ { "integer" "integer" f } }
         { +user-assigned-id+ { f f f } }
@@ -306,7 +316,7 @@ M: sqlite-db persistent-table ( -- assoc )
         delete-trigger-restrict sqlite-trigger,
     ] if ;
 
-M: sqlite-db compound ( string seq -- new-string )
+M: sqlite-db-connection compound ( string seq -- new-string )
     over {
         { "default" [ first number>string " " glue ] }
         { "references" [
index 0432f3868381da552a5228240f38ee141e05e9f8..246946c7151717fc9887532c8d767cb6ece12f21 100644 (file)
@@ -1,10 +1,10 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io.files kernel tools.test db db.tuples classes
+USING: io.files io.files.temp kernel tools.test db db.tuples classes
 db.types continuations namespaces math math.ranges
 prettyprint calendar sequences db.sqlite math.intervals
 db.postgresql accessors random math.bitwise system
-math.ranges strings urls fry db.tuples.private ;
+math.ranges strings urls fry db.tuples.private db.private ;
 IN: db.tuples.tests
 
 : sqlite-db ( -- sqlite-db )
@@ -33,10 +33,10 @@ IN: db.tuples.tests
 
 ! These words leak resources, but are useful for interactivel testing 
 : sqlite-test-db ( -- )
-    sqlite-db db-open db set ;
+    sqlite-db db-open db-connection set ;
 
 : postgresql-test-db ( -- )
-    postgresql-db db-open db set ;
+    postgresql-db db-open db-connection set ;
 
 TUPLE: person the-id the-name the-number the-real
 ts date time blob factor-blob url ;
index 7a5c9e41e68b87d2c8e28cc9f7df0b16f143ed89..d2116058d8d8972f51742a0760861063c2c8e46a 100644 (file)
@@ -3,20 +3,20 @@
 USING: arrays assocs classes db kernel namespaces
 classes.tuple words sequences slots math accessors
 math.parser io prettyprint db.types continuations
-destructors mirrors sets db.types ;
+destructors mirrors sets db.types db.private ;
 IN: db.tuples
 
-HOOK: create-sql-statement db ( class -- object )
-HOOK: drop-sql-statement db ( class -- object )
+HOOK: create-sql-statement db-connection ( class -- object )
+HOOK: drop-sql-statement db-connection ( class -- object )
 
-HOOK: <insert-db-assigned-statement> db ( class -- object )
-HOOK: <insert-user-assigned-statement> db ( class -- object )
-HOOK: <update-tuple-statement> db ( class -- object )
-HOOK: <delete-tuples-statement> db ( tuple class -- object )
-HOOK: <select-by-slots-statement> db ( tuple class -- tuple )
-HOOK: <count-statement> db ( query -- statement )
-HOOK: query>statement db ( query -- statement )
-HOOK: insert-tuple-set-key db ( tuple statement -- )
+HOOK: <insert-db-assigned-statement> db-connection ( class -- object )
+HOOK: <insert-user-assigned-statement> db-connection ( class -- object )
+HOOK: <update-tuple-statement> db-connection ( class -- object )
+HOOK: <delete-tuples-statement> db-connection ( tuple class -- object )
+HOOK: <select-by-slots-statement> db-connection ( tuple class -- tuple )
+HOOK: <count-statement> db-connection ( query -- statement )
+HOOK: query>statement db-connection ( query -- statement )
+HOOK: insert-tuple-set-key db-connection ( tuple statement -- )
 
 <PRIVATE
 
@@ -52,12 +52,14 @@ GENERIC: eval-generator ( singleton -- object )
 
 : insert-db-assigned-statement ( tuple -- )
     dup class
-    db get insert-statements>> [ <insert-db-assigned-statement> ] cache
+    db-connection get insert-statements>>
+    [ <insert-db-assigned-statement> ] cache
     [ bind-tuple ] 2keep insert-tuple-set-key ;
 
 : insert-user-assigned-statement ( tuple -- )
     dup class
-    db get insert-statements>> [ <insert-user-assigned-statement> ] cache
+    db-connection get insert-statements>>
+    [ <insert-user-assigned-statement> ] cache
     [ bind-tuple ] keep execute-statement ;
 
 : do-select ( exemplar-tuple statement -- tuples )
@@ -117,7 +119,7 @@ M: tuple >query <query> swap >>tuple ;
 
 : update-tuple ( tuple -- )
     dup class
-    db get update-statements>> [ <update-tuple-statement> ] cache
+    db-connection get update-statements>> [ <update-tuple-statement> ] cache
     [ bind-tuple ] keep execute-statement ;
 
 : delete-tuples ( tuple -- )
index bd0b443fbe860f15a43ec36f41d1c49fe327f4fa..d5908740c611068609cdf53a840e4ec9bff70251 100644 (file)
@@ -41,12 +41,15 @@ HELP: +user-assigned-id+
 { $description "The user is responsible for choosing a primary key for tuples inserted with this database type. Keys must be unique or else the database will throw an error. Usually it is better to use a " { $link +db-assigned-id+ } "." } ;
 
 HELP: <generator-bind>
+{ $values { "slot-name" object } { "key" object } { "generator-singleton" object } { "type" object } { "generator-bind" generator-bind } }
 { $description "" } ;
 
 HELP: <literal-bind>
+{ $values { "key" object } { "type" object } { "value" object } { "literal-bind" literal-bind } }
 { $description "" } ;
 
 HELP: <low-level-binding>
+{ $values { "value" object } { "low-level-binding" low-level-binding } }
 { $description "" } ;
 
 HELP: BIG-INTEGER
index da9fe39b8065aeef2fac5558a2bdc2958657ea6d..33b89233476b5a19d558423366f2db19d051ddb0 100644 (file)
@@ -3,12 +3,12 @@
 USING: arrays assocs db kernel math math.parser
 sequences continuations sequences.deep prettyprint
 words namespaces slots slots.private classes mirrors
-classes.tuple combinators calendar.format symbols
-classes.singleton accessors quotations random ;
+classes.tuple combinators calendar.format classes.singleton
+accessors quotations random db.private ;
 IN: db.types
 
-HOOK: persistent-table db ( -- hash )
-HOOK: compound db ( string obj -- hash )
+HOOK: persistent-table db-connection ( -- hash )
+HOOK: compound db-connection ( string obj -- hash )
 
 TUPLE: sql-spec class slot-name column-name type primary-key modifiers ;
 
@@ -158,8 +158,8 @@ ERROR: no-sql-type type ;
     modifiers>> [ lookup-modifier ] map " " join
     [ "" ] [ " " prepend ] if-empty ;
 
-HOOK: bind% db ( spec -- )
-HOOK: bind# db ( spec obj -- )
+HOOK: bind% db-connection ( spec -- )
+HOOK: bind# db-connection ( spec obj -- )
 
 ERROR: no-column column ;
 
index 4e0c4e88405d05d9daa852ff9c4973b2693f09c1..1440e7ca5da422754efae1ffc6d2e517d385cf3d 100644 (file)
@@ -2,14 +2,14 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: slots arrays definitions generic hashtables summary io
 kernel math namespaces make prettyprint prettyprint.config
-sequences assocs sequences.private strings io.styles io.files
-vectors words system splitting math.parser classes.mixin
-classes.tuple continuations continuations.private combinators
-generic.math classes.builtin classes compiler.units
+sequences assocs sequences.private strings io.styles
+io.pathnames vectors words system splitting math.parser
+classes.mixin classes.tuple continuations continuations.private
+combinators generic.math classes.builtin classes compiler.units
 generic.standard vocabs init kernel.private io.encodings
 accessors math.order destructors source-files parser
 classes.tuple.parser effects.parser lexer compiler.errors
-generic.parser strings.parser ;
+generic.parser strings.parser vocabs.parser ;
 IN: debugger
 
 GENERIC: error. ( error -- )
index d1e7d31656e7847d710ee1820aa7f4dd821e2995..7d297af1ed1dd75b7e0d8ae39dd23726869b445f 100644 (file)
@@ -20,7 +20,7 @@ PROTOCOL: baz foo { bar 0 } { whoa 1 } ;
 CONSULT: baz goodbye these>> ;
 M: hello foo this>> ;
 M: hello bar hello-test ;
-M: hello whoa >r this>> r> + ;
+M: hello whoa [ this>> ] dip + ;
 
 GENERIC: bing ( c -- d )
 PROTOCOL: bee bing ;
index 57f9b35c96373bff90e534fd3023fbab35b06dbf..4da22441143e5a3a0766b83a0b420b74f8bf6285 100644 (file)
@@ -2,7 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors parser generic kernel classes classes.tuple
 words slots assocs sequences arrays vectors definitions
-math hashtables sets generalizations namespaces make ;
+math hashtables sets generalizations namespaces make
+words.symbol ;
 IN: delegate
 
 : protocol-words ( protocol -- words )
index 6b49c939c38ba2723479e702309382332d0afe44..53887bd3534f5335ab1526e0e91da49c63813619 100644 (file)
@@ -1,9 +1,9 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: parser lexer kernel namespaces sequences definitions
-io.files summary continuations tools.crossref tools.vocabs io
-prettyprint source-files assocs vocabs vocabs.loader io.backend
-splitting accessors ;
+io.files io.backend io.pathnames io summary continuations
+tools.crossref tools.vocabs prettyprint source-files assocs
+vocabs vocabs.loader splitting accessors ;
 IN: editors
 
 TUPLE: no-edit-hook ;
index c002c2fa759edffbc1587326ca129d0caa818486..0ffb4f7d9546a76b3cf95bbc311a4841d5939f1c 100644 (file)
@@ -1,6 +1,6 @@
 USING: definitions kernel parser words sequences math.parser
 namespaces editors io.launcher windows.shell32 io.files
-io.paths.windows strings unicode.case make ;
+io.directories.search.windows strings unicode.case make ;
 IN: editors.editpadlite
 
 : editpadlite-path ( -- path )
index 2a7f92f9329dcb6378472732882588c71a76726d..6c540b0e21ba86969195b6ce09503f50439fe2d3 100644 (file)
@@ -1,6 +1,6 @@
 USING: definitions kernel parser words sequences math.parser
 namespaces editors io.launcher windows.shell32 io.files
-io.paths.windows strings unicode.case make ;
+io.directories.search.windows strings unicode.case make ;
 IN: editors.editpadpro
 
 : editpadpro-path ( -- path )
index 9fa477f51a5f20be2b32a8ec028dafe6c08a5adf..cfcc42dced5424e6659aaa4a1b78b756f4750ed1 100644 (file)
@@ -1,5 +1,6 @@
 USING: editors io.files io.launcher kernel math.parser
-namespaces sequences windows.shell32 make io.paths.windows ;
+namespaces sequences windows.shell32 make
+io.directories.search.windows ;
 IN: editors.editplus
 
 : editplus-path ( -- path )
index fc3deae670d6ab4236f92719ff5419094bae8e23..f9460955783234770e4aa2b52de2602c88305d72 100644 (file)
@@ -1,5 +1,6 @@
 USING: editors io.files io.launcher kernel math.parser
-namespaces sequences windows.shell32 make io.paths.windows ;
+namespaces sequences windows.shell32 make
+io.directories.search.windows ;
 IN: editors.emeditor
 
 : emeditor-path ( -- path )
index c4b3ad35c1a0268022875b7216d78df6fcc45826..375559c20a05c2c71e4e17e9e84d083754be1576 100755 (executable)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Kibleur Christophe.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: editors io.files io.launcher kernel math.parser
-namespaces sequences windows.shell32 io.paths.windows make ;
+USING: editors io.files io.launcher kernel math.parser make
+namespaces sequences windows.shell32 io.directories.search.windows ;
 IN: editors.etexteditor
 
 : etexteditor-path ( -- str )
index 82b6bf199d0a2605730b4dc955f6a5175863e3b1..3e2a42e6e5619384f78f367d5b87a81a893688f3 100644 (file)
@@ -1,5 +1,4 @@
-USING: io.unix.backend kernel namespaces editors.gvim
-system ;
+USING: kernel namespaces editors.gvim system ;
 IN: editors.gvim.unix
 
 M: unix gvim-path
index 2f733f3c2f6dfe5927b5c931481c35ab1572bb27..b574e7f8249c35d86a9db5167f987d984aad5962 100644 (file)
@@ -1,5 +1,6 @@
-USING: editors.gvim io.files io.windows kernel namespaces
-sequences windows.shell32 io.paths.windows system ;
+USING: editors.gvim io.files kernel namespaces sequences
+windows.shell32 io.directories.search.windows system
+io.pathnames ;
 IN: editors.gvim.windows
 
 M: windows gvim-path
index fe9abc0e76b4640cb9f50f2f09583f926a235271..e34f0ce1756ca494feef99645e1ecbdb73a8a2fd 100644 (file)
@@ -4,7 +4,7 @@ USING: arrays definitions io kernel math
 namespaces parser prettyprint sequences strings words
 editors io.files io.sockets io.streams.byte-array io.binary
 math.parser io.encodings.ascii io.encodings.binary
-io.encodings.utf8 io.files.private ;
+io.encodings.utf8 io.files.private io.pathnames ;
 IN: editors.jedit
 
 : jedit-server-info ( -- port auth )
index e22de4f68d96d5fe6aa62e63bd4c4bad4dd73316..c21d5283dd04e09612acba92188e01d59582ba96 100644 (file)
@@ -1,10 +1,10 @@
 USING: editors io.files io.launcher kernel math.parser
-namespaces sequences windows.shell32 make ;
+namespaces sequences windows.shell32 make io.pathnames ;
 IN: editors.notepad2
 
 : notepad2-path ( -- path )
     \ notepad2-path get-global [
-        "C:\\Windows\\system32\\notepad.exe"
+        windows-directory "system32\\notepad.exe" append-path
     ] unless* ;
 
 : notepad2 ( file line -- )
index d68008c2ca21680dbd034c754575824ab894f2b0..5acaef10a727516b31208f07ebd6e6cda0bc9295 100644 (file)
@@ -1,5 +1,5 @@
 USING: editors io.files io.launcher kernel math.parser
-namespaces sequences io.paths.windows make ;
+namespaces sequences io.directories.search.windows make ;
 IN: editors.notepadpp
 
 : notepadpp-path ( -- path )
index e0b48a3e72b5f7aba591ba822f8a974d57a5e604..3bfd764b065b622461d6e7947a40f70b1ba18e23 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2007 Clemens F. Hofreither.
 ! See http://factorcode.org/license.txt for BSD license.
 ! clemens.hofreither@gmx.net
-USING: io.files io.launcher kernel namespaces io.paths.windows
+USING: io.files io.launcher kernel namespaces io.directories.search.windows
 math math.parser editors sequences make unicode.case ;
 IN: editors.scite
 
index 994dc60ba378faf6624b83eba8fa83f1c34c0e0e..41f5ff5fa50d247802781d12616cdb15d72b71e2 100644 (file)
@@ -1,5 +1,5 @@
 USING: editors io.files io.launcher kernel math.parser
-namespaces sequences io.paths.windows make ;
+namespaces sequences io.directories.search.windows make ;
 IN: editors.ted-notepad
 
 : ted-notepad-path ( -- path )
diff --git a/basis/editors/textpad/authors.txt b/basis/editors/textpad/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/editors/textpad/summary.txt b/basis/editors/textpad/summary.txt
new file mode 100644 (file)
index 0000000..c882050
--- /dev/null
@@ -0,0 +1 @@
+TextPad editor integration
diff --git a/basis/editors/textpad/tags.txt b/basis/editors/textpad/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/editors/textpad/textpad.factor b/basis/editors/textpad/textpad.factor
new file mode 100644 (file)
index 0000000..4963eab
--- /dev/null
@@ -0,0 +1,16 @@
+USING: editors io.files io.launcher kernel math.parser
+namespaces sequences make io.directories.search
+io.directories.search.windows ;
+IN: editors.textpad
+
+: textpad-path ( -- path )
+    \ textpad-path get-global [
+        "TextPad 5" t [ "TextPad.exe" tail? ] find-in-program-files
+    ] unless* ;
+
+: textpad ( file line -- )
+    [
+        textpad-path , [ , ] [ number>string "(" ",0)" surround , ] bi*
+    ] { } make run-detached drop ;
+
+[ textpad ] edit-hook set-global
index f1929ebf64a16f4280dac4fae1e78bc69096c68f..088d3cabbf93a860b1c864a732a2772e3990c214 100644 (file)
@@ -1,5 +1,5 @@
 USING: editors io.files io.launcher kernel math.parser
-namespaces sequences io.paths.windows make ;
+namespaces sequences io.directories.search.windows make ;
 IN: editors.ultraedit
 
 : ultraedit-path ( -- path )
index cf42884084d41a022cffa999d5653022be11226b..3387dc597108bccbdfda41cb4b056724f751b05d 100644 (file)
@@ -1,4 +1,5 @@
-USING: definitions help help.markup help.syntax io io.files editors words ;
+USING: definitions editors help help.markup help.syntax io io.files
+    io.pathnames words ;
 IN: editors.vim
 
 ARTICLE: { "vim" "vim" } "Vim support"
index fa0f6852ddcb96f1ee41a39630cf9bc08320cd3c..ef670d5d28f482006db8704c3684001517c13a6d 100644 (file)
@@ -1,4 +1,4 @@
-USING: editors io.launcher kernel io.paths.windows
+USING: editors io.launcher kernel io.directories.search.windows
 math.parser namespaces sequences io.files arrays ;
 IN: editors.wordpad
 
diff --git a/basis/formatting/authors.txt b/basis/formatting/authors.txt
new file mode 100644 (file)
index 0000000..e091bb8
--- /dev/null
@@ -0,0 +1 @@
+John Benediktsson
diff --git a/basis/formatting/formatting-docs.factor b/basis/formatting/formatting-docs.factor
new file mode 100644 (file)
index 0000000..8db3567
--- /dev/null
@@ -0,0 +1,129 @@
+
+USING: help.syntax help.markup kernel prettyprint sequences strings ;
+
+IN: formatting
+
+HELP: printf
+{ $values { "format-string" string } }
+{ $description 
+    "Writes the arguments (specified on the stack) formatted according to the format string.\n" 
+    "\n"
+    "Several format specifications exist for handling arguments of different types, and "
+    "specifying attributes for the result string, including such things as maximum width, "
+    "padding, and decimals.\n"
+    { $table
+        { "%%"      "Single %"                   "" }
+        { "%P.Ds"   "String format"              "string" }
+        { "%P.DS"   "String format uppercase"    "string" }
+        { "%c"      "Character format"           "char" } 
+        { "%C"      "Character format uppercase" "char" } 
+        { "%+Pd"    "Integer format"             "fixnum" }
+        { "%+P.De"  "Scientific notation"        "fixnum, float" }
+        { "%+P.DE"  "Scientific notation"        "fixnum, float" }
+        { "%+P.Df"  "Fixed format"               "fixnum, float" }
+        { "%+Px"    "Hexadecimal"                "hex" }
+        { "%+PX"    "Hexadecimal uppercase"      "hex" }
+    }
+    "\n"
+    "A plus sign ('+') is used to optionally specify that the number should be "
+    "formatted with a '+' preceeding it if positive.\n"
+    "\n"
+    "Padding ('P') is used to optionally specify the minimum width of the result "
+    "string, the padding character, and the alignment.  By default, the padding "
+    "character defaults to a space and the alignment defaults to right-aligned. "
+    "For example:\n"
+    { $list
+        "\"%5s\" formats a string padding with spaces up to 5 characters wide."
+        "\"%08d\" formats an integer padding with zeros up to 3 characters wide."
+        "\"%'#5f\" formats a float padding with '#' up to 3 characters wide."
+        "\"%-10d\" formats an integer to 10 characters wide and left-aligns." 
+    }
+    "\n"
+    "Digits ('D') is used to optionally specify the maximum digits in the result "
+    "string. For example:\n"
+    { $list 
+        "\"%.3s\" formats a string to truncate at 3 characters (from the left)."
+        "\"%.10f\" formats a float to pad-right with zeros up to 10 digits beyond the decimal point."
+        "\"%.5E\" formats a float into scientific notation with zeros up to 5 digits beyond the decimal point, but before the exponent."
+    }
+}
+{ $examples 
+    { $example
+        "USING: formatting ;"
+        "123 \"%05d\" printf"
+        "00123" }
+    { $example
+        "USING: formatting ;"
+        "HEX: ff \"%04X\" printf"
+        "00FF" }
+    { $example
+        "USING: formatting ;"
+        "1.23456789 \"%.3f\" printf"
+        "1.235" }
+    { $example 
+        "USING: formatting ;"
+        "1234567890 \"%.5e\" printf"
+        "1.23457e+09" }
+    { $example
+        "USING: formatting ;"
+        "12 \"%'#4d\" printf"
+        "##12" }
+    { $example
+        "USING: formatting ;"
+        "1234 \"%+d\" printf"
+        "+1234" }
+} ;
+
+HELP: sprintf
+{ $values { "format-string" string } { "result" string } }
+{ $description "Returns the arguments (specified on the stack) formatted according to the format string as a result string." } 
+{ $see-also printf } ;
+
+HELP: strftime
+{ $values { "format-string" string } }
+{ $description 
+    "Writes the timestamp (specified on the stack) formatted according to the format string.\n"
+    "\n"
+    "Different attributes of the timestamp can be retrieved using format specifications.\n"
+    { $table
+        { "%a"     "Abbreviated weekday name." }
+        { "%A"     "Full weekday name." }
+        { "%b"     "Abbreviated month name." }
+        { "%B"     "Full month name." }
+        { "%c"     "Date and time representation." }
+        { "%d"     "Day of the month as a decimal number [01,31]." }
+        { "%H"     "Hour (24-hour clock) as a decimal number [00,23]." }
+        { "%I"     "Hour (12-hour clock) as a decimal number [01,12]." }
+        { "%j"     "Day of the year as a decimal number [001,366]." }
+        { "%m"     "Month as a decimal number [01,12]." }
+        { "%M"     "Minute as a decimal number [00,59]." }
+        { "%p"     "Either AM or PM." }
+        { "%S"     "Second as a decimal number [00,59]." }
+        { "%U"     "Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]." }
+        { "%w"     "Weekday as a decimal number [0(Sunday),6]." }
+        { "%W"     "Week number of the year (Monday as the first day of the week) as a decimal number [00,53]." }
+        { "%x"     "Date representation." }
+        { "%X"     "Time representation." }
+        { "%y"     "Year without century as a decimal number [00,99]." }
+        { "%Y"     "Year with century as a decimal number." }
+        { "%Z"     "Time zone name (no characters if no time zone exists)." }
+        { "%%"     "A literal '%' character." }
+    } 
+} 
+{ $examples 
+    { $unchecked-example
+        "USING: calendar formatting io ;"
+        "now \"%c\" strftime print"
+        "Mon Dec 15 14:40:43 2008" }
+} ;
+
+ARTICLE: "formatting" "Formatted printing"
+"The " { $vocab-link "formatting" } " vocabulary is used for formatted printing.\n"
+{ $subsection printf }
+{ $subsection sprintf }
+{ $subsection strftime }
+;
+
+ABOUT: "formatting"
+
+
diff --git a/basis/formatting/formatting-tests.factor b/basis/formatting/formatting-tests.factor
new file mode 100644 (file)
index 0000000..8616325
--- /dev/null
@@ -0,0 +1,97 @@
+! Copyright (C) 2008 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: calendar kernel formatting tools.test ;
+
+IN: formatting.tests
+
+[ "%s" printf ] must-infer 
+[ "%s" sprintf ] must-infer
+
+[ t ] [ "" "" sprintf = ] unit-test
+[ t ] [ "asdf" "asdf" sprintf = ] unit-test
+[ t ] [ "10" 10 "%d" sprintf = ] unit-test
+[ t ] [ "+10" 10 "%+d" sprintf = ] unit-test
+[ t ] [ "-10" -10 "%d" sprintf = ] unit-test
+[ t ] [ "  -10" -10 "%5d" sprintf = ] unit-test
+[ t ] [ "-0010" -10 "%05d" sprintf = ] unit-test
+[ t ] [ "+0010" 10 "%+05d" sprintf = ] unit-test
+[ t ] [ "123.456000" 123.456 "%f" sprintf = ] unit-test
+[ t ] [ "2.44" 2.436 "%.2f" sprintf = ] unit-test
+[ t ] [ "123.10" 123.1 "%01.2f" sprintf = ] unit-test
+[ t ] [ "1.2346" 1.23456789 "%.4f" sprintf = ] unit-test
+[ t ] [ "  1.23" 1.23456789 "%6.2f" sprintf = ] unit-test
+[ t ] [ "1.234000e+08" 123400000 "%e" sprintf = ] unit-test
+[ t ] [ "-1.234000e+08" -123400000 "%e" sprintf = ] unit-test
+[ t ] [ "1.234567e+08" 123456700 "%e" sprintf = ] unit-test
+[ t ] [ "3.625e+08" 362525200 "%.3e" sprintf = ] unit-test
+[ t ] [ "2.500000e-03" 0.0025 "%e" sprintf = ] unit-test
+[ t ] [ "2.500000E-03" 0.0025 "%E" sprintf = ] unit-test
+[ t ] [ "   1.0E+01" 10 "%10.1E" sprintf = ] unit-test
+[ t ] [ "  -1.0E+01" -10 "%10.1E" sprintf = ] unit-test
+[ t ] [ "  -1.0E+01" -10 "%+10.1E" sprintf = ] unit-test
+[ t ] [ "  +1.0E+01" 10 "%+10.1E" sprintf = ] unit-test
+[ t ] [ "-001.0E+01" -10 "%+010.1E" sprintf = ] unit-test
+[ t ] [ "+001.0E+01" 10 "%+010.1E" sprintf = ] unit-test
+[ t ] [ "ff" HEX: ff "%x" sprintf = ] unit-test
+[ t ] [ "FF" HEX: ff "%X" sprintf = ] unit-test
+[ t ] [ "0f" HEX: f "%02x" sprintf = ] unit-test
+[ t ] [ "0F" HEX: f "%02X" sprintf = ] unit-test
+[ t ] [ "2008-09-10" 
+        2008 9 10 "%04d-%02d-%02d" sprintf = ] unit-test
+[ t ] [ "Hello, World!" 
+        "Hello, World!" "%s" sprintf = ] unit-test
+[ t ] [ "printf test" 
+        "printf test" sprintf = ] unit-test
+[ t ] [ "char a = 'a'"
+        CHAR: a "char %c = 'a'" sprintf = ] unit-test
+[ t ] [ "00" HEX: 0 "%02x" sprintf = ] unit-test
+[ t ] [ "ff" HEX: ff "%02x" sprintf = ] unit-test
+[ t ] [ "0 message(s)"
+        0 "message" "%d %s(s)" sprintf = ] unit-test
+[ t ] [ "0 message(s) with %"
+        0 "message" "%d %s(s) with %%" sprintf = ] unit-test
+[ t ] [ "justif: \"left      \""
+        "left" "justif: \"%-10s\"" sprintf = ] unit-test
+[ t ] [ "justif: \"     right\""
+        "right" "justif: \"%10s\"" sprintf = ] unit-test
+[ t ] [ " 3: 0003 zero padded" 
+        3 " 3: %04d zero padded" sprintf = ] unit-test
+[ t ] [ " 3: 3    left justif" 
+        3 " 3: %-4d left justif" sprintf = ] unit-test
+[ t ] [ " 3:    3 right justif" 
+        3 " 3: %4d right justif" sprintf = ] unit-test
+[ t ] [ " -3: -003 zero padded"
+        -3 " -3: %04d zero padded" sprintf = ] unit-test
+[ t ] [ " -3: -3   left justif"
+        -3 " -3: %-4d left justif" sprintf = ] unit-test
+[ t ] [ " -3:   -3 right justif"
+        -3 " -3: %4d right justif" sprintf = ] unit-test
+[ t ] [ "There are 10 monkeys in the kitchen" 
+        10 "kitchen" "There are %d monkeys in the %s" sprintf = ] unit-test
+[ f ] [ "%d" 10 "%d" sprintf = ] unit-test
+[ t ] [ "[monkey]" "monkey" "[%s]" sprintf = ] unit-test
+[ t ] [ "[    monkey]" "monkey" "[%10s]" sprintf = ] unit-test
+[ t ] [ "[monkey    ]" "monkey" "[%-10s]" sprintf = ] unit-test
+[ t ] [ "[0000monkey]" "monkey" "[%010s]" sprintf = ] unit-test
+[ t ] [ "[####monkey]" "monkey" "[%'#10s]" sprintf = ] unit-test
+[ t ] [ "[many monke]" "many monkeys" "[%10.10s]" sprintf = ] unit-test
+
+
+[ "%H:%M:%S" strftime ] must-infer
+
+: testtime ( -- timestamp )
+    2008 10 9 12 3 15 instant <timestamp> ;
+
+[ t ] [ "12:03:15" testtime "%H:%M:%S" strftime = ] unit-test
+[ t ] [ "12:03:15" testtime "%X" strftime = ] unit-test
+
+[ t ] [ "10/09/2008" testtime "%m/%d/%Y" strftime = ] unit-test
+[ t ] [ "10/09/2008" testtime "%x" strftime = ] unit-test
+
+[ t ] [ "Thu" testtime "%a" strftime = ] unit-test
+[ t ] [ "Thursday" testtime "%A" strftime = ] unit-test
+
+[ t ] [ "Oct" testtime "%b" strftime = ] unit-test
+[ t ] [ "October" testtime "%B" strftime = ] unit-test
+
diff --git a/basis/formatting/formatting.factor b/basis/formatting/formatting.factor
new file mode 100644 (file)
index 0000000..7dd8458
--- /dev/null
@@ -0,0 +1,186 @@
+! Copyright (C) 2008 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: accessors arrays ascii calendar combinators fry kernel 
+io io.encodings.ascii io.files io.streams.string
+macros math math.functions math.parser peg.ebnf quotations
+sequences splitting strings unicode.case vectors ;
+
+IN: formatting
+
+<PRIVATE
+
+: compose-all ( seq -- quot )
+    [ ] [ compose ] reduce ;
+
+: fix-sign ( string -- string )
+    dup CHAR: 0 swap index 0 = 
+      [ dup 0 swap [ [ CHAR: 0 = not ] keep digit? and ] find-from
+         [ dup 1- rot dup [ nth ] dip swap
+            {
+               { CHAR: - [ [ 1- ] dip remove-nth "-" prepend ] }
+               { CHAR: + [ [ 1- ] dip remove-nth "+" prepend ] }
+               [ drop swap drop ] 
+            } case 
+         ] [ drop ] if
+      ] when ;
+
+: >digits ( string -- digits ) 
+    [ 0 ] [ string>number ] if-empty ;
+
+: pad-digits ( string digits -- string' )
+    [ "." split1 ] dip [ CHAR: 0 pad-right ] [ head-slice ] bi "." glue ;
+
+: max-digits ( n digits -- n' )
+    10 swap ^ [ * round ] keep / ;
+
+: max-width ( string length -- string' ) 
+    short head ;
+
+: >exp ( x -- exp base )
+    [ 
+        abs 0 swap
+        [ dup [ 10.0 >= ] [ 1.0 < ] bi or ]
+        [ dup 10.0 >=
+          [ 10.0 / [ 1+ ] dip ]
+          [ 10.0 * [ 1- ] dip ] if
+        ] [ ] while 
+     ] keep 0 < [ neg ] when ;
+
+: exp>string ( exp base digits -- string )
+    [ max-digits ] keep -rot
+    [
+        [ 0 < "-" "+" ? ]
+        [ abs number>string 2 CHAR: 0 pad-left ] bi 
+        "e" -rot 3append
+    ]
+    [ number>string ] bi*
+    rot pad-digits prepend ;
+
+EBNF: parse-printf
+
+zero      = "0"                  => [[ CHAR: 0 ]]
+char      = "'" (.)              => [[ second ]]
+
+pad-char  = (zero|char)?         => [[ CHAR: \s or ]]
+pad-align = ("-")?               => [[ \ pad-right \ pad-left ? ]] 
+pad-width = ([0-9])*             => [[ >digits ]]
+pad       = pad-align pad-char pad-width => [[ reverse >quotation dup first 0 = [ drop [ ] ] when ]]
+
+sign      = ("+")?               => [[ [ dup CHAR: - swap index [ "+" prepend ] unless ] [ ] ? ]]
+
+width_    = "." ([0-9])*         => [[ second >digits '[ _ max-width ] ]]
+width     = (width_)?            => [[ [ ] or ]] 
+
+digits_   = "." ([0-9])*         => [[ second >digits ]]
+digits    = (digits_)?           => [[ 6 or ]]
+
+fmt-%     = "%"                  => [[ [ "%" ] ]] 
+fmt-c     = "c"                  => [[ [ 1string ] ]]
+fmt-C     = "C"                  => [[ [ 1string >upper ] ]]
+fmt-s     = "s"                  => [[ [ ] ]]
+fmt-S     = "S"                  => [[ [ >upper ] ]]
+fmt-d     = "d"                  => [[ [ >fixnum number>string ] ]]
+fmt-e     = digits "e"           => [[ first '[ >exp _ exp>string ] ]]
+fmt-E     = digits "E"           => [[ first '[ >exp _ exp>string >upper ] ]]
+fmt-f     = digits "f"           => [[ first dup '[ >float _ max-digits number>string _ pad-digits ] ]] 
+fmt-x     = "x"                  => [[ [ >hex ] ]]
+fmt-X     = "X"                  => [[ [ >hex >upper ] ]]
+unknown   = (.)*                 => [[ "Unknown directive" throw ]]
+
+strings_  = fmt-c|fmt-C|fmt-s|fmt-S
+strings   = pad width strings_   => [[ reverse compose-all ]]
+
+numbers_  = fmt-d|fmt-e|fmt-E|fmt-f|fmt-x|fmt-X
+numbers   = sign pad numbers_    => [[ unclip-last prefix compose-all [ fix-sign ] append ]]
+
+formats   = "%" (strings|numbers|fmt-%|unknown) => [[ second '[ _ dip ] ]]
+
+plain-text = (!("%").)+          => [[ >string '[ _ swap ] ]]
+
+text      = (formats|plain-text)* => [[ reverse [ [ [ push ] keep ] append ] map ]]
+
+;EBNF
+
+PRIVATE>
+
+MACRO: printf ( format-string -- )
+    parse-printf [ length ] keep compose-all '[ _ <vector> @ reverse [ write ] each ] ;
+
+: sprintf ( format-string -- result )
+    [ printf ] with-string-writer ; inline
+
+
+<PRIVATE
+
+: zero-pad ( str -- str' ) 2 CHAR: 0 pad-left ; inline
+
+: >time ( timestamp -- string )
+    [ hour>> ] [ minute>> ] [ second>> floor ] tri 3array
+    [ number>string zero-pad ] map ":" join ; inline
+
+: >date ( timestamp -- string )
+    [ month>> ] [ day>> ] [ year>> ] tri 3array
+    [ number>string zero-pad ] map "/" join ; inline
+
+: >datetime ( timestamp -- string )
+    { [ day-of-week day-abbreviation3 ]
+      [ month>> month-abbreviation ]
+      [ day>> number>string zero-pad ]
+      [ >time ]
+      [ year>> number>string ]
+    } cleave 3array [ 2array ] dip append " " join ; inline
+
+: (week-of-year) ( timestamp day -- n )
+    [ dup clone 1 >>month 1 >>day day-of-week dup ] dip > [ 7 swap - ] when
+    [ day-of-year ] dip 2dup < [ 0 2nip ] [ - 7 / 1+ >fixnum ] if ;
+
+: week-of-year-sunday ( timestamp -- n ) 0 (week-of-year) ; inline
+
+: week-of-year-monday ( timestamp -- n ) 1 (week-of-year) ; inline
+
+EBNF: parse-strftime
+
+fmt-%     = "%"                  => [[ [ "%" ] ]]
+fmt-a     = "a"                  => [[ [ dup day-of-week day-abbreviation3 ] ]]
+fmt-A     = "A"                  => [[ [ dup day-of-week day-name ] ]]
+fmt-b     = "b"                  => [[ [ dup month>> month-abbreviation ] ]]
+fmt-B     = "B"                  => [[ [ dup month>> month-name ] ]]
+fmt-c     = "c"                  => [[ [ dup >datetime ] ]]
+fmt-d     = "d"                  => [[ [ dup day>> number>string zero-pad ] ]]
+fmt-H     = "H"                  => [[ [ dup hour>> number>string zero-pad ] ]]
+fmt-I     = "I"                  => [[ [ dup hour>> dup 12 > [ 12 - ] when number>string zero-pad ] ]]
+fmt-j     = "j"                  => [[ [ dup day-of-year number>string ] ]]
+fmt-m     = "m"                  => [[ [ dup month>> number>string zero-pad ] ]]
+fmt-M     = "M"                  => [[ [ dup minute>> number>string zero-pad ] ]]
+fmt-p     = "p"                  => [[ [ dup hour>> 12 < "AM" "PM" ? ] ]]
+fmt-S     = "S"                  => [[ [ dup second>> round number>string zero-pad ] ]]
+fmt-U     = "U"                  => [[ [ dup week-of-year-sunday ] ]]
+fmt-w     = "w"                  => [[ [ dup day-of-week number>string ] ]]
+fmt-W     = "W"                  => [[ [ dup week-of-year-monday ] ]]
+fmt-x     = "x"                  => [[ [ dup >date ] ]]
+fmt-X     = "X"                  => [[ [ dup >time ] ]]
+fmt-y     = "y"                  => [[ [ dup year>> 100 mod number>string ] ]]
+fmt-Y     = "Y"                  => [[ [ dup year>> number>string ] ]]
+fmt-Z     = "Z"                  => [[ [ "Not yet implemented" throw ] ]]
+unknown   = (.)*                 => [[ "Unknown directive" throw ]]
+
+formats_  = fmt-%|fmt-a|fmt-A|fmt-b|fmt-B|fmt-c|fmt-d|fmt-H|fmt-I|
+            fmt-j|fmt-m|fmt-M|fmt-p|fmt-S|fmt-U|fmt-w|fmt-W|fmt-x|
+            fmt-X|fmt-y|fmt-Y|fmt-Z|unknown
+
+formats   = "%" (formats_)       => [[ second '[ _ dip ] ]]
+
+plain-text = (!("%").)+          => [[ >string '[ _ swap ] ]]
+
+text      = (formats|plain-text)* => [[ reverse [ [ [ push ] keep ] append ] map ]]
+
+;EBNF
+
+PRIVATE>
+
+MACRO: strftime ( format-string -- )
+    parse-strftime [ length ] keep [ ] join
+    '[ _ <vector> @ reverse concat nip ] ;
+
+
diff --git a/basis/formatting/summary.txt b/basis/formatting/summary.txt
new file mode 100644 (file)
index 0000000..da1aa31
--- /dev/null
@@ -0,0 +1 @@
+Format data according to a specified format string, and writes (or returns) the result string.  
index 1dff0942bd301327bbb077ef6cf1d90bf5e37401..d91f44aecb603cd0a59ff829bbcb5ca34cc7afc3 100644 (file)
@@ -20,7 +20,7 @@ HELP: '[
 { $examples "See " { $link "fry.examples" } "." } ;\r
 \r
 HELP: >r/r>-in-fry-error\r
-{ $error-description "Thrown by " { $link POSTPONE: '[ } " if the fried quotation contains calls to " { $link >r } " or " { $link r> } ". Explicit retain stack manipulation of this form does not work with fry; use " { $link dip } " instead." } ;\r
+{ $error-description "Thrown by " { $link POSTPONE: '[ } " if the fried quotation contains calls to retain stack manipulation primitives." } ;\r
 \r
 ARTICLE: "fry.examples" "Examples of fried quotations"\r
 "The easiest way to understand fried quotations is to look at some examples."\r
index 0137e8be22b7d159aef81da677225a751f30cac4..71894503945c43cd91b6944faef4b49f56543a00 100644 (file)
@@ -56,7 +56,7 @@ sequences eval accessors ;
     3 '[ [ [ _ 1array ] call 1array ] call 1array ] call
 ] unit-test
 
-[ "USING: fry kernel ; f '[ >r _ r> ]" eval ]
+[ "USING: fry locals.backend ; f '[ load-local _ ]" eval ]
 [ error>> >r/r>-in-fry-error? ] must-fail-with
 
 [ { { "a" 1 } { "b" 2 } { "c" 3 } { "d" 4 } } ] [
index f84ad233cd8b5c1b9420e3efb0eb950b3d209fe8..e62a42749fef2a8313d58a91a2131381c9887274 100644 (file)
@@ -25,7 +25,7 @@ M: >r/r>-in-fry-error summary
     "Explicit retain stack manipulation is not permitted in fried quotations" ;
 
 : check-fry ( quot -- quot )
-    dup { >r r> load-locals get-local drop-locals } intersect
+    dup { load-local load-locals get-local drop-locals } intersect
     empty? [ >r/r>-in-fry-error ] unless ;
 
 PREDICATE: fry-specifier < word { _ @ } memq? ;
index 9c82cdbb509b29e91de1adf7a7becd183a679823..ac21bb8f78b39aa1d1a824e2b2de656cc3f102a0 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays classes.singleton combinators
 continuations io io.encodings.binary io.encodings.utf8
-io.files io.sockets kernel io.streams.duplex math
+io.files io.pathnames io.sockets kernel io.streams.duplex math
 math.parser sequences splitting namespaces strings fry ftp
 ftp.client.listing-parser urls ;
 IN: ftp.client
@@ -104,7 +104,3 @@ ERROR: ftp-error got expected ;
         [ nip parent-directory ftp-cwd drop ]
         [ file-name (ftp-get) ] 2bi
     ] with-ftp-client ;
-
-
-
-
index 04e96ed77ab088edc1d39f4ad0591b0acfce411b..6183165b3adda6736a8e2d466bd34153e9fc51ee 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors combinators io.files kernel math.parser
+USING: accessors combinators io.files.types kernel math.parser
 sequences splitting ;
 IN: ftp.client.listing-parser
 
index b0ec340202aa176290ea0216a93b10369fb7bf4c..f6d5013ed0078f02764f2a9f5e1fb19c404ff522 100644 (file)
@@ -2,12 +2,13 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: combinators.short-circuit accessors combinators io
 io.encodings.8-bit io.encodings io.encodings.binary
-io.encodings.utf8 io.files io.sockets kernel math.parser
-namespaces make sequences ftp io.unix.launcher.parser
-unicode.case splitting assocs classes io.servers.connection
-destructors calendar io.timeouts io.streams.duplex threads
-continuations math concurrency.promises byte-arrays
-io.backend tools.hexdump tools.files io.streams.string ;
+io.encodings.utf8 io.files io.files.info io.directories
+io.pathnames io.sockets kernel math.parser namespaces make
+sequences ftp io.launcher.unix.parser unicode.case splitting
+assocs classes io.servers.connection destructors calendar
+io.timeouts io.streams.duplex threads continuations math
+concurrency.promises byte-arrays io.backend tools.hexdump
+tools.files io.streams.string math.bitwise ;
 IN: ftp.server
 
 TUPLE: ftp-client url mode state command-promise user password ;
@@ -48,7 +49,7 @@ C: <ftp-list> ftp-list
     [ >>raw ] [ tokenize-command >>tokenized ] bi ;
 
 : (send-response) ( n string separator -- )
-    rot number>string write write ftp-send ;
+    [ number>string write ] 2dip write ftp-send ;
 
 : send-response ( ftp-response -- )
     [ n>> ] [ strings>> ] bi
@@ -101,7 +102,7 @@ ERROR: type-error type ;
 : handle-TYPE ( obj -- )
     [
         tokenized>> second parse-type
-        200 "Switching to " rot " mode" 3append server-response
+        [ 200 ] dip "Switching to " " mode" surround server-response
     ] [
         2drop "TYPE is binary only" ftp-error
     ] recover ;
@@ -110,11 +111,11 @@ ERROR: type-error type ;
     remote-address get class new 0 >>port binary <server> ;
 
 : port>bytes ( port -- hi lo )
-    [ -8 shift ] keep [ HEX: ff bitand ] bi@ ;
+    [ -8 shift ] keep [ 8 bits ] bi@ ;
 
 : handle-PWD ( obj -- )
     drop
-    257 current-directory get "\"" "\"" surround server-response ;
+    257 current-directory get "\"" dup surround server-response ;
 
 : handle-SYST ( obj -- )
     drop
@@ -154,15 +155,19 @@ M: ftp-list service-command ( stream obj -- )
     finish-directory ;
 
 : transfer-outgoing-file ( path -- )
-    150 "Opening BINARY mode data connection for "
-    rot   
-    [ file-name ] [
-        " " swap  file-info size>> number>string
-        "(" " bytes)." surround append
-    ] bi 3append server-response ;
+    [
+        150
+        "Opening BINARY mode data connection for "
+    ] dip
+    [
+        file-name
+    ] [
+        file-info size>> number>string
+        "(" " bytes)." surround
+    ] bi " " glue append server-response ;
 
 : transfer-incoming-file ( path -- )
-    150 "Opening BINARY mode data connection for " rot append
+    [ 150 ] dip "Opening BINARY mode data connection for " prepend
     server-response ;
 
 : finish-file-transfer ( -- )
@@ -208,8 +213,9 @@ M: ftp-put service-command ( stream obj -- )
 
 : handle-SIZE ( obj -- )
     [
+        [ 213 ] dip
         tokenized>> second file-info size>>
-        213 swap number>string server-response
+        number>string server-response
     ] [
         2drop
         550 "Could not get file size" server-response
@@ -227,21 +233,20 @@ M: ftp-put service-command ( stream obj -- )
 
 : handle-PASV ( obj -- )
     drop client get passive >>mode drop
-    expect-connection
-    [
-        "Entering Passive Mode (127,0,0,1," %
-        port>bytes [ number>string ] bi@ "," glue %
-        ")" %
-    ] "" make 227 swap server-response ;
+    221
+    expect-connection port>bytes [ number>string ] bi@ "," glue
+    "Entering Passive Mode (127,0,0,1," ")" surround
+    server-response ;
 
 : handle-EPSV ( obj -- )
     drop
     client get command-promise>> [
         "You already have a passive stream" ftp-error
     ] [
-        229 "Entering Extended Passive Mode (|||"
+        229
         expect-connection number>string
-        "|)" 3append server-response
+        "Entering Extended Passive Mode (|||" "|)" surround
+        server-response
     ] if ;
 
 ! LPRT 6,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,242,186
index 2029c0cf2526e6672cb5dab84a26443834a07f07..28bedc836020b27a9fa80b963ab9cd7979764afe 100644 (file)
@@ -3,7 +3,8 @@
 USING: kernel quotations classes.tuple make combinators generic
 words interpolate namespaces sequences io.streams.string fry
 classes.mixin effects lexer parser classes.tuple.parser
-effects.parser locals.types locals.parser locals.rewrite.closures ;
+effects.parser locals.types locals.parser
+locals.rewrite.closures vocabs.parser ;
 IN: functors
 
 : scan-param ( -- obj )
index f108428c901b09817d4e428c2120800365813be4..f21fc237a8ff4564ff207f9dd697cd3737387269 100644 (file)
@@ -5,7 +5,7 @@ HELP: init-furnace-tables
 { $description "Initializes database tables used by asides, conversations and session management. This word must be invoked inside a " { $link with-db } " scope." } ;
 
 HELP: <alloy>
-{ $values { "responder" "a responder" } { "db" db } { "responder'" "an alloy responder" } }
+{ $values { "responder" "a responder" } { "db" "a database descriptor" } { "responder'" "an alloy responder" } }
 { $description "Wraps the responder with support for asides, conversations, sessions and database persistence." }
 { $examples
     "The " { $vocab-link "webapps.counter" } " vocabulary uses an alloy to configure the counter:"
@@ -21,7 +21,7 @@ HELP: <alloy>
 } ;
 
 HELP: start-expiring
-{ $values { "db" db } }
+{ $values { "db" "a database descriptor" } }
 { $description "Starts a timer which expires old session state from the given database." } ;
 
 ARTICLE: "furnace.alloy" "Furnace alloy responder"
index e7e722344a07d573b7849919a8b5c1f53334ce24..4a03d59581992848a8187c8380ba9402ef66ff1c 100644 (file)
@@ -1,5 +1,5 @@
 USING: assocs classes help.markup help.syntax kernel
-quotations strings words furnace.auth.providers.db
+quotations strings words words.symbol furnace.auth.providers.db
 checksums.sha2 furnace.auth.providers math byte-arrays
 http multiline ;
 IN: furnace.auth
index 3bcd82a15dbb7b127abb3f414c5131bede3732a5..de7650d9ef2da9accdeb6ce1343084de475f2552 100644 (file)
@@ -5,7 +5,7 @@ furnace.auth.login
 furnace.auth.providers\r
 furnace.auth.providers.db tools.test\r
 namespaces db db.sqlite db.tuples continuations\r
-io.files accessors kernel ;\r
+io.files io.files.temp io.directories accessors kernel ;\r
 \r
 <action> "test" <login-realm> realm set\r
 \r
index 8ab70ded7b1c7d1ae4016d151bbed48e5635cdd2..1c320182bf39c30b2fe6ac2f4dafa3e88b87fdb3 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays kernel combinators assocs
 namespaces sequences splitting words
-fry urls multiline present qualified
+fry urls multiline present
 xml
 xml.data
 xml.entities
@@ -32,7 +32,7 @@ IN: furnace.chloe-tags
     [ [ "/" ?tail drop "/" ] dip present 3append ] when* ;
 
 : a-url ( href rest query value-name -- url )
-    dup [ >r 3drop r> value ] [
+    dup [ [ 3drop ] dip value ] [
         drop
         <url>
             swap parse-query-attr >>query
index 4ad2c8a249b699d518d915d9c3d42d2e75b59c37..2b644ef4229d57137a6094ab944a4470f6262ddb 100644 (file)
@@ -1,5 +1,5 @@
 USING: help.markup help.syntax urls http words kernel
-furnace.sessions furnace.db ;
+furnace.sessions furnace.db words.symbol ;
 IN: furnace.conversations
 
 HELP: <conversations>
index a7ef02b77f545cca678c8f01240b3eb1622b789e..c64356c812e20eecc561cf9d341cf11226c7292e 100644 (file)
@@ -3,7 +3,7 @@ IN: furnace.db
 
 HELP: <db-persistence>
 { $values
-     { "responder" "a responder" } { "db" db }
+     { "responder" "a responder" } { "db" "a database descriptor" }
      { "responder'" db-persistence }
 }
 { $description "Wraps a responder with database persistence support. The responder's " { $link call-responder* } " method will run in a " { $link with-db } " scope." } ;
index ed18e42a4fe8c767aa26d34ffd8eff65dc91a432..d771d1d2d79abb6329f67c839233b9460a357438 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.\r
 ! See http://factorcode.org/license.txt for BSD license.\r
 USING: kernel accessors continuations namespaces destructors\r
-db db.pools io.pools http.server http.server.filters ;\r
+db db.private db.pools io.pools http.server http.server.filters ;\r
 IN: furnace.db\r
 \r
 TUPLE: db-persistence < filter-responder pool ;\r
@@ -12,6 +12,6 @@ TUPLE: db-persistence < filter-responder pool ;
 M: db-persistence call-responder*\r
     [\r
         pool>> [ acquire-connection ] keep\r
-        [ return-connection-later ] [ drop db set ] 2bi\r
+        [ return-connection-later ] [ drop db-connection set ] 2bi\r
     ]\r
     [ call-next-method ] bi ;\r
index fd3671fa1c8ede95f2cd8be8a9750f2f98eeafa0..b70ec0ae57f022fe978655fd929e9fee22b8a9f1 100644 (file)
@@ -10,8 +10,8 @@ HELP: <redirect>
 { $values { "url" url } { "response" response } }
 { $description "Creates a response which redirects the client to the given URL." } ;
 
-HELP: <secure-only> ( responder -- responder' )
-{ $values { "responder" "a responder" } { "responder'" "a responder" } }
+HELP: <secure-only>
+{ $values { "responder" "a responder" } { "secure-only" "a responder" } }
 { $description "Creates a new responder which ensures that the client is connecting via HTTPS before delegating to the underlying responder. If the client is connecting via HTTP, a redirect is sent instead." } ;
 
 HELP: <secure-redirect>
index 959d6b69b81c0ef05161fdf60196dc13b6d2a34e..7a4de18eafe8346f1752522c6a7027e326899f02 100644 (file)
@@ -1,4 +1,6 @@
-USING: help.markup help.syntax io.streams.string quotations strings calendar serialize kernel furnace.db words kernel ;
+USING: help.markup help.syntax io.streams.string quotations
+strings calendar serialize kernel furnace.db words words.symbol
+kernel ;
 IN: furnace.sessions
 
 HELP: <sessions>
index 907e657125b514e65ba2107003929b1beb24d35c..14cdce3811b908e6ea111dbea459c053c74e3f70 100644 (file)
@@ -2,9 +2,9 @@ IN: furnace.sessions.tests
 USING: tools.test http furnace.sessions furnace.actions\r
 http.server http.server.responses math namespaces make kernel\r
 accessors io.sockets io.servers.connection prettyprint\r
-io.streams.string io.files splitting destructors sequences db\r
-db.tuples db.sqlite continuations urls math.parser furnace\r
-furnace.utilities ;\r
+io.streams.string io.files io.files.temp io.directories\r
+splitting destructors sequences db db.tuples db.sqlite\r
+continuations urls math.parser furnace furnace.utilities ;\r
 \r
 : with-session\r
     [\r
index 3b3a98eabd17b470045a12b5477fd3c2d055de92..e68c0ede1ac4d86e9d6df4e2db1f7ece26d9b465 100644 (file)
@@ -20,7 +20,7 @@ ARTICLE: "grouping" "Groups and clumps"
         { $unchecked-example "dup n groups concat sequence= ." "t" }
     }
     { "With clumps, collecting the first element of each subsequence but the last one, together with the last subseqence, yields the original sequence:"
-        { $unchecked-example "dup n clumps unclip-last >r [ first ] map r> append sequence= ." "t" }
+        { $unchecked-example "dup n clumps unclip-last [ [ first ] map ] dip append sequence= ." "t" }
     }
 } ;
 
index 0fa20b41fc43b63918a6c20cc0892625bfbb11b2..b4d4c08d42dbb00c4e5bcae887f23aa073ed0dc7 100644 (file)
@@ -8,7 +8,8 @@ IN: grouping
 
 TUPLE: chunking-seq { seq read-only } { n read-only } ;
 
-: check-groups dup 0 <= [ "Invalid group count" throw ] when ; inline
+: check-groups ( n -- n )
+    dup 0 <= [ "Invalid group count" throw ] when ; inline
 
 : new-groups ( seq n class -- groups )
     [ check-groups ] dip boa ; inline
index e28eb3007a4e148bebb82a5a9f3f8297cdf351c1..8fa6a274e7e65aa4cae36b22eb1d111fbea3bda3 100644 (file)
@@ -61,7 +61,7 @@ IN: heaps.tests
         random-alist
         <min-heap> [ heap-push-all ] keep
         dup data>> clone swap
-    ] keep 3 /i [ 2dup >r delete-random r> heap-delete ] times
+    ] keep 3 /i [ 2dup [ delete-random ] dip heap-delete ] times
     data>>
     [ [ key>> ] map ] bi@
     [ natural-sort ] bi@ ;
index ba95a9f249d201ba841cb53c7ee5029bf07f62a0..aa1ebf77865cca0dc8f05a2bebbc2986156ddace 100644 (file)
@@ -87,7 +87,8 @@ M: heap heap-size ( heap -- n )
 
 GENERIC: heap-compare ( pair1 pair2 heap -- ? )
 
-: (heap-compare) drop [ key>> ] compare ; inline
+: (heap-compare) ( pair1 pair2 heap -- <=> )
+    drop [ key>> ] compare ; inline
 
 M: min-heap heap-compare (heap-compare) +gt+ eq? ;
 
index e72fbb439c125baeb80edb1d09303c890c097bed..0d435a1eaf098731d5c9ff0150c4f5e810e15ce8 100644 (file)
@@ -360,7 +360,7 @@ ARTICLE: "cookbook-pitfalls" "Pitfalls to avoid"
 { $list
     "Factor only makes use of one native thread, and Factor threads are scheduled co-operatively. C library calls block the entire VM."
     "Factor does not hide anything from the programmer, all internals are exposed. It is your responsibility to avoid writing fragile code which depends too much on implementation detail."
-    { "When a source file uses two vocabularies which define words with the same name, the order of the vocabularies in the " { $link POSTPONE: USE: } " or " { $link POSTPONE: USING: } " forms is important. The parser prints warnings when vocabularies shadow words from other vocabularies; see " { $link "vocabulary-search-shadow" } ". The " { $vocab-link "qualified" } " vocabulary implements qualified naming, which can be used to resolve ambiguities." }
+    { "When a source file uses two vocabularies which define words with the same name, the order of the vocabularies in the " { $link POSTPONE: USE: } " or " { $link POSTPONE: USING: } " forms is important. The " { $link POSTPONE: QUALIFIED: } " word implements qualified naming, which can be used to resolve ambiguities." }
     { "If a literal object appears in a word definition, the object itself is pushed on the stack when the word executes, not a copy. If you intend to mutate this object, you must " { $link clone } " it first. See " { $link "syntax-literals" } "." }
     { "For a discussion of potential issues surrounding the " { $link f } " object, see " { $link "booleans" } "." }
     { "Factor's object system is quite flexible. Careless usage of union, mixin and predicate classes can lead to similar problems to those caused by ``multiple inheritance'' in other languages. In particular, it is possible to have two classes such that they have a non-empty intersection and yet neither is a subclass of the other. If a generic word defines methods on two such classes, various disambiguation rules are applied to ensure method dispatch remains deterministic, however they may not be what you expect. See " { $link "method-order" } " for details." }
index cc36e9faab9f27b7949407dca6a907b54d7977e1..69c20468349b8a709326d4b0ef86cf5e8648be27 100644 (file)
@@ -168,6 +168,11 @@ ARTICLE: "io" "Input and output"
 { $heading "Streams" }
 { $subsection "streams" }
 { $subsection "io.files" }
+{ $heading "The file system" }
+{ $subsection "io.pathnames" }
+{ $subsection "io.files.info" }
+{ $subsection "io.files.links" }
+{ $subsection "io.directories" }
 { $heading "Encodings" }
 { $subsection "encodings-introduction" }
 { $subsection "io.encodings" }
index 5d12438e0d4b1bdf459c0e94b1e4c29355ea295c..cd80a73dad59a3309a94a74ff5879bd231c5523d 100644 (file)
@@ -1,10 +1,11 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays io io.styles kernel namespaces make
-parser prettyprint sequences words assocs definitions generic
-quotations effects slots continuations classes.tuple debugger
-combinators vocabs help.stylesheet help.topics help.crossref
-help.markup sorting classes vocabs.loader ;
+parser prettyprint sequences words words.symbol assocs
+definitions generic quotations effects slots continuations
+classes.tuple debugger combinators vocabs help.stylesheet
+help.topics help.crossref help.markup sorting classes
+vocabs.loader ;
 IN: help
 
 GENERIC: word-help* ( word -- content )
index a9df0bea811e49a37f554a217db98d8d387e8cdf..ec52264643e52a76a73812ef55cb1cf76f5c1955 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: io.encodings.utf8 io.encodings.ascii io.encodings.binary
-io.files html.streams html.elements help kernel
+io.files io.files.temp io.directories html.streams html.elements help kernel
 assocs sequences make words accessors arrays help.topics vocabs
 tools.vocabs tools.vocabs.browser namespaces prettyprint io
 vocabs.loader serialize fry memoize unicode.case math.order
index fbebc7f0f6b0661bc35f649f51425c9c7dbf2442..9d4de09a8715c1cc9f7552cf470fc0cb9cef956d 100644 (file)
@@ -5,7 +5,8 @@ help.topics words strings classes tools.vocabs namespaces make
 io io.streams.string prettyprint definitions arrays vectors
 combinators combinators.short-circuit splitting debugger
 hashtables sorting effects vocabs vocabs.loader assocs editors
-continuations classes.predicate macros math sets eval ;
+continuations classes.predicate macros math sets eval
+vocabs.parser words.symbol ;
 IN: help.lint
 
 : check-example ( element -- )
@@ -43,9 +44,9 @@ IN: help.lint
 
 : check-values ( word element -- )
     {
+        [ drop { [ symbol? ] [ macro? ] [ parsing-word? ] } 1|| ]
         [ drop "declared-effect" word-prop not ]
         [ nip contains-funky-elements? ]
-        [ drop macro? ]
         [
             [ effect-values >array ]
             [ extract-values >array ]
@@ -59,7 +60,7 @@ IN: help.lint
     ] each ;
 
 : vocab-exists? ( name -- ? )
-    dup vocab swap "all-vocabs" get member? or ;
+    [ vocab ] [ "all-vocabs" get member? ] bi or ;
 
 : check-modules ( element -- )
     \ $vocab-link swap elements [
index a7501dc242615256f9d926c04a7930e7d4ecfc08..bf933cd9f12008335ab84d6972b77812cd7f71ea 100644 (file)
@@ -3,8 +3,7 @@
 USING: accessors arrays definitions generic io kernel assocs
 hashtables namespaces make parser prettyprint sequences strings
 io.styles vectors words math sorting splitting classes slots
-vocabs help.stylesheet help.topics vocabs.loader alias
-quotations ;
+vocabs help.stylesheet help.topics vocabs.loader quotations ;
 IN: help.markup
 
 ! Simple markup language.
index 9a372174ba581d4f371111a56dfcfd3f79319f82..9f98ba6d8d607949dcef701a3a758ef9d74a5fbd 100644 (file)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays kernel parser sequences words help
-help.topics namespaces vocabs definitions compiler.units ;
+help.topics namespaces vocabs definitions compiler.units
+vocabs.parser ;
 IN: help.syntax
 
 : HELP:
index 240acf74b1fa073672d34158b5f30fbe3f555402..b6af773ce523389cb13e2c041617ba8762f32726 100644 (file)
@@ -3,7 +3,8 @@
 USING: parser words definitions kernel sequences assocs arrays
 kernel.private fry combinators accessors vectors strings sbufs
 byte-arrays byte-vectors io.binary io.streams.string splitting
-math generic generic.standard generic.standard.engines classes ;
+math generic generic.standard generic.standard.engines classes
+hashtables ;
 IN: hints
 
 GENERIC: specializer-predicate ( spec -- quot )
@@ -50,14 +51,10 @@ M: object specializer-declaration class ;
     ] [ drop f ] if ;
 
 : specialized-def ( word -- quot )
-    dup def>> swap {
-        {
-            [ dup "specializer" word-prop ]
-            [ "specializer" word-prop specialize-quot ]
-        }
-        { [ dup standard-method? ] [ specialize-method ] }
-        [ drop ]
-    } cond ;
+    [ def>> ] keep
+    [ dup standard-method? [ specialize-method ] [ drop ] if ]
+    [ "specializer" word-prop [ specialize-quot ] when* ]
+    bi ;
 
 : specialized-length ( specializer -- n )
     dup [ array? ] all? [ first ] when length ;
@@ -120,3 +117,7 @@ M: object specializer-declaration class ;
 \ >le { { fixnum fixnum } { bignum fixnum } } "specializer" set-word-prop
 
 \ >be { { bignum fixnum } { fixnum fixnum } } "specializer" set-word-prop
+
+\ hashtable \ at* method { { fixnum hashtable } { word hashtable } } "specializer" set-word-prop
+
+\ hashtable \ set-at method { { object fixnum object } { object word object } } "specializer" set-word-prop
index 1f2975bce1923ce0b40ea940d367b8a277a3a918..f6408d3b5917e82ac2f9da0a9daeae9b3b0316f2 100644 (file)
@@ -4,8 +4,8 @@ html.templates html.templates.chloe.syntax
 html.templates.chloe.compiler html.templates.chloe.components
 math xml.data strings quotations namespaces ;
 
-HELP: <chloe> ( path -- template )
-{ $values { "path" "a pathname string without the trailing " { $snippet ".xml" } " extension" } { "template" chloe } }
+HELP: <chloe>
+{ $values { "path" "a pathname string without the trailing " { $snippet ".xml" } " extension" } { "chloe" chloe } }
 { $description "Creates a new Chloe template object which can be passed to " { $link call-template } "." } ;
 
 HELP: required-attr
index 73cc239a56de12a63b391214a042e514c2c3e07b..c3c1ec2b9e29172f966eb9693565705f43b84be5 100644 (file)
@@ -2,9 +2,9 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors kernel sequences combinators kernel fry
 namespaces make classes.tuple assocs splitting words arrays io
-io.files io.encodings.utf8 io.streams.string unicode.case
-mirrors math urls present multiline quotations xml logging
-continuations
+io.files io.files.info io.encodings.utf8 io.streams.string
+unicode.case mirrors math urls present multiline quotations xml
+logging continuations
 xml.data
 html.forms
 html.elements
index c302a581abec2774dce146a043fa893835f03caf..e775651cbca6c9c0979394ab089d46988421c606 100644 (file)
@@ -1,7 +1,7 @@
 IN: html.templates.fhtml
 USING: help.markup help.syntax ;
 
-HELP: <fhtml> ( path -- fhtml )
+HELP: <fhtml>
 { $values { "path" "a pathname string" } { "fhtml" fhtml } }
 { $description "Creates an FHTML template descriptor." } ;
 
index 7742ff9bc6369aa303ae48fe2545f929fc5963d7..992b6600704e61eeead4472f4166e255febfa98e 100644 (file)
@@ -3,7 +3,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: continuations sequences kernel namespaces debugger
 combinators math quotations generic strings splitting
-accessors assocs fry
+accessors assocs fry vocabs.parser
 parser lexer io io.files io.streams.string io.encodings.utf8
 html.elements
 html.templates ;
index 7a35ba812b351c72d66f0d4b38783c0d76c97c4b..7031f5d16cee3edcbdd6a63d3f5e865ece9cf6a7 100644 (file)
@@ -1,4 +1,4 @@
-USING: http help.markup help.syntax io.files io.streams.string
+USING: http help.markup help.syntax io.pathnames io.streams.string
 io.encodings.8-bit io.encodings.binary kernel strings urls
 urls.encoding byte-arrays strings assocs sequences ;
 IN: http.client
index 108ae5ecc4c28bbbea3f2441288f8ff48fc09088..fc6e296a4f04694504a6e7c5cf3c0ac540d39b0e 100644 (file)
@@ -1,17 +1,12 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors assocs kernel math math.parser namespaces make
-sequences io io.sockets io.streams.string io.files io.timeouts
-strings splitting calendar continuations accessors vectors
+sequences strings splitting calendar continuations accessors vectors
 math.order hashtables byte-arrays destructors
-io.encodings
-io.encodings.string
-io.encodings.ascii
-io.encodings.utf8
-io.encodings.8-bit
-io.encodings.binary
-io.streams.duplex
-fry ascii urls urls.encoding present
+io io.sockets io.streams.string io.files io.timeouts
+io.pathnames io.encodings io.encodings.string io.encodings.ascii
+io.encodings.utf8 io.encodings.8-bit io.encodings.binary
+io.streams.duplex fry ascii urls urls.encoding present
 http http.parsers ;
 IN: http.client
 
index 6e93d5ee3acbab7592cb6a1dea7b824d0c9ddf29..92a296c2d3ef6f225a2bf88192cf9f1c2aec0df2 100644 (file)
@@ -179,7 +179,7 @@ Set-Cookie: oo="bar; a=b"; comment="your mom"; httponly=yes
 ! Live-fire exercise
 USING: http.server http.server.static furnace.sessions furnace.alloy
 furnace.actions furnace.auth furnace.auth.login furnace.db http.client
-io.servers.connection io.files io io.encodings.ascii
+io.servers.connection io.files io.files.temp io.directories io io.encodings.ascii
 accessors namespaces threads
 http.server.responses http.server.redirection furnace.redirection
 http.server.dispatchers db.tuples ;
index bbb0335ae43a7126617a4b947899e4d733329d92..0aeb771c11ad2bbb1c8740054ea3ce2c5989920c 100644 (file)
@@ -8,7 +8,7 @@ calendar.format present urls
 io io.encodings io.encodings.iana io.encodings.binary
 io.encodings.8-bit
 
-unicode.case unicode.categories qualified
+unicode.case unicode.categories
 
 http.parsers ;
 
index 12183f1b2528da7bea382b9a22a14a943b2eff60..29f61416fa1fd003d4f9d1592b6dd2d520356278 100644 (file)
@@ -4,8 +4,8 @@ IN: http.server
 HELP: trivial-responder
 { $description "The class of trivial responders, which output the same response for every request. New instances are created by calling " { $link <trivial-responder> } "." } ;
 
-HELP: <trivial-responder> ( response -- responder )
-{ $values { "response" response } { "responder" trivial-responder } }
+HELP: <trivial-responder>
+{ $values { "response" response } { "trivial-responder" trivial-responder } }
 { $description "Creates a new trivial responder which outputs the same response for every request." } ;
 
 HELP: benchmark?
index 0bc644d019dc109b22bbd38bb4f3dd02614b8895..b19bf2ae55be4d9a6911b92a3a63ab987aba4747 100644 (file)
@@ -1,14 +1,11 @@
 ! Copyright (C) 2004, 2008 Slava Pestov.\r
 ! See http://factorcode.org/license.txt for BSD license.\r
-USING: calendar io io.files kernel math math.order\r
-math.parser namespaces parser sequences strings\r
-assocs hashtables debugger mime.types sorting logging\r
-calendar.format accessors splitting\r
-io.encodings.binary fry xml.entities destructors urls\r
-html.elements html.templates.fhtml\r
-http\r
-http.server\r
-http.server.responses\r
+USING: calendar kernel math math.order math.parser namespaces\r
+parser sequences strings assocs hashtables debugger mime.types\r
+sorting logging calendar.format accessors splitting io io.files\r
+io.files.info io.directories io.pathnames io.encodings.binary\r
+fry xml.entities destructors urls html.elements\r
+html.templates.fhtml http http.server http.server.responses\r
 http.server.redirection ;\r
 IN: http.server.static\r
 \r
diff --git a/basis/io/backend/unix/authors.txt b/basis/io/backend/unix/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/backend/unix/bsd/authors.txt b/basis/io/backend/unix/bsd/authors.txt
new file mode 100755 (executable)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/backend/unix/bsd/bsd.factor b/basis/io/backend/unix/bsd/bsd.factor
new file mode 100644 (file)
index 0000000..e0a675a
--- /dev/null
@@ -0,0 +1,13 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: namespaces system kernel accessors assocs continuations
+unix io.backend io.backend.unix io.backend.unix.multiplexers
+io.backend.unix.multiplexers.kqueue io.files.unix ;
+IN: io.backend.unix.bsd
+
+M: bsd init-io ( -- )
+    <kqueue-mx> mx set-global ;
+
+! M: bsd (monitor) ( path recursive? mailbox -- )
+!     swap [ "Recursive kqueue monitors not supported" throw ] when
+!     <vnode-monitor> ;
diff --git a/basis/io/backend/unix/bsd/tags.txt b/basis/io/backend/unix/bsd/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/freebsd/freebsd.factor b/basis/io/backend/unix/freebsd/freebsd.factor
new file mode 100644 (file)
index 0000000..1c0471b
--- /dev/null
@@ -0,0 +1,3 @@
+USING: io.backend.unix.bsd io.backend system ;
+
+freebsd set-io-backend
diff --git a/basis/io/backend/unix/freebsd/tags.txt b/basis/io/backend/unix/freebsd/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/linux/authors.txt b/basis/io/backend/unix/linux/authors.txt
new file mode 100755 (executable)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/backend/unix/linux/linux.factor b/basis/io/backend/unix/linux/linux.factor
new file mode 100644 (file)
index 0000000..54b20d1
--- /dev/null
@@ -0,0 +1,11 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel system namespaces io.files.unix io.backend
+io.backend.unix io.backend.unix.multiplexers
+io.backend.unix.multiplexers.epoll ;
+IN: io.backend.unix.linux
+
+M: linux init-io ( -- )
+    <epoll-mx> mx set-global ;
+
+linux set-io-backend
diff --git a/basis/io/backend/unix/linux/tags.txt b/basis/io/backend/unix/linux/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/macosx/macosx.factor b/basis/io/backend/unix/macosx/macosx.factor
new file mode 100644 (file)
index 0000000..e669875
--- /dev/null
@@ -0,0 +1,10 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: io.backend system namespaces io.backend.unix.bsd
+io.backend.unix.multiplexers io.backend.unix.multiplexers.run-loop ;
+IN: io.backend.macosx
+
+M: macosx init-io ( -- )
+    <run-loop-mx> mx set-global ;
+
+macosx set-io-backend
diff --git a/basis/io/backend/unix/macosx/tags.txt b/basis/io/backend/unix/macosx/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/multiplexers/epoll/authors.txt b/basis/io/backend/unix/multiplexers/epoll/authors.txt
new file mode 100755 (executable)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/backend/unix/multiplexers/epoll/epoll.factor b/basis/io/backend/unix/multiplexers/epoll/epoll.factor
new file mode 100644 (file)
index 0000000..a91f62f
--- /dev/null
@@ -0,0 +1,66 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types kernel destructors bit-arrays
+sequences assocs struct-arrays math namespaces locals fry unix
+unix.linux.epoll unix.time io.ports io.backend.unix
+io.backend.unix.multiplexers ;
+IN: io.backend.unix.multiplexers.epoll
+
+TUPLE: epoll-mx < mx events ;
+
+: max-events ( -- n )
+    #! We read up to 256 events at a time. This is an arbitrary
+    #! constant...
+    256 ; inline
+
+: <epoll-mx> ( -- mx )
+    epoll-mx new-mx
+        max-events epoll_create dup io-error >>fd
+        max-events "epoll-event" <struct-array> >>events ;
+
+M: epoll-mx dispose fd>> close-file ;
+
+: make-event ( fd events -- event )
+    "epoll-event" <c-object>
+    [ set-epoll-event-events ] keep
+    [ set-epoll-event-fd ] keep ;
+
+:: do-epoll-ctl ( fd mx what events -- )
+    mx fd>> what fd fd events make-event epoll_ctl io-error ;
+
+: do-epoll-add ( fd mx events -- )
+    EPOLL_CTL_ADD swap EPOLLONESHOT bitor do-epoll-ctl ;
+
+: do-epoll-del ( fd mx events -- )
+    EPOLL_CTL_DEL swap do-epoll-ctl ;
+
+M: epoll-mx add-input-callback ( thread fd mx -- )
+    [ EPOLLIN do-epoll-add ] [ call-next-method ] 2bi ;
+
+M: epoll-mx add-output-callback ( thread fd mx -- )
+    [ EPOLLOUT do-epoll-add ] [ call-next-method ] 2bi ;
+
+M: epoll-mx remove-input-callbacks ( fd mx -- seq )
+    2dup reads>> key? [
+        [ call-next-method ] [ EPOLLIN do-epoll-del ] 2bi
+    ] [ 2drop f ] if ;
+
+M: epoll-mx remove-output-callbacks ( fd mx -- seq )
+    2dup writes>> key? [
+        [ EPOLLOUT do-epoll-del ] [ call-next-method ] 2bi
+    ] [ 2drop f ] if ;
+
+: wait-event ( mx us -- n )
+    [ [ fd>> ] [ events>> ] bi [ underlying>> ] [ length ] bi ] [ 1000 /i ] bi*
+    epoll_wait multiplexer-error ;
+
+: handle-event ( event mx -- )
+    [ epoll-event-fd ] dip
+    [ EPOLLIN EPOLLOUT bitor do-epoll-del ]
+    [ input-available ] [ output-available ] 2tri ;
+
+: handle-events ( mx n -- )
+    [ dup events>> ] dip head-slice swap '[ _ handle-event ] each ;
+
+M: epoll-mx wait-for-events ( us mx -- )
+    swap 60000000 or dupd wait-event handle-events ;
diff --git a/basis/io/backend/unix/multiplexers/epoll/tags.txt b/basis/io/backend/unix/multiplexers/epoll/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/multiplexers/kqueue/authors.txt b/basis/io/backend/unix/multiplexers/kqueue/authors.txt
new file mode 100755 (executable)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/backend/unix/multiplexers/kqueue/kqueue.factor b/basis/io/backend/unix/multiplexers/kqueue/kqueue.factor
new file mode 100644 (file)
index 0000000..2a66489
--- /dev/null
@@ -0,0 +1,76 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types combinators destructors
+io.backend.unix kernel math.bitwise sequences struct-arrays unix
+unix.kqueue unix.time assocs io.backend.unix.multiplexers ;
+IN: io.backend.unix.multiplexers.kqueue
+
+TUPLE: kqueue-mx < mx events ;
+
+: max-events ( -- n )
+    #! We read up to 256 events at a time. This is an arbitrary
+    #! constant...
+    256 ; inline
+
+: <kqueue-mx> ( -- mx )
+    kqueue-mx new-mx
+        kqueue dup io-error >>fd
+        max-events "kevent" <struct-array> >>events ;
+
+M: kqueue-mx dispose fd>> close-file ;
+
+: make-kevent ( fd filter flags -- event )
+    "kevent" <c-object>
+    [ set-kevent-flags ] keep
+    [ set-kevent-filter ] keep
+    [ set-kevent-ident ] keep ;
+
+: register-kevent ( kevent mx -- )
+    fd>> swap 1 f 0 f kevent io-error ;
+
+M: kqueue-mx add-input-callback ( thread fd mx -- )
+    [ call-next-method ] [
+        [ EVFILT_READ { EV_ADD EV_ONESHOT } flags make-kevent ] dip
+        register-kevent
+    ] 2bi ;
+
+M: kqueue-mx add-output-callback ( thread fd mx -- )
+    [ call-next-method ] [
+        [ EVFILT_WRITE { EV_ADD EV_ONESHOT } flags make-kevent ] dip
+        register-kevent
+    ] 2bi ;
+
+M: kqueue-mx remove-input-callbacks ( fd mx -- seq )
+    2dup reads>> key? [
+        [ call-next-method ] [
+            [ EVFILT_READ EV_DELETE make-kevent ] dip
+            register-kevent
+        ] 2bi
+    ] [ 2drop f ] if ;
+
+M: kqueue-mx remove-output-callbacks ( fd mx -- seq )
+    2dup writes>> key? [
+        [
+            [ EVFILT_WRITE EV_DELETE make-kevent ] dip
+            register-kevent
+        ] [ call-next-method ] 2bi
+    ] [ 2drop f ] if ;
+
+: wait-kevent ( mx timespec -- n )
+    [
+        [ fd>> f 0 ]
+        [ events>> [ underlying>> ] [ length ] bi ] bi
+    ] dip kevent multiplexer-error ;
+
+: handle-kevent ( mx kevent -- )
+    [ kevent-ident swap ] [ kevent-filter ] bi {
+        { EVFILT_READ [ input-available ] }
+        { EVFILT_WRITE [ output-available ] }
+    } case ;
+
+: handle-kevents ( mx n -- )
+    [ dup events>> ] dip head-slice [ handle-kevent ] with each ;
+
+M: kqueue-mx wait-for-events ( us mx -- )
+    swap dup [ make-timespec ] when
+    dupd wait-kevent handle-kevents ;
diff --git a/basis/io/backend/unix/multiplexers/kqueue/tags.txt b/basis/io/backend/unix/multiplexers/kqueue/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/multiplexers/multiplexers.factor b/basis/io/backend/unix/multiplexers/multiplexers.factor
new file mode 100644 (file)
index 0000000..844670d
--- /dev/null
@@ -0,0 +1,35 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel accessors assocs sequences threads ;
+IN: io.backend.unix.multiplexers
+
+TUPLE: mx fd reads writes ;
+
+: new-mx ( class -- obj )
+    new
+        H{ } clone >>reads
+        H{ } clone >>writes ; inline
+
+GENERIC: add-input-callback ( thread fd mx -- )
+
+M: mx add-input-callback reads>> push-at ;
+
+GENERIC: add-output-callback ( thread fd mx -- )
+
+M: mx add-output-callback writes>> push-at ;
+
+GENERIC: remove-input-callbacks ( fd mx -- callbacks )
+
+M: mx remove-input-callbacks reads>> delete-at* drop ;
+
+GENERIC: remove-output-callbacks ( fd mx -- callbacks )
+
+M: mx remove-output-callbacks writes>> delete-at* drop ;
+
+GENERIC: wait-for-events ( ms mx -- )
+
+: input-available ( fd mx -- )
+    reads>> delete-at* drop [ resume ] each ;
+
+: output-available ( fd mx -- )
+    writes>> delete-at* drop [ resume ] each ;
diff --git a/basis/io/backend/unix/multiplexers/run-loop/run-loop.factor b/basis/io/backend/unix/multiplexers/run-loop/run-loop.factor
new file mode 100644 (file)
index 0000000..84a6096
--- /dev/null
@@ -0,0 +1,33 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel arrays namespaces math accessors alien locals
+destructors system threads io.backend.unix.multiplexers
+io.backend.unix.multiplexers.kqueue core-foundation
+core-foundation.run-loop ;
+IN: io.backend.unix.multiplexers.run-loop
+
+TUPLE: run-loop-mx kqueue-mx ;
+
+: file-descriptor-callback ( -- callback )
+    "void" { "CFFileDescriptorRef" "CFOptionFlags" "void*" }
+    "cdecl" [
+        3drop
+        0 mx get kqueue-mx>> wait-for-events
+        reset-run-loop
+        yield
+    ] alien-callback ;
+
+: <run-loop-mx> ( -- mx )
+    [
+        <kqueue-mx> |dispose
+        dup fd>> file-descriptor-callback add-fd-to-run-loop
+        run-loop-mx boa
+    ] with-destructors ;
+
+M: run-loop-mx add-input-callback kqueue-mx>> add-input-callback ;
+M: run-loop-mx add-output-callback kqueue-mx>> add-output-callback ;
+M: run-loop-mx remove-input-callbacks kqueue-mx>> remove-input-callbacks ;
+M: run-loop-mx remove-output-callbacks kqueue-mx>> remove-output-callbacks ;
+
+M: run-loop-mx wait-for-events ( us mx -- )
+    swap run-one-iteration [ 0 swap wait-for-events ] [ drop ] if ;
diff --git a/basis/io/backend/unix/multiplexers/run-loop/tags.txt b/basis/io/backend/unix/multiplexers/run-loop/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/multiplexers/select/authors.txt b/basis/io/backend/unix/multiplexers/select/authors.txt
new file mode 100755 (executable)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/backend/unix/multiplexers/select/select.factor b/basis/io/backend/unix/multiplexers/select/select.factor
new file mode 100644 (file)
index 0000000..c62101e
--- /dev/null
@@ -0,0 +1,56 @@
+! Copyright (C) 2004, 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.c-types kernel bit-arrays sequences assocs unix
+math namespaces accessors math.order locals unix.time fry
+io.ports io.backend.unix io.backend.unix.multiplexers ;
+IN: io.backend.unix.multiplexers.select
+
+TUPLE: select-mx < mx read-fdset write-fdset ;
+
+! Factor's bit-arrays are an array of bytes, OS X expects
+! FD_SET to be an array of cells, so we have to account for
+! byte order differences on big endian platforms
+: munge ( i -- i' )
+    little-endian? [ BIN: 11000 bitxor ] unless ; inline
+
+: <select-mx> ( -- mx )
+    select-mx new-mx
+        FD_SETSIZE 8 * <bit-array> >>read-fdset
+        FD_SETSIZE 8 * <bit-array> >>write-fdset ;
+
+: clear-nth ( n seq -- ? )
+    [ nth ] [ [ f ] 2dip set-nth ] 2bi ;
+
+:: check-fd ( fd fdset mx quot -- )
+    fd munge fdset clear-nth [ fd mx quot call ] when ; inline
+
+: check-fdset ( fds fdset mx quot -- )
+    [ check-fd ] 3curry each ; inline
+
+: init-fdset ( fds fdset -- )
+    '[ t swap munge _ set-nth ] each ;
+
+: read-fdset/tasks ( mx -- seq fdset )
+    [ reads>> keys ] [ read-fdset>> ] bi ;
+
+: write-fdset/tasks ( mx -- seq fdset )
+    [ writes>> keys ] [ write-fdset>> ] bi ;
+
+: max-fd ( assoc -- n )
+    dup assoc-empty? [ drop 0 ] [ keys supremum ] if ;
+
+: num-fds ( mx -- n )
+    [ reads>> max-fd ] [ writes>> max-fd ] bi max 1+ ;
+
+: init-fdsets ( mx -- nfds read write except )
+    [ num-fds ]
+    [ read-fdset/tasks [ init-fdset ] [ underlying>> ] bi ]
+    [ write-fdset/tasks [ init-fdset ] [ underlying>> ] bi ] tri
+    f ;
+
+M:: select-mx wait-for-events ( us mx -- )
+    mx
+    [ init-fdsets us dup [ make-timeval ] when select multiplexer-error drop ]
+    [ [ read-fdset/tasks ] keep [ input-available ] check-fdset ]
+    [ [ write-fdset/tasks ] keep [ output-available ] check-fdset ]
+    tri ;
diff --git a/basis/io/backend/unix/multiplexers/select/tags.txt b/basis/io/backend/unix/multiplexers/select/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/netbsd/netbsd.factor b/basis/io/backend/unix/netbsd/netbsd.factor
new file mode 100644 (file)
index 0000000..a47be30
--- /dev/null
@@ -0,0 +1,3 @@
+USING: io.backend.unix.bsd io.backend system ;
+
+netbsd set-io-backend
diff --git a/basis/io/backend/unix/netbsd/tags.txt b/basis/io/backend/unix/netbsd/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/openbsd/openbsd.factor b/basis/io/backend/unix/openbsd/openbsd.factor
new file mode 100644 (file)
index 0000000..a9e2513
--- /dev/null
@@ -0,0 +1,3 @@
+USING: io.backend.unix.bsd io.backend system ;
+
+openbsd set-io-backend
diff --git a/basis/io/backend/unix/openbsd/tags.txt b/basis/io/backend/unix/openbsd/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/summary.txt b/basis/io/backend/unix/summary.txt
new file mode 100644 (file)
index 0000000..8f66d88
--- /dev/null
@@ -0,0 +1 @@
+Non-blocking I/O and sockets on Unix-like systems
diff --git a/basis/io/backend/unix/tags.txt b/basis/io/backend/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/unix/unix-tests.factor b/basis/io/backend/unix/unix-tests.factor
new file mode 100644 (file)
index 0000000..5417b9b
--- /dev/null
@@ -0,0 +1,140 @@
+USING: io.files io.files.temp io.directories io.sockets io kernel threads
+namespaces tools.test continuations strings byte-arrays
+sequences prettyprint system io.encodings.binary io.encodings.ascii
+io.streams.duplex destructors make ;
+IN: io.backend.unix.tests
+
+! Unix domain stream sockets
+: socket-server "unix-domain-socket-test" temp-file ;
+
+[
+    [ socket-server delete-file ] ignore-errors
+
+    socket-server <local>
+    ascii <server> [
+        accept drop [
+            "Hello world" print flush
+            readln "XYZ" = "FOO" "BAR" ? print flush
+        ] with-stream
+    ] with-disposal
+
+    socket-server delete-file
+] "Test" spawn drop
+
+yield
+
+[ { "Hello world" "FOO" } ] [
+    [
+        socket-server <local> ascii [
+            readln ,
+            "XYZ" print flush
+            readln ,
+        ] with-client
+    ] { } make
+] unit-test
+
+: datagram-server "unix-domain-datagram-test" temp-file ;
+: datagram-client "unix-domain-datagram-test-2" temp-file ;
+
+! Unix domain datagram sockets
+[ datagram-server delete-file ] ignore-errors
+[ datagram-client delete-file ] ignore-errors
+
+[
+    [
+        datagram-server <local> <datagram> "d" set
+
+        "Receive 1" print
+
+        "d" get receive [ reverse ] dip
+        
+        "Send 1" print
+        dup .
+
+        "d" get send
+
+        "Receive 2" print
+
+        "d" get receive [ " world" append ] dip
+        
+        "Send 1" print
+        dup .
+
+         "d" get send
+
+        "d" get dispose
+
+        "Done" print
+
+        datagram-server delete-file
+    ] with-scope
+] "Test" spawn drop
+
+yield
+
+[ datagram-client delete-file ] ignore-errors
+
+datagram-client <local> <datagram>
+"d" set
+
+[ ] [
+    "hello" >byte-array
+    datagram-server <local>
+    "d" get send
+] unit-test
+
+[ "olleh" t ] [
+    "d" get receive
+    datagram-server <local> =
+    [ >string ] dip
+] unit-test
+
+[ ] [
+    "hello" >byte-array
+    datagram-server <local>
+    "d" get send
+] unit-test
+
+[ "hello world" t ] [
+    "d" get receive
+    datagram-server <local> =
+    [ >string ] dip
+] unit-test
+
+[ ] [ "d" get dispose ] unit-test
+
+! Test error behavior
+: another-datagram "unix-domain-datagram-test-3" temp-file ;
+
+[ another-datagram delete-file ] ignore-errors
+
+datagram-client delete-file
+
+[ ] [ datagram-client <local> <datagram> "d" set ] unit-test
+
+[ B{ 1 2 3 } another-datagram <local> "d" get send ] must-fail
+
+[ ] [ "d" get dispose ] unit-test
+
+! See what happens on send/receive after close
+
+[ "d" get receive ] must-fail
+
+[ B{ 1 2 } datagram-server <local> "d" get send ] must-fail
+
+! Invalid parameter tests
+
+[
+    image binary [ input-stream get accept ] with-file-reader
+] must-fail
+
+[
+    image binary [ input-stream get receive ] with-file-reader
+] must-fail
+
+[
+    image binary [
+        B{ 1 2 } datagram-server <local>
+        input-stream get send
+    ] with-file-reader
+] must-fail
diff --git a/basis/io/backend/unix/unix.factor b/basis/io/backend/unix/unix.factor
new file mode 100644 (file)
index 0000000..e255505
--- /dev/null
@@ -0,0 +1,185 @@
+! Copyright (C) 2004, 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types alien.syntax generic assocs kernel
+kernel.private math io.ports sequences strings sbufs threads
+unix vectors io.buffers io.backend io.encodings math.parser
+continuations system libc namespaces make io.timeouts
+io.encodings.utf8 destructors accessors summary combinators
+locals unix.time fry io.backend.unix.multiplexers ;
+QUALIFIED: io
+IN: io.backend.unix
+
+GENERIC: handle-fd ( handle -- fd )
+
+TUPLE: fd fd disposed ;
+
+: init-fd ( fd -- fd )
+    [
+        |dispose
+        dup fd>> F_SETFL O_NONBLOCK fcntl io-error
+        dup fd>> F_SETFD FD_CLOEXEC fcntl io-error
+    ] with-destructors ;
+
+: <fd> ( n -- fd )
+    #! We drop the error code rather than calling io-error,
+    #! since on OS X 10.3, this operation fails from init-io
+    #! when running the Factor.app (presumably because fd 0 and
+    #! 1 are closed).
+    f fd boa ;
+
+M: fd dispose
+    dup disposed>> [ drop ] [
+        [ cancel-operation ]
+        [ t >>disposed drop ]
+        [ fd>> close-file ]
+        tri
+    ] if ;
+
+M: fd handle-fd dup check-disposed fd>> ;
+
+M: fd cancel-operation ( fd -- )
+    dup disposed>> [ drop ] [
+        fd>>
+        mx get-global
+        [ remove-input-callbacks [ t swap resume-with ] each ]
+        [ remove-output-callbacks [ t swap resume-with ] each ]
+        2bi
+    ] if ;
+
+SYMBOL: +retry+ ! just try the operation again without blocking
+SYMBOL: +input+
+SYMBOL: +output+
+
+ERROR: io-timeout ;
+
+M: io-timeout summary drop "I/O operation timed out" ;
+
+: wait-for-fd ( handle event -- )
+    dup +retry+ eq? [ 2drop ] [
+        '[
+            swap handle-fd mx get-global _ {
+                { +input+ [ add-input-callback ] }
+                { +output+ [ add-output-callback ] }
+            } case
+        ] "I/O" suspend nip [ io-timeout ] when
+    ] if ;
+
+: wait-for-port ( port event -- )
+    '[ handle>> _ wait-for-fd ] with-timeout ;
+
+! Some general stuff
+: file-mode OCT: 0666 ;
+! Readers
+: (refill) ( port -- n )
+    [ handle>> ]
+    [ buffer>> buffer-end ]
+    [ buffer>> buffer-capacity ] tri read ;
+
+! Returns an event to wait for which will ensure completion of
+! this request
+GENERIC: refill ( port handle -- event/f )
+
+M: fd refill
+    fd>> over buffer>> [ buffer-end ] [ buffer-capacity ] bi read
+    {
+        { [ dup 0 >= ] [ swap buffer>> n>buffer f ] }
+        { [ err_no EINTR = ] [ 2drop +retry+ ] }
+        { [ err_no EAGAIN = ] [ 2drop +input+ ] }
+        [ (io-error) ]
+    } cond ;
+
+M: unix (wait-to-read) ( port -- )
+    dup
+    dup handle>> dup check-disposed refill dup
+    [ dupd wait-for-port (wait-to-read) ] [ 2drop ] if ;
+
+! Writers
+GENERIC: drain ( port handle -- event/f )
+
+M: fd drain
+    fd>> over buffer>> [ buffer@ ] [ buffer-length ] bi write
+    {
+        { [ dup 0 >= ] [
+            over buffer>> buffer-consume
+            buffer>> buffer-empty? f +output+ ?
+        ] }
+        { [ err_no EINTR = ] [ 2drop +retry+ ] }
+        { [ err_no EAGAIN = ] [ 2drop +output+ ] }
+        [ (io-error) ]
+    } cond ;
+
+M: unix (wait-to-write) ( port -- )
+    dup
+    dup handle>> dup check-disposed drain
+    dup [ wait-for-port ] [ 2drop ] if ;
+
+M: unix io-multiplex ( ms/f -- )
+    mx get-global wait-for-events ;
+
+! On Unix, you're not supposed to set stdin to non-blocking
+! because the fd might be shared with another process (either
+! parent or child). So what we do is have the VM start a thread
+! which pumps data from the real stdin to a pipe. We set the
+! pipe to non-blocking, and read from it instead of the real
+! stdin. Very crufty, but it will suffice until we get native
+! threading support at the language level.
+TUPLE: stdin control size data disposed ;
+
+M: stdin dispose*
+    [
+        [ control>> &dispose drop ]
+        [ size>> &dispose drop ]
+        [ data>> &dispose drop ]
+        tri
+    ] with-destructors ;
+
+: wait-for-stdin ( stdin -- n )
+    [ control>> CHAR: X over io:stream-write1 io:stream-flush ]
+    [ size>> "ssize_t" heap-size swap io:stream-read *int ]
+    bi ;
+
+:: refill-stdin ( buffer stdin size -- )
+    stdin data>> handle-fd buffer buffer-end size read
+    dup 0 < [
+        drop
+        err_no EINTR = [ buffer stdin size refill-stdin ] [ (io-error) ] if
+    ] [
+        size = [ "Error reading stdin pipe" throw ] unless
+        size buffer n>buffer
+    ] if ;
+
+M: stdin refill
+    [ buffer>> ] [ dup wait-for-stdin ] bi* refill-stdin f ;
+
+: control-write-fd ( -- fd ) &: control_write *uint ;
+
+: size-read-fd ( -- fd ) &: size_read *uint ;
+
+: data-read-fd ( -- fd ) &: stdin_read *uint ;
+
+: <stdin> ( -- stdin )
+    stdin new
+        control-write-fd <fd> <output-port> >>control
+        size-read-fd <fd> init-fd <input-port> >>size
+        data-read-fd <fd> >>data ;
+
+M: unix (init-stdio) ( -- )
+    <stdin> <input-port>
+    1 <fd> <output-port>
+    2 <fd> <output-port> ;
+
+! mx io-task for embedding an fd-based mx inside another mx
+TUPLE: mx-port < port mx ;
+
+: <mx-port> ( mx -- port )
+    dup fd>> mx-port <port> swap >>mx ;
+
+: multiplexer-error ( n -- n )
+    dup 0 < [
+        err_no [ EAGAIN = ] [ EINTR = ] bi or
+        [ drop 0 ] [ (io-error) ] if
+    ] when ;
+
+: ?flag ( n mask symbol -- n )
+    pick rot bitand 0 > [ , ] [ drop ] if ;
diff --git a/basis/io/backend/windows/authors.txt b/basis/io/backend/windows/authors.txt
new file mode 100644 (file)
index 0000000..781acc2
--- /dev/null
@@ -0,0 +1,2 @@
+Doug Coleman
+Mackenzie Straight
diff --git a/basis/io/backend/windows/nt/authors.txt b/basis/io/backend/windows/nt/authors.txt
new file mode 100755 (executable)
index 0000000..026f4cd
--- /dev/null
@@ -0,0 +1,3 @@
+Doug Coleman
+Slava Pestov
+Mackenzie Straight
diff --git a/basis/io/backend/windows/nt/nt.factor b/basis/io/backend/windows/nt/nt.factor
new file mode 100755 (executable)
index 0000000..493a735
--- /dev/null
@@ -0,0 +1,125 @@
+USING: alien alien.c-types arrays assocs combinators
+continuations destructors io io.backend io.ports io.timeouts
+io.backend.windows io.files.windows io.files.windows.nt io.files
+io.pathnames io.buffers io.streams.c libc kernel math namespaces
+sequences threads windows windows.errors windows.kernel32
+strings splitting ascii system accessors locals ;
+QUALIFIED: windows.winsock
+IN: io.backend.windows.nt
+
+! Global variable with assoc mapping overlapped to threads
+SYMBOL: pending-overlapped
+
+TUPLE: io-callback port thread ;
+
+C: <io-callback> io-callback
+
+: (make-overlapped) ( -- overlapped-ext )
+    "OVERLAPPED" malloc-object &free ;
+
+: make-overlapped ( port -- overlapped-ext )
+    [ (make-overlapped) ] dip
+    handle>> ptr>> [ over set-OVERLAPPED-offset ] when* ;
+
+M: winnt FileArgs-overlapped ( port -- overlapped )
+    make-overlapped ;
+
+: <completion-port> ( handle existing -- handle )
+     f 1 CreateIoCompletionPort dup win32-error=0/f ;
+
+SYMBOL: master-completion-port
+
+: <master-completion-port> ( -- handle )
+    INVALID_HANDLE_VALUE f <completion-port> ;
+
+M: winnt add-completion ( win32-handle -- )
+    handle>> master-completion-port get-global <completion-port> drop ;
+
+: eof? ( error -- ? )
+    [ ERROR_HANDLE_EOF = ] [ ERROR_BROKEN_PIPE = ] bi or ;
+
+: twiddle-thumbs ( overlapped port -- bytes-transferred )
+    [
+        drop
+        [ pending-overlapped get-global set-at ] curry "I/O" suspend
+        {
+            { [ dup integer? ] [ ] }
+            { [ dup array? ] [
+                first dup eof?
+                [ drop 0 ] [ (win32-error-string) throw ] if
+            ] }
+        } cond
+    ] with-timeout ;
+
+:: wait-for-overlapped ( us -- bytes-transferred overlapped error? )
+    master-completion-port get-global
+    0 <int> [ ! bytes
+        f <void*> ! key
+        f <void*> [ ! overlapped
+            us [ 1000 /i ] [ INFINITE ] if* ! timeout
+            GetQueuedCompletionStatus zero?
+        ] keep *void*
+    ] keep *int spin ;
+
+: resume-callback ( result overlapped -- )
+    pending-overlapped get-global delete-at* drop resume-with ;
+
+: handle-overlapped ( us -- ? )
+    wait-for-overlapped [
+        dup [
+            [ drop GetLastError 1array ] dip resume-callback t
+        ] [ 2drop f ] if
+    ] [ resume-callback t ] if ;
+
+M: win32-handle cancel-operation
+    [ check-disposed ] [ handle>> CancelIo drop ] bi ;
+
+M: winnt io-multiplex ( us -- )
+    handle-overlapped [ 0 io-multiplex ] when ;
+
+M: winnt init-io ( -- )
+    <master-completion-port> master-completion-port set-global
+    H{ } clone pending-overlapped set-global
+    windows.winsock:init-winsock ;
+
+: file-error? ( n -- eof? )
+    zero? [
+        GetLastError {
+            { [ dup expected-io-error? ] [ drop f ] }
+            { [ dup eof? ] [ drop t ] }
+            [ (win32-error-string) throw ]
+        } cond
+    ] [ f ] if ;
+
+: wait-for-file ( FileArgs n port -- n )
+    swap file-error?
+    [ 2drop 0 ] [ [ lpOverlapped>> ] dip twiddle-thumbs ] if ;
+
+: update-file-ptr ( n port -- )
+    handle>> dup ptr>> [ rot + >>ptr drop ] [ 2drop ] if* ;
+
+: finish-write ( n port -- )
+    [ update-file-ptr ] [ buffer>> buffer-consume ] 2bi ;
+
+M: winnt (wait-to-write)
+    [
+        [ make-FileArgs dup setup-write WriteFile ]
+        [ wait-for-file ]
+        [ finish-write ]
+        tri
+    ] with-destructors ;
+
+: finish-read ( n port -- )
+    [ update-file-ptr ] [ buffer>> n>buffer ] 2bi ;
+
+M: winnt (wait-to-read) ( port -- )
+    [
+        [ make-FileArgs dup setup-read ReadFile ]
+        [ wait-for-file ]
+        [ finish-read ]
+        tri
+    ] with-destructors ;
+
+M: winnt (init-stdio) init-c-stdio ;
+
+winnt set-io-backend
diff --git a/basis/io/backend/windows/nt/privileges/privileges.factor b/basis/io/backend/windows/nt/privileges/privileges.factor
new file mode 100755 (executable)
index 0000000..64218f7
--- /dev/null
@@ -0,0 +1,52 @@
+USING: alien alien.c-types alien.syntax arrays continuations\r
+destructors generic io.mmap io.ports io.backend.windows io.files.windows\r
+kernel libc math math.bitwise namespaces quotations sequences windows\r
+windows.advapi32 windows.kernel32 io.backend system accessors\r
+io.backend.windows.privileges ;\r
+IN: io.backend.windows.nt.privileges\r
+\r
+TYPEDEF: TOKEN_PRIVILEGES* PTOKEN_PRIVILEGES\r
+\r
+! Security tokens\r
+!  http://msdn.microsoft.com/msdnmag/issues/05/03/TokenPrivileges/\r
+\r
+: (open-process-token) ( handle -- handle )\r
+    { TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY } flags "PHANDLE" <c-object>\r
+    [ OpenProcessToken win32-error=0/f ] keep *void* ;\r
+\r
+: open-process-token ( -- handle )\r
+    #! remember to CloseHandle\r
+    GetCurrentProcess (open-process-token) ;\r
+\r
+: with-process-token ( quot -- )\r
+    #! quot: ( token-handle -- token-handle )\r
+    [ open-process-token ] dip\r
+    [ keep ] curry\r
+    [ CloseHandle drop ] [ ] cleanup ; inline\r
+\r
+: lookup-privilege ( string -- luid )\r
+    [ f ] dip "LUID" <c-object>\r
+    [ LookupPrivilegeValue win32-error=0/f ] keep ;\r
+\r
+: make-token-privileges ( name ? -- obj )\r
+    "TOKEN_PRIVILEGES" <c-object>\r
+    1 [ over set-TOKEN_PRIVILEGES-PrivilegeCount ] keep\r
+    "LUID_AND_ATTRIBUTES" malloc-array &free\r
+    over set-TOKEN_PRIVILEGES-Privileges\r
+\r
+    swap [\r
+        SE_PRIVILEGE_ENABLED over TOKEN_PRIVILEGES-Privileges\r
+        set-LUID_AND_ATTRIBUTES-Attributes\r
+    ] when\r
+\r
+    [ lookup-privilege ] dip\r
+    [\r
+        TOKEN_PRIVILEGES-Privileges\r
+        set-LUID_AND_ATTRIBUTES-Luid\r
+    ] keep ;\r
+\r
+M: winnt set-privilege ( name ? -- )\r
+    [\r
+        -rot 0 -rot make-token-privileges\r
+        dup length f f AdjustTokenPrivileges win32-error=0/f\r
+    ] with-process-token ;\r
diff --git a/basis/io/backend/windows/nt/privileges/tags.txt b/basis/io/backend/windows/nt/privileges/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/windows/nt/tags.txt b/basis/io/backend/windows/nt/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/windows/privileges/privileges.factor b/basis/io/backend/windows/privileges/privileges.factor
new file mode 100644 (file)
index 0000000..8661ba9
--- /dev/null
@@ -0,0 +1,14 @@
+USING: io.backend kernel continuations sequences\r
+system vocabs.loader combinators ;\r
+IN: io.backend.windows.privileges\r
+\r
+HOOK: set-privilege io-backend ( name ? -- ) inline\r
+\r
+: with-privileges ( seq quot -- )\r
+    over [ [ t set-privilege ] each ] curry compose\r
+    swap [ [ f set-privilege ] each ] curry [ ] cleanup ; inline\r
+\r
+{\r
+    { [ os winnt? ] [ "io.backend.windows.nt.privileges" require ] }\r
+    { [ os wince? ] [ "io.backend.windows.ce.privileges" require ] }\r
+} cond\r
diff --git a/basis/io/backend/windows/privileges/tags.txt b/basis/io/backend/windows/privileges/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/windows/summary.txt b/basis/io/backend/windows/summary.txt
new file mode 100644 (file)
index 0000000..2a2d544
--- /dev/null
@@ -0,0 +1 @@
+Microsoft Windows native I/O implementation
diff --git a/basis/io/backend/windows/tags.txt b/basis/io/backend/windows/tags.txt
new file mode 100755 (executable)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/backend/windows/windows.factor b/basis/io/backend/windows/windows.factor
new file mode 100755 (executable)
index 0000000..e7c72ed
--- /dev/null
@@ -0,0 +1,54 @@
+! Copyright (C) 2004, 2008 Mackenzie Straight, Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types arrays destructors io io.backend
+io.buffers io.files io.ports io.binary io.timeouts
+windows.errors strings kernel math namespaces sequences windows
+windows.kernel32 windows.shell32 windows.types windows.winsock
+splitting continuations math.bitwise system accessors ;
+IN: io.backend.windows
+
+: set-inherit ( handle ? -- )
+    [ HANDLE_FLAG_INHERIT ] dip
+    >BOOLEAN SetHandleInformation win32-error=0/f ;
+
+TUPLE: win32-handle handle disposed ;
+
+: new-win32-handle ( handle class -- win32-handle )
+    new swap [ >>handle ] [ f set-inherit ] bi ;
+
+: <win32-handle> ( handle -- win32-handle )
+    win32-handle new-win32-handle ;
+
+M: win32-handle dispose* ( handle -- )
+    handle>> CloseHandle drop ;
+
+TUPLE: win32-file < win32-handle ptr ;
+
+: <win32-file> ( handle -- win32-file )
+    win32-file new-win32-handle ;
+
+M: win32-file dispose
+    dup disposed>> [ drop ] [
+        [ cancel-operation ] [ call-next-method ] bi
+    ] if ;
+
+HOOK: CreateFile-flags io-backend ( DWORD -- DWORD )
+HOOK: FileArgs-overlapped io-backend ( port -- overlapped/f )
+HOOK: add-completion io-backend ( port -- )
+
+: opened-file ( handle -- win32-file )
+    dup invalid-handle?
+    <win32-file> |dispose
+    dup add-completion ;
+
+: share-mode ( -- fixnum )
+    {
+        FILE_SHARE_READ
+        FILE_SHARE_WRITE
+        FILE_SHARE_DELETE
+    } flags ; foldable
+
+: default-security-attributes ( -- obj )
+    "SECURITY_ATTRIBUTES" <c-object>
+    "SECURITY_ATTRIBUTES" heap-size
+    over set-SECURITY_ATTRIBUTES-nLength ;
diff --git a/basis/io/directories/authors.txt b/basis/io/directories/authors.txt
new file mode 100644 (file)
index 0000000..f372b57
--- /dev/null
@@ -0,0 +1,2 @@
+Slava Pestov
+Doug Coleman
diff --git a/basis/io/directories/directories-docs.factor b/basis/io/directories/directories-docs.factor
new file mode 100644 (file)
index 0000000..edfcf48
--- /dev/null
@@ -0,0 +1,166 @@
+USING: help.markup help.syntax io.files.private io.pathnames
+quotations ;
+IN: io.directories
+
+HELP: cwd
+{ $values { "path" "a pathname string" } }
+{ $description "Outputs the current working directory of the Factor process." }
+{ $errors "Windows CE has no concept of ``current directory'', so this word throws an error there." }
+{ $notes "User code should use " { $link with-directory } " or " { $link set-current-directory } " instead." } ;
+
+HELP: cd
+{ $values { "path" "a pathname string" } }
+{ $description "Changes the current working directory of the Factor process." }
+{ $errors "Windows CE has no concept of ``current directory'', so this word throws an error there." }
+{ $notes "User code should use " { $link with-directory } " or " { $link set-current-directory } " instead." } ;
+
+{ cd cwd current-directory set-current-directory with-directory } related-words
+
+HELP: current-directory
+{ $description "A variable holding the current directory as an absolute path. Words that use the filesystem do so in relation to this variable."
+$nl
+"This variable should never be set directly; instead, use " { $link set-current-directory } " or " { $link with-directory } ". This preserves the invariant that the value of this variable is an absolute path." } ;
+
+HELP: set-current-directory
+{ $values { "path" "a pathname string" } }
+{ $description "Changes the " { $link current-directory } " variable."
+$nl
+"If " { $snippet "path" } " is relative, it is first resolved relative to the current directory. If " { $snippet "path" } " is absolute, it becomes the new current directory." } ;
+
+HELP: with-directory
+{ $values { "path" "a pathname string" } { "quot" quotation } }
+{ $description "Calls the quotation in a new dynamic scope with the " { $link current-directory } " variable rebound."
+$nl
+"If " { $snippet "path" } " is relative, it is first resolved relative to the current directory. If " { $snippet "path" } " is absolute, it becomes the new current directory." } ;
+
+HELP: (directory-entries)
+{ $values { "path" "a pathname string" } { "seq" "a sequence of " { $snippet "{ name dir? }" } " pairs" } }
+{ $description "Outputs the contents of a directory named by " { $snippet "path" } "." }
+{ $notes "This is a low-level word, and user code should call one of the related words instead." } ;
+
+HELP: directory-entries
+{ $values { "path" "a pathname string" } { "seq" "a sequence of " { $link directory-entry } " objects" } }
+{ $description "Outputs the contents of a directory named by " { $snippet "path" } "." } ;
+
+HELP: directory-files
+{ $values { "path" "a pathname string" } { "seq" "a sequence of filenames" } }
+{ $description "Outputs the contents of a directory named by " { $snippet "path" } "." } ;
+
+HELP: with-directory-files
+{ $values { "path" "a pathname string" } { "quot" quotation } }
+{ $description "Calls the quotation with the directory file names on the stack and with the directory set as the " { $link current-directory } ".  Restores the current directory after the quotation is called." } ;
+
+HELP: delete-file
+{ $values { "path" "a pathname string" } }
+{ $description "Deletes a file." }
+{ $errors "Throws an error if the file could not be deleted." } ;
+
+HELP: make-directory
+{ $values { "path" "a pathname string" } }
+{ $description "Creates a directory." }
+{ $errors "Throws an error if the directory could not be created." } ;
+
+HELP: make-directories
+{ $values { "path" "a pathname string" } }
+{ $description "Creates a directory and any parent directories which do not yet exist." }
+{ $errors "Throws an error if the directories could not be created." } ;
+
+HELP: delete-directory
+{ $values { "path" "a pathname string" } }
+{ $description "Deletes a directory. The directory must be empty." }
+{ $errors "Throws an error if the directory could not be deleted." } ;
+
+HELP: touch-file
+{ $values { "path" "a pathname string" } }
+{ $description "Updates the modification time of a file or directory. If the file does not exist, creates a new, empty file." }
+{ $errors "Throws an error if the file could not be touched." } ;
+
+HELP: move-file
+{ $values { "from" "a pathname string" } { "to" "a pathname string" } }
+{ $description "Moves or renames a file." }
+{ $errors "Throws an error if the file does not exist or if the move operation fails." } ;
+
+HELP: move-file-into
+{ $values { "from" "a pathname string" } { "to" "a directory pathname string" } }
+{ $description "Moves a file to another directory without renaming it." }
+{ $errors "Throws an error if the file does not exist or if the move operation fails." } ;
+
+HELP: move-files-into
+{ $values { "files" "a sequence of pathname strings" } { "to" "a directory pathname string" } }
+{ $description "Moves a set of files to another directory." }
+{ $errors "Throws an error if the file does not exist or if the move operation fails." } ;
+
+HELP: copy-file
+{ $values { "from" "a pathname string" } { "to" "a pathname string" } }
+{ $description "Copies a file." }
+{ $notes "This operation attempts to preserve the original file's attributes, however not all attributes may be preserved." }
+{ $errors "Throws an error if the file does not exist or if the copy operation fails." } ;
+
+HELP: copy-file-into
+{ $values { "from" "a pathname string" } { "to" "a directory pathname string" } }
+{ $description "Copies a file to another directory." }
+{ $errors "Throws an error if the file does not exist or if the copy operation fails." } ;
+
+HELP: copy-files-into
+{ $values { "files" "a sequence of pathname strings" } { "to" "a directory pathname string" } }
+{ $description "Copies a set of files to another directory." }
+{ $errors "Throws an error if the file does not exist or if the copy operation fails." } ;
+
+ARTICLE: "current-directory" "Current working directory"
+"File system I/O operations use the value of a variable to resolve relative pathnames:"
+{ $subsection current-directory }
+"This variable can be changed with a pair of words:"
+{ $subsection set-current-directory }
+{ $subsection with-directory }
+"This variable is independent of the operating system notion of ``current working directory''. While all Factor I/O operations use the variable and not the operating system's value, care must be taken when making FFI calls which expect a pathname. The first option is to resolve relative paths:"
+{ $subsection (normalize-path) }
+"The second is to change the working directory of the current process:"
+{ $subsection cd }
+{ $subsection cwd } ;
+
+ARTICLE: "io.directories.listing" "Directory listing"
+"Directory listing:"
+{ $subsection directory-entries }
+{ $subsection directory-files }
+{ $subsection with-directory-files } ;
+
+ARTICLE: "io.directories.create" "Creating directories"
+{ $subsection make-directory }
+{ $subsection make-directories } ;
+
+ARTICLE: "delete-move-copy" "Deleting, moving, and copying files"
+"Operations for deleting and copying files come in two forms:"
+{ $list
+    { "Words named " { $snippet { $emphasis "operation" } "-file" } " which work on regular files only." }
+    { "Words named " { $snippet { $emphasis "operation" } "-tree" } " works on directory trees recursively, and also accepts regular files." }
+}
+"The operations for moving and copying files come in three flavors:"
+{ $list
+    { "A word named " { $snippet { $emphasis "operation" } } " which takes a source and destination path." }
+    { "A word named " { $snippet { $emphasis "operation" } "-into" } " which takes a source path and destination directory. The destination file will be stored in the destination directory and will have the same file name as the source path." }
+    { "A word named " { $snippet { $emphasis "operation" } "s-into" } " which takes a sequence of source paths and destination directory." }
+}
+"Since both of the above lists apply to copying files, that this means that there are a total of six variations on copying a file."
+$nl
+"Deleting files:"
+{ $subsection delete-file }
+{ $subsection delete-directory }
+"Moving files:"
+{ $subsection move-file }
+{ $subsection move-file-into }
+{ $subsection move-files-into }
+"Copying files:"
+{ $subsection copy-file }
+{ $subsection copy-file-into }
+{ $subsection copy-files-into }
+"On most operating systems, files can only be moved within the same file system. To move files between file systems, use " { $link copy-file } " followed by " { $link delete-file } " on the old name." ;
+
+ARTICLE: "io.directories" "Directory manipulation"
+"The " { $vocab-link "io.directories" } " vocabulary defines words for inspecting and manipulating directory trees."
+{ $subsection home }
+{ $subsection "current-directory" }
+{ $subsection "io.directories.listing" }
+{ $subsection "io.directories.create" }
+{ $subsection "delete-move-copy" } ;
+
+ABOUT: "io.directories"
diff --git a/basis/io/directories/directories-tests.factor b/basis/io/directories/directories-tests.factor
new file mode 100644 (file)
index 0000000..b703421
--- /dev/null
@@ -0,0 +1,189 @@
+USING: continuations destructors io io.directories
+io.directories.hierarchy io.encodings.ascii io.encodings.utf8
+io.files io.files.info io.files.temp io.pathnames kernel
+sequences tools.test ;
+IN: io.directories.tests
+
+[ { "kernel" } ] [
+    "core" resource-path [
+        "." directory-files [ "kernel" = ] filter
+    ] with-directory
+] unit-test
+
+[ { "kernel" } ] [
+    "resource:core" [
+        "." directory-files [ "kernel" = ] filter
+    ] with-directory
+] unit-test
+
+[ { "kernel" } ] [
+    "resource:core" [
+        [ "kernel" = ] filter
+    ] with-directory-files
+] unit-test
+
+[ ] [ "blahblah" temp-file dup exists? [ delete-directory ] [ drop ] if ] unit-test
+[ ] [ "blahblah" temp-file make-directory ] unit-test
+[ t ] [ "blahblah" temp-file file-info directory? ] unit-test
+
+[ t ] [
+    [ temp-directory "loldir" append-path delete-directory ] ignore-errors
+    temp-directory [
+        "loldir" make-directory
+    ] with-directory
+    temp-directory "loldir" append-path exists?
+] unit-test
+
+[ ] [
+    [ temp-directory "loldir" append-path delete-directory ] ignore-errors
+    temp-directory [
+        "loldir" make-directory
+        "loldir" delete-directory
+    ] with-directory
+] unit-test
+
+[ "file1 contents" ] [
+    [ temp-directory "loldir" append-path delete-directory ] ignore-errors
+    temp-directory [
+        "file1 contents" "file1" utf8 set-file-contents
+        "file1" "file2" copy-file
+        "file2" utf8 file-contents
+    ] with-directory
+    "file1" temp-file delete-file
+    "file2" temp-file delete-file
+] unit-test
+
+[ "file3 contents" ] [
+    temp-directory [
+        "file3 contents" "file3" utf8 set-file-contents
+        "file3" "file4" move-file
+        "file4" utf8 file-contents
+    ] with-directory
+    "file4" temp-file delete-file
+] unit-test
+
+[ "file5" temp-file delete-file ] ignore-errors
+
+[ ] [
+    temp-directory [
+        "file5" touch-file
+        "file5" delete-file
+    ] with-directory
+] unit-test
+
+[ "file6" temp-file delete-file ] ignore-errors
+
+[ ] [
+    temp-directory [
+        "file6" touch-file
+        "file6" link-info drop
+    ] with-directory
+] unit-test
+
+[ ] [
+    { "Hello world." }
+    "test-foo.txt" temp-file ascii set-file-lines
+] unit-test
+
+[ ] [
+    "test-foo.txt" temp-file ascii [
+        "Hello appender." print
+    ] with-file-appender
+] unit-test
+
+[ ] [
+    "test-bar.txt" temp-file ascii [
+        "Hello appender." print
+    ] with-file-appender
+] unit-test
+
+[ "Hello world.\nHello appender.\n" ] [
+    "test-foo.txt" temp-file ascii file-contents
+] unit-test
+
+[ "Hello appender.\n" ] [
+    "test-bar.txt" temp-file ascii file-contents
+] unit-test
+
+[ ] [ "test-foo.txt" temp-file delete-file ] unit-test
+
+[ ] [ "test-bar.txt" temp-file delete-file ] unit-test
+
+[ f ] [ "test-foo.txt" temp-file exists? ] unit-test
+
+[ f ] [ "test-bar.txt" temp-file exists? ] unit-test
+
+[ "test-blah" temp-file delete-tree ] ignore-errors
+
+[ ] [ "test-blah" temp-file make-directory ] unit-test
+
+[ ] [
+    "test-blah/fooz" temp-file ascii <file-writer> dispose
+] unit-test
+
+[ t ] [
+    "test-blah/fooz" temp-file exists?
+] unit-test
+
+[ ] [ "test-blah/fooz" temp-file delete-file ] unit-test
+
+[ ] [ "test-blah" temp-file delete-directory ] unit-test
+
+[ f ] [ "test-blah" temp-file exists? ] unit-test
+
+[ ] [ "delete-tree-test/a/b/c" temp-file make-directories ] unit-test
+
+[ ] [
+    { "Hi" }
+    "delete-tree-test/a/b/c/d" temp-file ascii set-file-lines
+] unit-test
+
+[ ] [
+    "delete-tree-test" temp-file delete-tree
+] unit-test
+
+[ ] [
+    "copy-tree-test/a/b/c" temp-file make-directories
+] unit-test
+
+[ ] [
+    "Foobar"
+    "copy-tree-test/a/b/c/d" temp-file
+    ascii set-file-contents
+] unit-test
+
+[ ] [
+    "copy-tree-test" temp-file
+    "copy-destination" temp-file copy-tree
+] unit-test
+
+[ "Foobar" ] [
+    "copy-destination/a/b/c/d" temp-file ascii file-contents
+] unit-test
+
+[ ] [
+    "copy-destination" temp-file delete-tree
+] unit-test
+
+[ ] [
+    "copy-tree-test" temp-file
+    "copy-destination" temp-file copy-tree-into
+] unit-test
+
+[ "Foobar" ] [
+    "copy-destination/copy-tree-test/a/b/c/d" temp-file ascii file-contents
+] unit-test
+
+[ ] [
+    "copy-destination/copy-tree-test/a/b/c/d" temp-file "" temp-file copy-file-into
+] unit-test
+
+[ "Foobar" ] [
+    "d" temp-file ascii file-contents
+] unit-test
+
+[ ] [ "d" temp-file delete-file ] unit-test
+
+[ ] [ "copy-destination" temp-file delete-tree ] unit-test
+
+[ ] [ "copy-tree-test" temp-file delete-tree ] unit-test
diff --git a/basis/io/directories/directories.factor b/basis/io/directories/directories.factor
new file mode 100755 (executable)
index 0000000..2630be8
--- /dev/null
@@ -0,0 +1,87 @@
+! Copyright (C) 2004, 2008 Slava Pestov, Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors combinators destructors io io.backend
+io.encodings.binary io.files io.pathnames kernel namespaces
+sequences system vocabs.loader fry ;
+IN: io.directories
+
+: set-current-directory ( path -- )
+    (normalize-path) current-directory set ;
+
+: with-directory ( path quot -- )
+    [ (normalize-path) current-directory ] dip with-variable ; inline
+
+! Creating directories
+HOOK: make-directory io-backend ( path -- )
+
+: make-directories ( path -- )
+    normalize-path trim-right-separators {
+        { [ dup "." = ] [ ] }
+        { [ dup root-directory? ] [ ] }
+        { [ dup empty? ] [ ] }
+        { [ dup exists? ] [ ] }
+        [
+            dup parent-directory make-directories
+            dup make-directory
+        ]
+    } cond drop ;
+
+! Listing directories
+TUPLE: directory-entry name type ;
+
+HOOK: >directory-entry os ( byte-array -- directory-entry )
+
+HOOK: (directory-entries) os ( path -- seq )
+
+: directory-entries ( path -- seq )
+    normalize-path
+    (directory-entries)
+    [ name>> { "." ".." } member? not ] filter ;
+    
+: directory-files ( path -- seq )
+    directory-entries [ name>> ] map ;
+
+: with-directory-files ( path quot -- )
+    '[ "" directory-files @ ] with-directory ; inline
+
+! Touching files
+HOOK: touch-file io-backend ( path -- )
+
+! Deleting files
+HOOK: delete-file io-backend ( path -- )
+
+HOOK: delete-directory io-backend ( path -- )
+
+: to-directory ( from to -- from to' )
+    over file-name append-path ;
+
+! Moving and renaming files
+HOOK: move-file io-backend ( from to -- )
+
+: move-file-into ( from to -- )
+    to-directory move-file ;
+
+: move-files-into ( files to -- )
+    '[ _ move-file-into ] each ;
+
+! Copying files
+HOOK: copy-file io-backend ( from to -- )
+
+M: object copy-file
+    dup parent-directory make-directories
+    binary <file-writer> [
+        swap binary <file-reader> [
+            swap stream-copy
+        ] with-disposal
+    ] with-disposal ;
+
+: copy-file-into ( from to -- )
+    to-directory copy-file ;
+
+: copy-files-into ( files to -- )
+    '[ _ copy-file-into ] each ;
+
+{
+    { [ os unix? ] [ "io.directories.unix" require ] }
+    { [ os windows? ] [ "io.directories.windows" require ] }
+} cond
\ No newline at end of file
diff --git a/basis/io/directories/hierarchy/authors.txt b/basis/io/directories/hierarchy/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/directories/hierarchy/hierarchy-docs.factor b/basis/io/directories/hierarchy/hierarchy-docs.factor
new file mode 100644 (file)
index 0000000..8b3ca73
--- /dev/null
@@ -0,0 +1,36 @@
+USING: help.markup help.syntax ;
+IN: io.directories.hierarchy
+
+HELP: delete-tree
+{ $values { "path" "a pathname string" } }
+{ $description "Deletes a file or directory, recursing into subdirectories." }
+{ $errors "Throws an error if the deletion fails." } 
+{ $warning "Misuse of this word can lead to catastrophic data loss." } ;
+
+HELP: copy-tree
+{ $values { "from" "a pathname string" } { "to" "a pathname string" } }
+{ $description "Copies a directory tree recursively." }
+{ $notes "This operation attempts to preserve original file attributes, however not all attributes may be preserved." }
+{ $errors "Throws an error if the copy operation fails." } ;
+
+HELP: copy-tree-into
+{ $values { "from" "a pathname string" } { "to" "a directory pathname string" } }
+{ $description "Copies a directory tree to another directory, recursively." }
+{ $errors "Throws an error if the copy operation fails." } ;
+
+HELP: copy-trees-into
+{ $values { "files" "a sequence of pathname strings" } { "to" "a directory pathname string" } }
+{ $description "Copies a set of directory trees to another directory, recursively." }
+{ $errors "Throws an error if the copy operation fails." } ;
+
+ARTICLE: "io.directories.hierarchy" "Directory hierarchy manipulation"
+"The " { $vocab-link "io.directories.hierarchy" } " vocabulary defines words for operating on directory hierarchies recursively."
+$nl
+"Deleting directory trees recursively:"
+{ $subsection delete-tree }
+"Copying directory trees recursively:"
+{ $subsection copy-tree }
+{ $subsection copy-tree-into }
+{ $subsection copy-trees-into } ;
+
+ABOUT: "io.directories.hierarchy"
diff --git a/basis/io/directories/hierarchy/hierarchy.factor b/basis/io/directories/hierarchy/hierarchy.factor
new file mode 100644 (file)
index 0000000..555f001
--- /dev/null
@@ -0,0 +1,31 @@
+! Copyright (C) 2004, 2008 Slava Pestov, Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel accessors sequences combinators fry io.directories
+io.pathnames io.files.info io.files.types io.files.links
+io.backend ;
+IN: io.directories.hierarchy
+
+: delete-tree ( path -- )
+    dup link-info directory? [
+        [ [ [ delete-tree ] each ] with-directory-files ]
+        [ delete-directory ]
+        bi
+    ] [ delete-file ] if ;
+
+DEFER: copy-tree-into
+
+: copy-tree ( from to -- )
+    normalize-path
+    over link-info type>>
+    {
+        { +symbolic-link+ [ copy-link ] }
+        { +directory+ [ '[ [ _ copy-tree-into ] each ] with-directory-files ] }
+        [ drop copy-file ]
+    } case ;
+
+: copy-tree-into ( from to -- )
+    to-directory copy-tree ;
+
+: copy-trees-into ( files to -- )
+    '[ _ copy-tree-into ] each ;
+
diff --git a/basis/io/directories/hierarchy/summary.txt b/basis/io/directories/hierarchy/summary.txt
new file mode 100644 (file)
index 0000000..3480f88
--- /dev/null
@@ -0,0 +1 @@
+Deleting and copying directory hierarchies
diff --git a/basis/io/directories/search/authors.txt b/basis/io/directories/search/authors.txt
new file mode 100755 (executable)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/io/directories/search/search-tests.factor b/basis/io/directories/search/search-tests.factor
new file mode 100644 (file)
index 0000000..63c9483
--- /dev/null
@@ -0,0 +1,11 @@
+USING: io.directories.search io.files io.files.unique
+io.pathnames kernel namespaces sequences sorting tools.test ;
+IN: io.directories.search.tests
+
+[ t ] [
+    [
+        10 [ "io.paths.test" "gogogo" make-unique-file* ] replicate
+        current-directory get t [ ] find-all-files
+    ] with-unique-directory
+    [ natural-sort ] bi@ =
+] unit-test
diff --git a/basis/io/directories/search/search.factor b/basis/io/directories/search/search.factor
new file mode 100755 (executable)
index 0000000..137e919
--- /dev/null
@@ -0,0 +1,59 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors arrays continuations deques dlists fry
+io.directories io.files io.files.info io.pathnames kernel
+sequences system vocabs.loader ;
+IN: io.directories.search
+
+TUPLE: directory-iterator path bfs queue ;
+
+<PRIVATE
+
+: qualified-directory ( path -- seq )
+    dup directory-files [ append-path ] with map ;
+
+: push-directory ( path iter -- )
+    [ qualified-directory ] dip [
+        dup queue>> swap bfs>>
+        [ push-front ] [ push-back ] if
+    ] curry each ;
+
+: <directory-iterator> ( path bfs? -- iterator )
+    <dlist> directory-iterator boa
+    dup path>> over push-directory ;
+
+: next-file ( iter -- file/f )
+    dup queue>> deque-empty? [ drop f ] [
+        dup queue>> pop-back dup link-info directory?
+        [ over push-directory next-file ] [ nip ] if
+    ] if ;
+
+: iterate-directory ( iter quot: ( obj -- ? ) -- obj )
+    over next-file [
+        over call
+        [ 2nip ] [ iterate-directory ] if*
+    ] [
+        2drop f
+    ] if* ; inline recursive
+
+PRIVATE>
+
+: find-file ( path bfs? quot: ( obj -- ? ) -- path/f )
+    [ <directory-iterator> ] dip
+    [ keep and ] curry iterate-directory ; inline
+
+: each-file ( path bfs? quot: ( obj -- ? ) -- )
+    [ <directory-iterator> ] dip
+    [ f ] compose iterate-directory drop ; inline
+
+: find-all-files ( path bfs? quot: ( obj -- ? ) -- paths )
+    [ <directory-iterator> ] dip
+    pusher [ [ f ] compose iterate-directory drop ] dip ; inline
+
+: recursive-directory ( path bfs? -- paths )
+    [ ] accumulator [ each-file ] dip ;
+
+: find-in-directories ( directories bfs? quot -- path' )
+    '[ _ _ find-file ] attempt-all ; inline
+
+os windows? [ "io.directories.search.windows" require ] when
diff --git a/basis/io/directories/search/windows/authors.txt b/basis/io/directories/search/windows/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/io/directories/search/windows/tags.txt b/basis/io/directories/search/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/directories/search/windows/windows.factor b/basis/io/directories/search/windows/windows.factor
new file mode 100644 (file)
index 0000000..91a4afd
--- /dev/null
@@ -0,0 +1,13 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: arrays fry io.pathnames kernel sequences windows.shell32
+io.directories.search ;
+IN: io.directories.search.windows
+
+: program-files-directories ( -- array )
+    program-files program-files-x86 2array ; inline
+
+: find-in-program-files ( base-directory bfs? quot -- path )
+    [
+        [ program-files-directories ] dip '[ _ append-path ] map
+    ] 2dip find-in-directories ; inline
diff --git a/basis/io/directories/summary.txt b/basis/io/directories/summary.txt
new file mode 100644 (file)
index 0000000..b770122
--- /dev/null
@@ -0,0 +1 @@
+Listing directories, moving, copying and deleting files
diff --git a/basis/io/directories/unix/tags.txt b/basis/io/directories/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/directories/unix/unix.factor b/basis/io/directories/unix/unix.factor
new file mode 100644 (file)
index 0000000..1ef80b3
--- /dev/null
@@ -0,0 +1,73 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types alien.strings combinators
+continuations destructors fry io io.backend io.backend.unix
+io.directories io.encodings.binary io.encodings.utf8 io.files
+io.pathnames io.files.types kernel math.bitwise sequences system
+unix unix.stat ;
+IN: io.directories.unix
+
+: touch-mode ( -- n )
+    { O_WRONLY O_APPEND O_CREAT O_EXCL } flags ; foldable
+
+M: unix touch-file ( path -- )
+    normalize-path
+    dup exists? [ touch ] [
+        touch-mode file-mode open-file close-file
+    ] if ;
+
+M: unix move-file ( from to -- )
+    [ normalize-path ] bi@ rename io-error ;
+
+M: unix delete-file ( path -- ) normalize-path unlink-file ;
+
+M: unix make-directory ( path -- )
+    normalize-path OCT: 777 mkdir io-error ;
+
+M: unix delete-directory ( path -- )
+    normalize-path rmdir io-error ;
+
+: (copy-file) ( from to -- )
+    dup parent-directory make-directories
+    binary <file-writer> [
+        swap binary <file-reader> [
+            swap stream-copy
+        ] with-disposal
+    ] with-disposal ;
+
+M: unix copy-file ( from to -- )
+    [ normalize-path ] bi@ (copy-file) ;
+
+: with-unix-directory ( path quot -- )
+    [ opendir dup [ (io-error) ] unless ] dip
+    dupd curry swap '[ _ closedir io-error ] [ ] cleanup ; inline
+
+: find-next-file ( DIR* -- byte-array )
+    "dirent" <c-object>
+    f <void*>
+    [ readdir_r 0 = [ (io-error) ] unless ] 2keep
+    *void* [ drop f ] unless ;
+
+: dirent-type>file-type ( ch -- type )
+    {
+        { DT_BLK  [ +block-device+ ] }
+        { DT_CHR  [ +character-device+ ] }
+        { DT_DIR  [ +directory+ ] }
+        { DT_LNK  [ +symbolic-link+ ] }
+        { DT_SOCK [ +socket+ ] }
+        { DT_FIFO [ +fifo+ ] }
+        { DT_REG  [ +regular-file+ ] }
+        { DT_WHT  [ +whiteout+ ] }
+        [ drop +unknown+ ]
+    } case ;
+
+M: unix >directory-entry ( byte-array -- directory-entry )
+    [ dirent-d_name utf8 alien>string ]
+    [ dirent-d_type dirent-type>file-type ] bi directory-entry boa ;
+
+M: unix (directory-entries) ( path -- seq )
+    [
+        '[ _ find-next-file dup ]
+        [ >directory-entry ]
+        [ drop ] produce
+    ] with-unix-directory ;
diff --git a/basis/io/directories/windows/tags.txt b/basis/io/directories/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/directories/windows/windows.factor b/basis/io/directories/windows/windows.factor
new file mode 100755 (executable)
index 0000000..c2955d3
--- /dev/null
@@ -0,0 +1,68 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: system io.directories io.encodings.utf16n alien.strings
+io.pathnames io.backend io.files.windows destructors
+kernel accessors calendar windows windows.errors
+windows.kernel32 alien.c-types sequences splitting
+fry continuations ;
+IN: io.directories.windows
+
+M: windows touch-file ( path -- )
+    [
+        normalize-path
+        maybe-create-file [ &dispose ] dip
+        [ drop ] [ handle>> f now dup (set-file-times) ] if
+    ] with-destructors ;
+
+M: windows move-file ( from to -- )
+    [ normalize-path ] bi@ MoveFile win32-error=0/f ;
+
+M: windows delete-file ( path -- )
+    normalize-path DeleteFile win32-error=0/f ;
+
+M: windows copy-file ( from to -- )
+    dup parent-directory make-directories
+    [ normalize-path ] bi@ 0 CopyFile win32-error=0/f ;
+
+M: windows make-directory ( path -- )
+    normalize-path
+    f CreateDirectory win32-error=0/f ;
+
+M: windows delete-directory ( path -- )
+    normalize-path
+    RemoveDirectory win32-error=0/f ;
+
+: find-first-file ( path -- WIN32_FIND_DATA handle )
+    "WIN32_FIND_DATA" <c-object> tuck
+    FindFirstFile
+    [ INVALID_HANDLE_VALUE = [ win32-error-string throw ] when ] keep ;
+
+: find-next-file ( path -- WIN32_FIND_DATA/f )
+    "WIN32_FIND_DATA" <c-object> tuck
+    FindNextFile 0 = [
+        GetLastError ERROR_NO_MORE_FILES = [
+            win32-error
+        ] unless drop f
+    ] when ;
+
+TUPLE: windows-directory-entry < directory-entry attributes ;
+
+M: windows >directory-entry ( byte-array -- directory-entry )
+    [ WIN32_FIND_DATA-cFileName utf16n alien>string ]
+    [ WIN32_FIND_DATA-dwFileAttributes win32-file-type ]
+    [ WIN32_FIND_DATA-dwFileAttributes win32-file-attributes ]
+    tri
+    dupd remove windows-directory-entry boa ;
+
+M: windows (directory-entries) ( path -- seq )
+    "\\" ?tail drop "\\*" append
+    find-first-file [ >directory-entry ] dip
+    [
+        '[
+            [ _ find-next-file dup ]
+            [ >directory-entry ]
+            [ drop ] produce
+            over name>> "." = [ nip ] [ swap prefix ] if
+        ]
+    ] [ '[ _ FindClose win32-error=0/f ] ] bi [ ] cleanup ;
+
index 2cafb6be479e336d8303c3cc454009f355c2d707..6ac0ed399e6ba3762939193218708c154f3fa0d0 100644 (file)
@@ -2,7 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: math.parser arrays io.encodings sequences kernel assocs
 hashtables io.encodings.ascii generic parser classes.tuple words
-io io.files splitting namespaces math compiler.units accessors ;
+words.symbol io io.files splitting namespaces math
+compiler.units accessors ;
 IN: io.encodings.8-bit
 
 <PRIVATE
diff --git a/basis/io/encodings/binary/authors.txt b/basis/io/encodings/binary/authors.txt
new file mode 100644 (file)
index 0000000..f990dd0
--- /dev/null
@@ -0,0 +1 @@
+Daniel Ehrenberg
diff --git a/basis/io/encodings/binary/binary-docs.factor b/basis/io/encodings/binary/binary-docs.factor
new file mode 100644 (file)
index 0000000..4da1e08
--- /dev/null
@@ -0,0 +1,11 @@
+USING: help.syntax help.markup ;
+IN: io.encodings.binary
+
+HELP: binary
+{ $class-description "Encoding descriptor for binary I/O." } ;
+
+ARTICLE: "io.encodings.binary" "Binary encoding"
+"Making an encoded stream with the binary encoding is a no-op; streams with this encoding deal with byte-arrays, not strings." 
+{ $subsection binary } ;
+
+ABOUT: "io.encodings.binary"
diff --git a/basis/io/encodings/binary/binary.factor b/basis/io/encodings/binary/binary.factor
new file mode 100644 (file)
index 0000000..e54163f
--- /dev/null
@@ -0,0 +1,8 @@
+! Copyright (C) 2008 Daniel Ehrenberg.
+! See http://factorcode.org/license.txt for BSD license.
+USING: io.encodings kernel ;
+IN: io.encodings.binary
+
+SINGLETON: binary
+M: binary <encoder> drop ;
+M: binary <decoder> drop ;
diff --git a/basis/io/encodings/binary/summary.txt b/basis/io/encodings/binary/summary.txt
new file mode 100644 (file)
index 0000000..a1eb4bc
--- /dev/null
@@ -0,0 +1 @@
+Dummy encoding for binary I/O
diff --git a/basis/io/encodings/binary/tags.txt b/basis/io/encodings/binary/tags.txt
new file mode 100644 (file)
index 0000000..8e27be7
--- /dev/null
@@ -0,0 +1 @@
+text
diff --git a/basis/io/files/info/authors.txt b/basis/io/files/info/authors.txt
new file mode 100644 (file)
index 0000000..f372b57
--- /dev/null
@@ -0,0 +1,2 @@
+Slava Pestov
+Doug Coleman
diff --git a/basis/io/files/info/info-docs.factor b/basis/io/files/info/info-docs.factor
new file mode 100644 (file)
index 0000000..8db780f
--- /dev/null
@@ -0,0 +1,41 @@
+USING: help.markup help.syntax arrays io.files ;
+IN: io.files.info
+
+HELP: file-info
+{ $values { "path" "a pathname string" } { "info" file-info } }
+{ $description "Queries the file system for metadata. If " { $snippet "path" } " refers to a symbolic link, it is followed. See the article " { $link "file-types" } " for a list of metadata symbols." }
+{ $errors "Throws an error if the file does not exist." } ;
+
+HELP: link-info
+{ $values { "path" "a pathname string" } { "info" "a file-info tuple" } }
+{ $description "Queries the file system for metadata. If path refers to a symbolic link, information about the symbolic link itself is returned. If the file does not exist, an exception is thrown." } ;
+
+{ file-info link-info } related-words
+
+HELP: directory?
+{ $values { "file-info" file-info } { "?" "a boolean" } }
+{ $description "Tests if " { $snippet "file-info" } " is a directory." } ;
+
+HELP: file-systems
+{ $values { "array" array } }
+{ $description "Returns an array of " { $link file-system-info } " objects returned by iterating the mount points and calling " { $link file-system-info } " on each." } ;
+
+HELP: file-system-info
+{ $values
+{ "path" "a pathname string" }
+{ "file-system-info" file-system-info } }
+{ $description "Returns a platform-specific object describing the file-system that contains the path. The cross-platform slot is " { $slot "free-space" } "." } ;
+
+ARTICLE: "io.files.info" "File system meta-data"
+"File meta-data:"
+{ $subsection file-info }
+{ $subsection link-info }
+{ $subsection exists? }
+{ $subsection directory? }
+"File types:"
+{ $subsection "file-types" }
+"File system meta-data:"
+{ $subsection file-system-info }
+{ $subsection file-systems } ;
+
+ABOUT: "io.files.info"
diff --git a/basis/io/files/info/info-tests.factor b/basis/io/files/info/info-tests.factor
new file mode 100644 (file)
index 0000000..b94bc06
--- /dev/null
@@ -0,0 +1,19 @@
+USING: io.files.info io.pathnames io.encodings.utf8 io.files
+io.directories kernel io.pathnames accessors tools.test
+sequences io.files.temp ;
+IN: io.files.info.tests
+
+\ file-info must-infer
+\ link-info must-infer
+
+[ t ] [
+    temp-directory [ "hi41" "test41" utf8 set-file-contents ] with-directory
+    temp-directory "test41" append-path utf8 file-contents "hi41" =
+] unit-test
+
+[ t ] [
+    temp-directory [ "test41" file-info size>> ] with-directory 4 =
+] unit-test
+
+[ t ] [ "/" file-system-info file-system-info? ] unit-test
+[ t ] [ file-systems [ file-system-info? ] all? ] unit-test
diff --git a/basis/io/files/info/info.factor b/basis/io/files/info/info.factor
new file mode 100644 (file)
index 0000000..fd21850
--- /dev/null
@@ -0,0 +1,28 @@
+! Copyright (C) 2008 Doug Coleman, Eduardo Cavazos.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors kernel system sequences combinators
+vocabs.loader io.files.types ;
+IN: io.files.info
+
+! File info
+TUPLE: file-info type size permissions created modified
+accessed ;
+
+HOOK: file-info os ( path -- info )
+
+HOOK: link-info os ( path -- info )
+
+: directory? ( file-info -- ? ) type>> +directory+ = ;
+
+! File systems
+HOOK: file-systems os ( -- array )
+
+TUPLE: file-system-info device-name mount-point type
+available-space free-space used-space total-space ;
+
+HOOK: file-system-info os ( path -- file-system-info )
+
+{
+    { [ os unix? ] [ "io.files.info.unix." os name>> append ] }
+    { [ os windows? ] [ "io.files.info.windows" ] }
+} cond require
\ No newline at end of file
diff --git a/basis/io/files/info/summary.txt b/basis/io/files/info/summary.txt
new file mode 100644 (file)
index 0000000..5d354fb
--- /dev/null
@@ -0,0 +1 @@
+File and file system meta-data
diff --git a/basis/io/files/info/unix/bsd/bsd.factor b/basis/io/files/info/unix/bsd/bsd.factor
new file mode 100644 (file)
index 0000000..6d0f3e7
--- /dev/null
@@ -0,0 +1,21 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel alien.syntax math io.files.unix system
+unix.stat accessors combinators calendar.unix
+io.files.info.unix ;
+IN: io.files.info.unix.bsd
+
+TUPLE: bsd-file-info < unix-file-info birth-time flags gen ;
+
+M: bsd new-file-info ( -- class ) bsd-file-info new ;
+
+M: bsd stat>file-info ( stat -- file-info )
+    [ call-next-method ] keep
+    {
+        [ stat-st_flags >>flags ]
+        [ stat-st_gen >>gen ]
+        [
+            stat-st_birthtimespec timespec>unix-time
+            >>birth-time
+        ]
+    } cleave ;
diff --git a/basis/io/files/info/unix/bsd/tags.txt b/basis/io/files/info/unix/bsd/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/info/unix/freebsd/freebsd.factor b/basis/io/files/info/unix/freebsd/freebsd.factor
new file mode 100644 (file)
index 0000000..398e4ff
--- /dev/null
@@ -0,0 +1,55 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types alien.syntax combinators
+io.backend io.files io.files.info io.files.unix kernel math system unix
+unix.statfs.freebsd unix.statvfs.freebsd unix.getfsstat.freebsd
+sequences grouping alien.strings io.encodings.utf8
+specialized-arrays.direct.uint arrays io.files.info.unix ;
+IN: io.files.info.unix.freebsd
+
+TUPLE: freebsd-file-system-info < unix-file-system-info
+version io-size owner syncreads syncwrites asyncreads asyncwrites ;
+
+M: freebsd new-file-system-info freebsd-file-system-info new ;
+
+M: freebsd file-system-statfs ( path -- byte-array )
+    "statfs" <c-object> tuck statfs io-error ;
+
+M: freebsd statfs>file-system-info ( file-system-info statvfs -- file-system-info )
+    {
+        [ statfs-f_version >>version ]
+        [ statfs-f_type >>type ]
+        [ statfs-f_flags >>flags ]
+        [ statfs-f_bsize >>block-size ]
+        [ statfs-f_iosize >>io-size ]
+        [ statfs-f_blocks >>blocks ]
+        [ statfs-f_bfree >>blocks-free ]
+        [ statfs-f_bavail >>blocks-available ]
+        [ statfs-f_files >>files ]
+        [ statfs-f_ffree >>files-free ]
+        [ statfs-f_syncwrites >>syncwrites ]
+        [ statfs-f_asyncwrites >>asyncwrites ]
+        [ statfs-f_syncreads >>syncreads ]
+        [ statfs-f_asyncreads >>asyncreads ]
+        [ statfs-f_namemax >>name-max ]
+        [ statfs-f_owner >>owner ]
+        [ statfs-f_fsid 2 <direct-uint-array> >array >>id ]
+        [ statfs-f_fstypename utf8 alien>string >>type ]
+        [ statfs-f_mntfromname utf8 alien>string >>device-name ]
+        [ statfs-f_mntonname utf8 alien>string >>mount-point ]
+    } cleave ;
+
+M: freebsd file-system-statvfs ( path -- byte-array )
+    "statvfs" <c-object> tuck statvfs io-error ;
+
+M: freebsd statvfs>file-system-info ( file-system-info statvfs -- file-system-info )
+    {
+        [ statvfs-f_favail >>files-available ]
+        [ statvfs-f_frsize >>preferred-block-size ]
+    } cleave ;
+
+M: freebsd file-systems ( -- array )
+    f 0 0 getfsstat dup io-error
+    "statfs" <c-array> dup dup length 0 getfsstat io-error
+    "statfs" heap-size group
+    [ statfs-f_mntonname alien>native-string file-system-info ] map ;
diff --git a/basis/io/files/info/unix/freebsd/tags.txt b/basis/io/files/info/unix/freebsd/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/info/unix/linux/linux.factor b/basis/io/files/info/unix/linux/linux.factor
new file mode 100644 (file)
index 0000000..ee4a1ed
--- /dev/null
@@ -0,0 +1,90 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types alien.syntax combinators csv
+io.backend io.encodings.utf8 io.files io.files.info io.streams.string
+io.files.unix kernel math.order namespaces sequences sorting
+system unix unix.statfs.linux unix.statvfs.linux
+specialized-arrays.direct.uint arrays io.files.info.unix ;
+IN: io.files.info.unix.linux
+
+TUPLE: linux-file-system-info < unix-file-system-info
+namelen ;
+
+M: linux new-file-system-info linux-file-system-info new ;
+
+M: linux file-system-statfs ( path -- byte-array )
+    "statfs64" <c-object> tuck statfs64 io-error ;
+
+M: linux statfs>file-system-info ( struct -- statfs )
+    {
+        [ statfs64-f_type >>type ]
+        [ statfs64-f_bsize >>block-size ]
+        [ statfs64-f_blocks >>blocks ]
+        [ statfs64-f_bfree >>blocks-free ]
+        [ statfs64-f_bavail >>blocks-available ]
+        [ statfs64-f_files >>files ]
+        [ statfs64-f_ffree >>files-free ]
+        [ statfs64-f_fsid 2 <direct-uint-array> >array >>id ]
+        [ statfs64-f_namelen >>namelen ]
+        [ statfs64-f_frsize >>preferred-block-size ]
+        ! [ statfs64-f_spare >>spare ]
+    } cleave ;
+
+M: linux file-system-statvfs ( path -- byte-array )
+    "statvfs64" <c-object> tuck statvfs64 io-error ;
+
+M: linux statvfs>file-system-info ( struct -- statfs )
+    {
+        [ statvfs64-f_flag >>flags ]
+        [ statvfs64-f_namemax >>name-max ]
+    } cleave ;
+
+TUPLE: mtab-entry file-system-name mount-point type options
+frequency pass-number ;
+
+: mtab-csv>mtab-entry ( csv -- mtab-entry )
+    [ mtab-entry new ] dip
+    {
+        [ first >>file-system-name ]
+        [ second >>mount-point ]
+        [ third >>type ]
+        [ fourth <string-reader> csv first >>options ]
+        [ 4 swap nth >>frequency ]
+        [ 5 swap nth >>pass-number ]
+    } cleave ;
+
+: parse-mtab ( -- array )
+    [
+        "/etc/mtab" utf8 <file-reader>
+        CHAR: \s delimiter set csv
+    ] with-scope
+    [ mtab-csv>mtab-entry ] map ;
+
+M: linux file-systems
+    parse-mtab [
+        [ mount-point>> file-system-info ] keep
+        {
+            [ file-system-name>> >>device-name ]
+            [ mount-point>> >>mount-point ]
+            [ type>> >>type ]
+        } cleave
+    ] map ;
+
+ERROR: file-system-not-found ;
+
+M: linux file-system-info ( path -- )
+    normalize-path
+    [
+        [ new-file-system-info ] dip
+        [ file-system-statfs statfs>file-system-info ]
+        [ file-system-statvfs statvfs>file-system-info ] bi
+        file-system-calculations
+    ] keep
+    
+    parse-mtab [ [ mount-point>> ] bi@ <=> invert-comparison ] sort
+    [ mount-point>> head? ] with find nip [ file-system-not-found ] unless*
+    {
+        [ file-system-name>> >>device-name drop ]
+        [ mount-point>> >>mount-point drop ]
+        [ type>> >>type ]
+    } 2cleave ;
diff --git a/basis/io/files/info/unix/linux/tags.txt b/basis/io/files/info/unix/linux/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/info/unix/macosx/macosx.factor b/basis/io/files/info/unix/macosx/macosx.factor
new file mode 100644 (file)
index 0000000..53992bc
--- /dev/null
@@ -0,0 +1,52 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types alien.strings combinators
+grouping io.encodings.utf8 io.files kernel math sequences
+system unix io.files.unix specialized-arrays.direct.uint arrays
+unix.statfs.macosx unix.statvfs.macosx unix.getfsstat.macosx
+io.files.info.unix io.files.info ;
+IN: io.files.info.unix.macosx
+
+TUPLE: macosx-file-system-info < unix-file-system-info
+io-size owner type-id filesystem-subtype ;
+
+M: macosx file-systems ( -- array )
+    f <void*> dup 0 getmntinfo64 dup io-error
+    [ *void* ] dip
+    "statfs64" heap-size [ * memory>byte-array ] keep group
+    [ statfs64-f_mntonname utf8 alien>string file-system-info ] map ;
+    ! [ [ new-file-system-info ] dip statfs>file-system-info ] map ;
+
+M: macosx new-file-system-info macosx-file-system-info new ;
+
+M: macosx file-system-statfs ( normalized-path -- statfs )
+    "statfs64" <c-object> tuck statfs64 io-error ;
+
+M: macosx file-system-statvfs ( normalized-path -- statvfs )
+    "statvfs" <c-object> tuck statvfs io-error ;
+
+M: macosx statfs>file-system-info ( file-system-info byte-array -- file-system-info' )
+    {
+        [ statfs64-f_bsize >>block-size ]
+        [ statfs64-f_iosize >>io-size ]
+        [ statfs64-f_blocks >>blocks ]
+        [ statfs64-f_bfree >>blocks-free ]
+        [ statfs64-f_bavail >>blocks-available ]
+        [ statfs64-f_files >>files ]
+        [ statfs64-f_ffree >>files-free ]
+        [ statfs64-f_fsid 2 <direct-uint-array> >array >>id ]
+        [ statfs64-f_owner >>owner ]
+        [ statfs64-f_type >>type-id ]
+        [ statfs64-f_flags >>flags ]
+        [ statfs64-f_fssubtype >>filesystem-subtype ]
+        [ statfs64-f_fstypename utf8 alien>string >>type ]
+        [ statfs64-f_mntonname utf8 alien>string >>mount-point ]
+        [ statfs64-f_mntfromname utf8 alien>string >>device-name ]
+    } cleave ;
+
+M: macosx statvfs>file-system-info ( file-system-info byte-array -- file-system-info' )
+    {
+        [ statvfs-f_frsize >>preferred-block-size ]
+        [ statvfs-f_favail >>files-available ]
+        [ statvfs-f_namemax >>name-max ]
+    } cleave ;
diff --git a/basis/io/files/info/unix/macosx/tags.txt b/basis/io/files/info/unix/macosx/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/info/unix/netbsd/netbsd.factor b/basis/io/files/info/unix/netbsd/netbsd.factor
new file mode 100644 (file)
index 0000000..6dc0bb3
--- /dev/null
@@ -0,0 +1,53 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.syntax kernel unix.stat math unix
+combinators system io.backend accessors alien.c-types
+io.encodings.utf8 alien.strings unix.types io.files.unix
+io.files io.files.info unix.statvfs.netbsd unix.getfsstat.netbsd arrays
+grouping sequences io.encodings.utf8
+specialized-arrays.direct.uint io.files.info.unix ;
+IN: io.files.info.unix.netbsd
+
+TUPLE: netbsd-file-system-info < unix-file-system-info
+blocks-reserved files-reserved
+owner io-size sync-reads sync-writes async-reads async-writes
+idx mount-from ;
+
+M: netbsd new-file-system-info netbsd-file-system-info new ;
+
+M: netbsd file-system-statvfs
+    "statvfs" <c-object> tuck statvfs io-error ;
+
+M: netbsd statvfs>file-system-info ( file-system-info statvfs -- file-system-info' )
+    {
+        [ statvfs-f_flag >>flags ]
+        [ statvfs-f_bsize >>block-size ]
+        [ statvfs-f_frsize >>preferred-block-size ]
+        [ statvfs-f_iosize >>io-size ]
+        [ statvfs-f_blocks >>blocks ]
+        [ statvfs-f_bfree >>blocks-free ]
+        [ statvfs-f_bavail >>blocks-available ]
+        [ statvfs-f_bresvd >>blocks-reserved ]
+        [ statvfs-f_files >>files ]
+        [ statvfs-f_ffree >>files-free ]
+        [ statvfs-f_favail >>files-available ]
+        [ statvfs-f_fresvd >>files-reserved ]
+        [ statvfs-f_syncreads >>sync-reads ]
+        [ statvfs-f_syncwrites >>sync-writes ]
+        [ statvfs-f_asyncreads >>async-reads ]
+        [ statvfs-f_asyncwrites >>async-writes ]
+        [ statvfs-f_fsidx 2 <direct-uint-array> >array >>idx ]
+        [ statvfs-f_fsid >>id ]
+        [ statvfs-f_namemax >>name-max ]
+        [ statvfs-f_owner >>owner ]
+        ! [ statvfs-f_spare >>spare ]
+        [ statvfs-f_fstypename utf8 alien>string >>type ]
+        [ statvfs-f_mntonname utf8 alien>string >>mount-point ]
+        [ statvfs-f_mntfromname utf8 alien>string >>device-name ]
+    } cleave ;
+
+M: netbsd file-systems ( -- array )
+    f 0 0 getvfsstat dup io-error
+    "statvfs" <c-array> dup dup length 0 getvfsstat io-error
+    "statvfs" heap-size group
+    [ statvfs-f_mntonname utf8 alien>string file-system-info ] map ;
diff --git a/basis/io/files/info/unix/netbsd/tags.txt b/basis/io/files/info/unix/netbsd/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/info/unix/openbsd/openbsd.factor b/basis/io/files/info/unix/openbsd/openbsd.factor
new file mode 100644 (file)
index 0000000..62783a9
--- /dev/null
@@ -0,0 +1,55 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types alien.strings alien.syntax
+combinators io.backend io.files io.files.info io.files.unix kernel math
+sequences system unix unix.getfsstat.openbsd grouping
+unix.statfs.openbsd unix.statvfs.openbsd unix.types
+specialized-arrays.direct.uint arrays io.files.info.unix ;
+IN: io.files.unix.openbsd
+
+TUPLE: freebsd-file-system-info < unix-file-system-info
+io-size sync-writes sync-reads async-writes async-reads 
+owner ;
+
+M: openbsd new-file-system-info freebsd-file-system-info new ;
+
+M: openbsd file-system-statfs
+    "statfs" <c-object> tuck statfs io-error ;
+
+M: openbsd statfs>file-system-info ( file-system-info statfs -- file-system-info' )
+    {
+        [ statfs-f_flags >>flags ]
+        [ statfs-f_bsize >>block-size ]
+        [ statfs-f_iosize >>io-size ]
+        [ statfs-f_blocks >>blocks ]
+        [ statfs-f_bfree >>blocks-free ]
+        [ statfs-f_bavail >>blocks-available ]
+        [ statfs-f_files >>files ]
+        [ statfs-f_ffree >>files-free ]
+        [ statfs-f_favail >>files-available ]
+        [ statfs-f_syncwrites >>sync-writes ]
+        [ statfs-f_syncreads >>sync-reads ]
+        [ statfs-f_asyncwrites >>async-writes ]
+        [ statfs-f_asyncreads >>async-reads ]
+        [ statfs-f_fsid 2 <direct-uint-array> >array >>id ]
+        [ statfs-f_namemax >>name-max ]
+        [ statfs-f_owner >>owner ]
+        ! [ statfs-f_spare >>spare ]
+        [ statfs-f_fstypename alien>native-string >>type ]
+        [ statfs-f_mntonname alien>native-string >>mount-point ]
+        [ statfs-f_mntfromname alien>native-string >>device-name ]
+    } cleave ;
+
+M: openbsd file-system-statvfs ( normalized-path -- statvfs )
+    "statvfs" <c-object> tuck statvfs io-error ;
+
+M: openbsd statvfs>file-system-info ( file-system-info statvfs -- file-system-info' )
+    {
+        [ statvfs-f_frsize >>preferred-block-size ]
+    } cleave ;
+
+M: openbsd file-systems ( -- seq )
+    f 0 0 getfsstat dup io-error
+    "statfs" <c-array> dup dup length 0 getfsstat io-error 
+    "statfs" heap-size group 
+    [ statfs-f_mntonname alien>native-string file-system-info ] map ;
diff --git a/basis/io/files/info/unix/openbsd/tags.txt b/basis/io/files/info/unix/openbsd/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/info/unix/tags.txt b/basis/io/files/info/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/info/unix/unix-docs.factor b/basis/io/files/info/unix/unix-docs.factor
new file mode 100644 (file)
index 0000000..0dff2e4
--- /dev/null
@@ -0,0 +1,277 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: classes help.markup help.syntax io.streams.string
+strings math calendar io.files.info io.files.info.unix ;
+IN: io.files.unix
+
+HELP: file-group-id
+{ $values
+     { "path" "a pathname string" }
+     { "gid" integer } }
+{ $description "Returns the group id for a given file." } ;
+
+HELP: file-group-name
+{ $values
+     { "path" "a pathname string" }
+     { "string" string } }
+{ $description "Returns the group name for a given file." } ;
+
+HELP: file-permissions
+{ $values
+     { "path" "a pathname string" }
+     { "n" integer } }
+{ $description "Returns the Unix file permissions for a given file." } ;
+
+HELP: file-username
+{ $values
+     { "path" "a pathname string" }
+     { "string" string } }
+{ $description "Returns the username for a given file." } ;
+
+HELP: file-user-id
+{ $values
+     { "path" "a pathname string" }
+     { "uid" integer } }
+{ $description "Returns the user id for a given file." } ;
+
+HELP: group-execute?
+{ $values
+     { "obj" "a pathname string or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "group execute" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: group-read?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "group read" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: group-write?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "group write" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: other-execute?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "other execute" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: other-read?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "other read" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: other-write?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "other write" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: set-file-access-time
+{ $values
+     { "path" "a pathname string" } { "timestamp" timestamp } }
+{ $description "Sets a file's last access timestamp." } ;
+
+HELP: set-file-group
+{ $values
+     { "path" "a pathname string" } { "string/id" "a string or a group id" } }
+{ $description "Sets a file's group id from the given group id or group name." } ;
+
+HELP: set-file-ids
+{ $values
+     { "path" "a pathname string" } { "uid" integer } { "gid" integer } }
+{ $description "Sets the user id and group id of a file with a single library call." } ;
+
+HELP: set-file-permissions
+{ $values
+     { "path" "a pathname string" } { "n" "an integer, interepreted as a string of bits" } }
+{ $description "Sets the file permissions for a given file with the supplied Unix permissions integer. Supplying an octal number with " { $link POSTPONE: OCT: } " is recommended." }
+{ $examples "Using the tradidional octal value:"
+    { $unchecked-example "USING: io.files.unix kernel ;"
+        "\"resource:license.txt\" OCT: 755 set-file-permissions"
+        ""
+    }
+    "Higher-level, setting named bits:"
+    { $unchecked-example "USING: io.files.unix kernel math.bitwise ;"
+    "\"resource:license.txt\""
+    "{ USER-ALL GROUP-READ GROUP-EXECUTE OTHER-READ OTHER-EXECUTE }"
+    "flags set-file-permissions"
+    "" }
+} ;
+
+HELP: set-file-times
+{ $values
+     { "path" "a pathname string" } { "timestamps" "an array of two timestamps" } }
+{ $description "Sets the access and write timestamps for a file as provided in the input array. A value of " { $link f } " provided for either of the timestamps will not change that timestamp." } ;
+
+HELP: set-file-user
+{ $values
+     { "path" "a pathname string" } { "string/id" "a string or a user id" } }
+{ $description "Sets a file's user id from the given user id or username." } ;
+
+HELP: set-file-modified-time
+{ $values
+     { "path" "a pathname string" } { "timestamp" timestamp } }
+{ $description "Sets a file's last modified timestamp, or write timestamp." } ;
+
+HELP: set-gid
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "gid" } " bit of a file to true or false." } ;
+
+HELP: gid?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "gid" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: set-group-execute
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "group execute" } " bit of a file to true or false." } ;
+
+HELP: set-group-read
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "group read" } " bit of a file to true or false." } ;
+
+HELP: set-group-write
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "group write" } " bit of a file to true or false." } ;
+
+HELP: set-other-execute
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "other execute" } " bit of a file to true or false." } ;
+
+HELP: set-other-read
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "other read" } " bit of a file to true or false." } ;
+
+HELP: set-other-write
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "other execute" } " bit of a file to true or false." } ;
+
+HELP: set-sticky
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "sticky" } " bit of a file to true or false." } ;
+
+HELP: sticky?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "sticky" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: set-uid
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "uid" } " bit of a file to true or false." } ;
+
+HELP: uid?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "uid" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: set-user-execute
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "user execute" } " bit of a file to true or false." } ;
+
+HELP: set-user-read
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "user read" } " bit of a file to true or false." } ;
+
+HELP: set-user-write
+{ $values
+     { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Sets the " { $snippet "user write" } " bit of a file to true or false." } ;
+
+HELP: user-execute?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "user execute" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: user-read?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "user read" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+HELP: user-write?
+{ $values
+     { "obj" "a pathname string, file-info object, or an integer" }
+     { "?" "a boolean" } }
+{ $description "Tests whether the " { $snippet "user write" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
+
+ARTICLE: "unix-file-permissions" "Unix file permissions"
+"Reading all file permissions:"
+{ $subsection file-permissions }
+"Reading individual file permissions:"
+{ $subsection uid? }
+{ $subsection gid? }
+{ $subsection sticky? }
+{ $subsection user-read? }
+{ $subsection user-write? }
+{ $subsection user-execute? }
+{ $subsection group-read? }
+{ $subsection group-write? }
+{ $subsection group-execute? }
+{ $subsection other-read? }
+{ $subsection other-write? }
+{ $subsection other-execute? }
+"Writing all file permissions:"
+{ $subsection set-file-permissions }
+"Writing individual file permissions:"
+{ $subsection set-uid }
+{ $subsection set-gid }
+{ $subsection set-sticky }
+{ $subsection set-user-read }
+{ $subsection set-user-write }
+{ $subsection set-user-execute }
+{ $subsection set-group-read }
+{ $subsection set-group-write }
+{ $subsection set-group-execute }
+{ $subsection set-other-read }
+{ $subsection set-other-write }
+{ $subsection set-other-execute } ;
+
+ARTICLE: "unix-file-timestamps" "Unix file timestamps"
+"To read file times, use the accessors on the object returned by the " { $link file-info } " word." $nl
+"Setting multiple file times:"
+{ $subsection set-file-times }
+"Setting just the last access time:"
+{ $subsection set-file-access-time }
+"Setting just the last modified time:"
+{ $subsection set-file-modified-time } ;
+
+
+ARTICLE: "unix-file-ids" "Unix file user and group ids"
+"Reading file user data:"
+{ $subsection file-user-id }
+{ $subsection file-username }
+"Setting file user data:"
+{ $subsection set-file-user }
+"Reading file group data:"
+{ $subsection file-group-id }
+{ $subsection file-group-name }
+"Setting file group data:"
+{ $subsection set-file-group } ;
+
+
+ARTICLE: "io.files.info.unix" "Unix file attributes"
+"The " { $vocab-link "io.files.info.unix" } " vocabulary implements a high-level way to set Unix-specific permissions, timestamps, and user and group IDs for files."
+{ $subsection "unix-file-permissions" }
+{ $subsection "unix-file-timestamps" }
+{ $subsection "unix-file-ids" } ;
+
+ABOUT: "io.files.info.unix"
diff --git a/basis/io/files/info/unix/unix.factor b/basis/io/files/info/unix/unix.factor
new file mode 100644 (file)
index 0000000..66b95db
--- /dev/null
@@ -0,0 +1,253 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors kernel system math math.bitwise strings arrays
+sequences combinators combinators.short-circuit alien.c-types
+vocabs.loader calendar calendar.unix io.files.info
+io.files.types io.backend unix unix.stat unix.time unix.users
+unix.groups ;
+IN: io.files.info.unix
+
+TUPLE: unix-file-system-info < file-system-info
+block-size preferred-block-size
+blocks blocks-free blocks-available
+files files-free files-available
+name-max flags id ;
+
+HOOK: new-file-system-info os ( --  file-system-info )
+
+M: unix new-file-system-info ( -- ) unix-file-system-info new ;
+
+HOOK: file-system-statfs os ( path -- statfs )
+
+M: unix file-system-statfs drop f ;
+
+HOOK: file-system-statvfs os ( path -- statvfs )
+
+M: unix file-system-statvfs drop f ;
+
+HOOK: statfs>file-system-info os ( file-system-info statfs -- file-system-info' )
+
+M: unix statfs>file-system-info drop ;
+
+HOOK: statvfs>file-system-info os ( file-system-info statvfs -- file-system-info' )
+
+M: unix statvfs>file-system-info drop ;
+
+: file-system-calculations ( file-system-info -- file-system-info' )
+    dup [ blocks-available>> ] [ block-size>> ] bi * >>available-space
+    dup [ blocks-free>> ] [ block-size>> ] bi * >>free-space
+    dup [ blocks>> ] [ block-size>> ] bi * >>total-space
+    dup [ total-space>> ] [ free-space>> ] bi - >>used-space ;
+
+M: unix file-system-info
+    normalize-path
+    [ new-file-system-info ] dip
+    [ file-system-statfs statfs>file-system-info ]
+    [ file-system-statvfs statvfs>file-system-info ] bi
+    file-system-calculations ;
+
+TUPLE: unix-file-info < file-info uid gid dev ino
+nlink rdev blocks blocksize ;
+
+HOOK: new-file-info os ( -- file-info )
+
+HOOK: stat>file-info os ( stat -- file-info )
+
+HOOK: stat>type os ( stat -- file-info )
+
+M: unix file-info ( path -- info )
+    normalize-path file-status stat>file-info ;
+
+M: unix link-info ( path -- info )
+    normalize-path link-status stat>file-info ;
+
+M: unix new-file-info ( -- class ) unix-file-info new ;
+
+M: unix stat>file-info ( stat -- file-info )
+    [ new-file-info ] dip
+    {
+        [ stat>type >>type ]
+        [ stat-st_size >>size ]
+        [ stat-st_mode >>permissions ]
+        [ stat-st_ctimespec timespec>unix-time >>created ]
+        [ stat-st_mtimespec timespec>unix-time >>modified ]
+        [ stat-st_atimespec timespec>unix-time >>accessed ]
+        [ stat-st_uid >>uid ]
+        [ stat-st_gid >>gid ]
+        [ stat-st_dev >>dev ]
+        [ stat-st_ino >>ino ]
+        [ stat-st_nlink >>nlink ]
+        [ stat-st_rdev >>rdev ]
+        [ stat-st_blocks >>blocks ]
+        [ stat-st_blksize >>blocksize ]
+    } cleave ;
+
+: n>file-type ( n -- type )
+    S_IFMT bitand {
+        { S_IFREG [ +regular-file+ ] }
+        { S_IFDIR [ +directory+ ] }
+        { S_IFCHR [ +character-device+ ] }
+        { S_IFBLK [ +block-device+ ] }
+        { S_IFIFO [ +fifo+ ] }
+        { S_IFLNK [ +symbolic-link+ ] }
+        { S_IFSOCK [ +socket+ ] }
+        [ drop +unknown+ ]
+    } case ;
+
+M: unix stat>type ( stat -- type )
+    stat-st_mode n>file-type ;
+
+<PRIVATE
+
+: stat-mode ( path -- mode )
+    normalize-path file-status stat-st_mode ;
+
+: chmod-set-bit ( path mask ? -- )
+    [ dup stat-mode ] 2dip
+    [ bitor ] [ unmask ] if chmod io-error ;
+
+GENERIC# file-mode? 1 ( obj mask -- ? )
+
+M: integer file-mode? mask? ;
+M: string file-mode? [ stat-mode ] dip mask? ;
+M: file-info file-mode? [ permissions>> ] dip mask? ;
+
+PRIVATE>
+
+: ch>file-type ( ch -- type )
+    {
+        { CHAR: b [ +block-device+ ] }
+        { CHAR: c [ +character-device+ ] }
+        { CHAR: d [ +directory+ ] }
+        { CHAR: l [ +symbolic-link+ ] }
+        { CHAR: s [ +socket+ ] }
+        { CHAR: p [ +fifo+ ] }
+        { CHAR: - [ +regular-file+ ] }
+        [ drop +unknown+ ]
+    } case ;
+
+: file-type>ch ( type -- string )
+    {
+        { +block-device+ [ CHAR: b ] }
+        { +character-device+ [ CHAR: c ] }
+        { +directory+ [ CHAR: d ] }
+        { +symbolic-link+ [ CHAR: l ] }
+        { +socket+ [ CHAR: s ] }
+        { +fifo+ [ CHAR: p ] }
+        { +regular-file+ [ CHAR: - ] }
+        [ drop CHAR: - ]
+    } case ;
+
+: UID           OCT: 0004000 ; inline
+: GID           OCT: 0002000 ; inline
+: STICKY        OCT: 0001000 ; inline
+: USER-ALL      OCT: 0000700 ; inline
+: USER-READ     OCT: 0000400 ; inline
+: USER-WRITE    OCT: 0000200 ; inline
+: USER-EXECUTE  OCT: 0000100 ; inline
+: GROUP-ALL     OCT: 0000070 ; inline
+: GROUP-READ    OCT: 0000040 ; inline
+: GROUP-WRITE   OCT: 0000020 ; inline
+: GROUP-EXECUTE OCT: 0000010 ; inline
+: OTHER-ALL     OCT: 0000007 ; inline
+: OTHER-READ    OCT: 0000004 ; inline
+: OTHER-WRITE   OCT: 0000002 ; inline
+: OTHER-EXECUTE OCT: 0000001 ; inline
+
+: uid? ( obj -- ? ) UID file-mode? ;
+: gid? ( obj -- ? ) GID file-mode? ;
+: sticky? ( obj -- ? ) STICKY file-mode? ;
+: user-read? ( obj -- ? ) USER-READ file-mode? ;
+: user-write? ( obj -- ? ) USER-WRITE file-mode? ;
+: user-execute? ( obj -- ? ) USER-EXECUTE file-mode? ;
+: group-read? ( obj -- ? ) GROUP-READ file-mode? ;
+: group-write? ( obj -- ? ) GROUP-WRITE file-mode? ;
+: group-execute? ( obj -- ? ) GROUP-EXECUTE file-mode? ;
+: other-read? ( obj -- ? ) OTHER-READ file-mode? ;
+: other-write? ( obj -- ? ) OTHER-WRITE file-mode? ;
+: other-execute? ( obj -- ? ) OTHER-EXECUTE file-mode? ;
+
+: any-read? ( obj -- ? )
+    { [ user-read? ] [ group-read? ] [ other-read? ] } 1|| ;
+
+: any-write? ( obj -- ? )
+    { [ user-write? ] [ group-write? ] [ other-write? ] } 1|| ;
+
+: any-execute? ( obj -- ? )
+    { [ user-execute? ] [ group-execute? ] [ other-execute? ] } 1|| ;
+
+: set-uid ( path ? -- ) UID swap chmod-set-bit ;
+: set-gid ( path ? -- ) GID swap chmod-set-bit ;
+: set-sticky ( path ? -- ) STICKY swap chmod-set-bit ;
+: set-user-read ( path ? -- ) USER-READ swap chmod-set-bit ;
+: set-user-write ( path ? -- ) USER-WRITE swap chmod-set-bit ;
+: set-user-execute ( path ? -- ) USER-EXECUTE swap chmod-set-bit ;
+: set-group-read ( path ? -- ) GROUP-READ swap chmod-set-bit ;
+: set-group-write ( path ? -- ) GROUP-WRITE swap chmod-set-bit ;
+: set-group-execute ( path ? -- ) GROUP-EXECUTE swap chmod-set-bit ;
+: set-other-read ( path ? -- ) OTHER-READ swap chmod-set-bit ;
+: set-other-write ( path ? -- ) OTHER-WRITE swap chmod-set-bit ;
+: set-other-execute ( path ? -- ) OTHER-EXECUTE swap chmod-set-bit ;
+
+: set-file-permissions ( path n -- )
+    [ normalize-path ] dip chmod io-error ;
+
+: file-permissions ( path -- n )
+    normalize-path file-info permissions>> ;
+
+<PRIVATE
+
+: make-timeval-array ( array -- byte-array )
+    [ [ "timeval" <c-object> ] unless* ] map concat ;
+
+: timestamp>timeval ( timestamp -- timeval )
+    unix-1970 time- duration>microseconds make-timeval ;
+
+: timestamps>byte-array ( timestamps -- byte-array )
+    [ dup [ timestamp>timeval ] when ] map make-timeval-array ;
+
+PRIVATE>
+
+: set-file-times ( path timestamps -- )
+    #! set access, write
+    [ normalize-path ] dip
+    timestamps>byte-array utimes io-error ;
+
+: set-file-access-time ( path timestamp -- )
+    f 2array set-file-times ;
+
+: set-file-modified-time ( path timestamp -- )
+    f swap 2array set-file-times ;
+
+: set-file-ids ( path uid gid -- )
+    [ normalize-path ] 2dip
+    [ [ -1 ] unless* ] bi@ chown io-error ;
+
+GENERIC: set-file-user ( path string/id -- )
+
+GENERIC: set-file-group ( path string/id -- )
+
+M: integer set-file-user ( path uid -- )
+    f set-file-ids ;
+
+M: string set-file-user ( path string -- )
+    user-id f set-file-ids ;
+
+M: integer set-file-group ( path gid -- )
+    f swap set-file-ids ;
+
+M: string set-file-group ( path string -- )
+    group-id
+    f swap set-file-ids ;
+
+: file-user-id ( path -- uid )
+    normalize-path file-info uid>> ;
+
+: file-username ( path -- string )
+    file-user-id username ;
+
+: file-group-id ( path -- gid )
+    normalize-path file-info gid>> ;
+
+: file-group-name ( path -- string )
+    file-group-id group-name ;
diff --git a/basis/io/files/info/windows/tags.txt b/basis/io/files/info/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/info/windows/windows.factor b/basis/io/files/info/windows/windows.factor
new file mode 100755 (executable)
index 0000000..aecf42d
--- /dev/null
@@ -0,0 +1,204 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: byte-arrays math io.backend io.files.info
+io.files.windows io.files.windows.nt kernel windows.kernel32
+windows.time windows accessors alien.c-types combinators
+generalizations system alien.strings io.encodings.utf16n
+sequences splitting windows.errors fry continuations destructors
+calendar ascii combinators.short-circuit ;
+IN: io.files.info.windows
+
+TUPLE: windows-file-info < file-info attributes ;
+
+: WIN32_FIND_DATA>file-info ( WIN32_FIND_DATA -- file-info )
+    [ \ windows-file-info new ] dip
+    {
+        [ WIN32_FIND_DATA-dwFileAttributes win32-file-type >>type ]
+        [ WIN32_FIND_DATA-dwFileAttributes win32-file-attributes >>attributes ]
+        [
+            [ WIN32_FIND_DATA-nFileSizeLow ]
+            [ WIN32_FIND_DATA-nFileSizeHigh ] bi >64bit >>size
+        ]
+        [ WIN32_FIND_DATA-dwFileAttributes >>permissions ]
+        [ WIN32_FIND_DATA-ftCreationTime FILETIME>timestamp >>created ]
+        [ WIN32_FIND_DATA-ftLastWriteTime FILETIME>timestamp >>modified ]
+        [ WIN32_FIND_DATA-ftLastAccessTime FILETIME>timestamp >>accessed ]
+    } cleave ;
+
+: find-first-file-stat ( path -- WIN32_FIND_DATA )
+    "WIN32_FIND_DATA" <c-object> [
+        FindFirstFile
+        [ INVALID_HANDLE_VALUE = [ win32-error ] when ] keep
+        FindClose win32-error=0/f
+    ] keep ;
+
+: BY_HANDLE_FILE_INFORMATION>file-info ( HANDLE_FILE_INFORMATION -- file-info )
+    [ \ windows-file-info new ] dip
+    {
+        [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes win32-file-type >>type ]
+        [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes win32-file-attributes >>attributes ]
+        [
+            [ BY_HANDLE_FILE_INFORMATION-nFileSizeLow ]
+            [ BY_HANDLE_FILE_INFORMATION-nFileSizeHigh ] bi >64bit >>size
+        ]
+        [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes >>permissions ]
+        [
+            BY_HANDLE_FILE_INFORMATION-ftCreationTime
+            FILETIME>timestamp >>created
+        ]
+        [
+            BY_HANDLE_FILE_INFORMATION-ftLastWriteTime
+            FILETIME>timestamp >>modified
+        ]
+        [
+            BY_HANDLE_FILE_INFORMATION-ftLastAccessTime
+            FILETIME>timestamp >>accessed
+        ]
+        ! [ BY_HANDLE_FILE_INFORMATION-nNumberOfLinks ]
+        ! [
+          ! [ BY_HANDLE_FILE_INFORMATION-nFileIndexLow ]
+          ! [ BY_HANDLE_FILE_INFORMATION-nFileIndexHigh ] bi >64bit
+        ! ]
+    } cleave ;
+
+: get-file-information ( handle -- BY_HANDLE_FILE_INFORMATION )
+    [
+        "BY_HANDLE_FILE_INFORMATION" <c-object>
+        [ GetFileInformationByHandle win32-error=0/f ] keep
+    ] keep CloseHandle win32-error=0/f ;
+
+: get-file-information-stat ( path -- BY_HANDLE_FILE_INFORMATION )
+    dup
+    GENERIC_READ FILE_SHARE_READ f
+    OPEN_EXISTING FILE_FLAG_BACKUP_SEMANTICS f
+    CreateFileW dup INVALID_HANDLE_VALUE = [
+        drop find-first-file-stat WIN32_FIND_DATA>file-info
+    ] [
+        nip
+        get-file-information BY_HANDLE_FILE_INFORMATION>file-info
+    ] if ;
+
+M: windows file-info ( path -- info )
+    normalize-path get-file-information-stat ;
+
+M: windows link-info ( path -- info )
+    file-info ;
+
+: volume-information ( normalized-path -- volume-name volume-serial max-component flags type )
+    MAX_PATH 1+ [ <byte-array> ] keep
+    "DWORD" <c-object>
+    "DWORD" <c-object>
+    "DWORD" <c-object>
+    MAX_PATH 1+ [ <byte-array> ] keep
+    [ GetVolumeInformation win32-error=0/f ] 7 nkeep
+    drop 5 nrot drop
+    [ utf16n alien>string ] 4 ndip
+    utf16n alien>string ;
+
+: file-system-space ( normalized-path -- available-space total-space free-space )
+    "ULARGE_INTEGER" <c-object>
+    "ULARGE_INTEGER" <c-object>
+    "ULARGE_INTEGER" <c-object>
+    [ GetDiskFreeSpaceEx win32-error=0/f ] 3keep ;
+
+: calculate-file-system-info ( file-system-info -- file-system-info' )
+    {
+        [ dup [ total-space>> ] [ free-space>> ] bi - >>used-space drop ]
+        [ ]
+    } cleave ;
+
+TUPLE: win32-file-system-info < file-system-info max-component flags device-serial ;
+
+ERROR: not-absolute-path ;
+
+: root-directory ( string -- string' )
+    unicode-prefix ?head drop
+    dup {
+        [ length 2 >= ]
+        [ second CHAR: : = ]
+        [ first Letter? ]
+    } 1&& [ 2 head "\\" append ] [ not-absolute-path ] if ;
+
+M: winnt file-system-info ( path -- file-system-info )
+    normalize-path root-directory
+    dup [ volume-information ] [ file-system-space ] bi
+    \ win32-file-system-info new
+        swap *ulonglong >>free-space
+        swap *ulonglong >>total-space
+        swap *ulonglong >>available-space
+        swap >>type
+        swap *uint >>flags
+        swap *uint >>max-component
+        swap *uint >>device-serial
+        swap >>device-name
+        swap >>mount-point
+    calculate-file-system-info ;
+
+: volume>paths ( string -- array )
+    16384 "ushort" <c-array> tuck dup length
+    0 <uint> dup [ GetVolumePathNamesForVolumeName 0 = ] dip swap [
+        win32-error-string throw
+    ] [
+        *uint "ushort" heap-size * head
+        utf16n alien>string CHAR: \0 split
+    ] if ;
+
+: find-first-volume ( -- string handle )
+    MAX_PATH 1+ [ <byte-array> ] keep
+    dupd
+    FindFirstVolume dup win32-error=0/f
+    [ utf16n alien>string ] dip ;
+
+: find-next-volume ( handle -- string/f )
+    MAX_PATH 1+ [ <byte-array> tuck ] keep
+    FindNextVolume 0 = [
+        GetLastError ERROR_NO_MORE_FILES =
+        [ drop f ] [ win32-error-string throw ] if
+    ] [
+        utf16n alien>string
+    ] if ;
+
+: find-volumes ( -- array )
+    find-first-volume
+    [
+        '[
+            [ _ find-next-volume dup ]
+            [ ]
+            [ drop ] produce
+            swap prefix
+        ]
+    ] [ '[ _ FindVolumeClose win32-error=0/f ] ] bi [ ] cleanup ;
+
+M: winnt file-systems ( -- array )
+    find-volumes [ volume>paths ] map
+    concat [
+        [ file-system-info ]
+        [ drop \ file-system-info new swap >>mount-point ] recover
+    ] map ;
+
+: file-times ( path -- timestamp timestamp timestamp )
+    [
+        normalize-path open-existing &dispose handle>>
+        "FILETIME" <c-object>
+        "FILETIME" <c-object>
+        "FILETIME" <c-object>
+        [ GetFileTime win32-error=0/f ] 3keep
+        [ FILETIME>timestamp >local-time ] tri@
+    ] with-destructors ;
+
+: set-file-times ( path timestamp/f timestamp/f timestamp/f -- )
+    #! timestamp order: creation access write
+    [
+        [
+            normalize-path open-existing &dispose handle>>
+        ] 3dip (set-file-times)
+    ] with-destructors ;
+
+: set-file-create-time ( path timestamp -- )
+    f f set-file-times ;
+
+: set-file-access-time ( path timestamp -- )
+    [ f ] dip f set-file-times ;
+
+: set-file-write-time ( path timestamp -- )
+    [ f f ] dip set-file-times ;
diff --git a/basis/io/files/links/authors.txt b/basis/io/files/links/authors.txt
new file mode 100644 (file)
index 0000000..f372b57
--- /dev/null
@@ -0,0 +1,2 @@
+Slava Pestov
+Doug Coleman
diff --git a/basis/io/files/links/links-docs.factor b/basis/io/files/links/links-docs.factor
new file mode 100644 (file)
index 0000000..0e9a375
--- /dev/null
@@ -0,0 +1,27 @@
+USING: help.markup help.syntax io.files.info ;
+IN: io.files.links
+
+HELP: make-link
+{ $values { "target" "a path to the symbolic link's target" } { "symlink" "a path to new symbolic link" } }
+{ $description "Creates a symbolic link." } ;
+
+HELP: read-link
+{ $values { "symlink" "a path to an existing symbolic link" } { "path" "the path pointed to by the symbolic link" } }
+{ $description "Reads the symbolic link and returns its target path." } ;
+
+HELP: copy-link
+{ $values { "target" "a path to an existing symlink" } { "symlink" "a path to a new symbolic link" } }
+{ $description "Copies a symbolic link without following the link." } ;
+
+{ make-link read-link copy-link } related-words
+
+ARTICLE: "io.files.links" "Symbolic links"
+"Reading and creating links:"
+{ $subsection read-link }
+{ $subsection make-link }
+"Copying links:"
+{ $subsection copy-link }
+"Not all operating systems support symbolic links."
+{ $see-also link-info } ;
+
+ABOUT: "io.files.links"
diff --git a/basis/io/files/links/links.factor b/basis/io/files/links/links.factor
new file mode 100644 (file)
index 0000000..02e1a1b
--- /dev/null
@@ -0,0 +1,13 @@
+! Copyright (C) 2008 Slava Pestov, Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: system kernel vocabs.loader ;
+IN: io.files.links
+
+HOOK: make-link os ( target symlink -- )
+
+HOOK: read-link os ( symlink -- path )
+
+: copy-link ( target symlink -- )
+    [ read-link ] dip make-link ;
+
+os unix? [ "io.files.links.unix" require ] when
\ No newline at end of file
diff --git a/basis/io/files/links/summary.txt b/basis/io/files/links/summary.txt
new file mode 100644 (file)
index 0000000..6f5e459
--- /dev/null
@@ -0,0 +1 @@
+Working with symbolic links
diff --git a/basis/io/files/links/unix/tags.txt b/basis/io/files/links/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/links/unix/unix.factor b/basis/io/files/links/unix/unix.factor
new file mode 100644 (file)
index 0000000..69b31c6
--- /dev/null
@@ -0,0 +1,10 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: io.backend io.files.links system unix ;
+IN: io.files.links.unix
+
+M: unix make-link ( path1 path2 -- )
+    normalize-path symlink io-error ;
+
+M: unix read-link ( path -- path' )
+   normalize-path read-symbolic-link ;
diff --git a/basis/io/files/temp/temp-docs.factor b/basis/io/files/temp/temp-docs.factor
new file mode 100644 (file)
index 0000000..e9f4928
--- /dev/null
@@ -0,0 +1,9 @@
+USING: help.markup help.syntax ;
+IN: io.files.temp
+
+ARTICLE: "io.files.temp" "Temporary files"
+"Pathnames relative to Factor's temporary files directory:"
+{ $subsection temp-directory }
+{ $subsection temp-file } ;
+
+ABOUT: "io.files.temp"
diff --git a/basis/io/files/temp/temp.factor b/basis/io/files/temp/temp.factor
new file mode 100644 (file)
index 0000000..7ace219
--- /dev/null
@@ -0,0 +1,10 @@
+! Copyright (C) 2008 Slava Pestov, Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel io.pathnames io.directories ;
+IN: io.files.temp
+
+: temp-directory ( -- path )
+    "temp" resource-path dup make-directories ;
+
+: temp-file ( name -- path )
+    temp-directory prepend-path ;
\ No newline at end of file
diff --git a/basis/io/files/types/types-docs.factor b/basis/io/files/types/types-docs.factor
new file mode 100644 (file)
index 0000000..a640285
--- /dev/null
@@ -0,0 +1,40 @@
+USING: help.markup help.syntax ;
+IN: io.files.types
+
+HELP: +regular-file+
+{ $description "A regular file. This type exists on all platforms. See " { $link "io.files" } " for words operating on files." } ;
+
+HELP: +directory+
+{ $description "A directory. This type exists on all platforms. See " { $link "io.directories" } " for words operating on directories." } ;
+
+HELP: +symbolic-link+
+{ $description "A symbolic link file.  This type is currently implemented on Unix platforms only. See " { $link "io.files.links" } " for words operating on symbolic links." } ;
+
+HELP: +character-device+
+{ $description "A Unix character device file. This type exists on Unix platforms only." } ;
+
+HELP: +block-device+
+{ $description "A Unix block device file. This type exists on Unix platforms only." } ;
+
+HELP: +fifo+
+{ $description "A Unix fifo file. This type exists on Unix platforms only." } ;
+
+HELP: +socket+
+{ $description "A Unix socket file. This type exists on Unix platforms only." } ;
+
+HELP: +unknown+
+{ $description "A unknown file type." } ;
+
+ARTICLE: "file-types" "File types"
+"Platform-independent types:"
+{ $subsection +regular-file+ }
+{ $subsection +directory+ }
+"Platform-specific types:"
+{ $subsection +character-device+ }
+{ $subsection +block-device+ }
+{ $subsection +fifo+ }
+{ $subsection +symbolic-link+ }
+{ $subsection +socket+ }
+{ $subsection +unknown+ } ;
+
+ABOUT: "file-types"
diff --git a/basis/io/files/types/types.factor b/basis/io/files/types/types.factor
new file mode 100644 (file)
index 0000000..bf8be9e
--- /dev/null
@@ -0,0 +1,13 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+IN: io.files.types
+
+SYMBOL: +regular-file+
+SYMBOL: +directory+
+SYMBOL: +symbolic-link+
+SYMBOL: +character-device+
+SYMBOL: +block-device+
+SYMBOL: +fifo+
+SYMBOL: +socket+
+SYMBOL: +whiteout+
+SYMBOL: +unknown+
index bfde09dc487b02532bcf22a4f67c968f180b73f8..681cd94a38043ff5363babe93cf61b7626ad4ecc 100644 (file)
@@ -1,5 +1,5 @@
 USING: help.markup help.syntax io io.ports kernel math
-io.files.unique.private math.parser io.files ;
+io.pathnames io.directories math.parser io.files ;
 IN: io.files.unique
 
 HELP: temporary-path
index 178e4572d0af9a14ec6226ad720f96c9448df971..8f2e32cea23bdfce780dc13f4775c0acdbf286c6 100644 (file)
@@ -1,5 +1,6 @@
 USING: io.encodings.ascii sequences strings io io.files accessors
-tools.test kernel io.files.unique namespaces continuations ;
+tools.test kernel io.files.unique namespaces continuations
+io.files.info io.pathnames ;
 IN: io.files.unique.tests
 
 [ 123 ] [
index 66540fb48ed24c71e6264b9b8b5164f6b0818b64..02f4d6080c705c27d338b5214fde80b8af962ab3 100644 (file)
@@ -1,8 +1,9 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel math math.bitwise math.parser random sequences
-continuations namespaces io.files io arrays system
-combinators vocabs.loader fry io.backend ;
+USING: arrays combinators continuations fry io io.backend
+io.directories io.directories.hierarchy io.files io.pathnames
+kernel math math.bitwise math.parser namespaces random
+sequences system vocabs.loader ;
 IN: io.files.unique
 
 HOOK: touch-unique-file io-backend ( path -- )
@@ -54,6 +55,6 @@ PRIVATE>
     '[ _ with-directory ] [ delete-tree ] bi ; inline
 
 {
-    { [ os unix? ] [ "io.unix.files.unique" ] }
-    { [ os windows? ] [ "io.windows.files.unique" ] }
+    { [ os unix? ] [ "io.files.unique.unix" ] }
+    { [ os windows? ] [ "io.files.unique.windows" ] }
 } cond require
diff --git a/basis/io/files/unique/unix/tags.txt b/basis/io/files/unique/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/unique/unix/unix.factor b/basis/io/files/unique/unix/unix.factor
new file mode 100644 (file)
index 0000000..ed4e120
--- /dev/null
@@ -0,0 +1,13 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel io.ports io.backend.unix math.bitwise
+unix system io.files.unique ;
+IN: io.files.unique.unix
+
+: open-unique-flags ( -- flags )
+    { O_RDWR O_CREAT O_EXCL } flags ;
+
+M: unix touch-unique-file ( path -- )
+    open-unique-flags file-mode open-file close-file ;
+
+M: unix temporary-path ( -- path ) "/tmp" ;
diff --git a/basis/io/files/unique/windows/tags.txt b/basis/io/files/unique/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/unique/windows/windows.factor b/basis/io/files/unique/windows/windows.factor
new file mode 100644 (file)
index 0000000..47f3099
--- /dev/null
@@ -0,0 +1,10 @@
+USING: kernel system windows.kernel32 io.backend.windows
+io.files.windows io.ports windows destructors environment
+io.files.unique ;
+IN: io.files.unique.windows
+
+M: windows touch-unique-file ( path -- )
+    GENERIC_WRITE CREATE_NEW 0 open-file dispose ;
+
+M: windows temporary-path ( -- path )
+    "TEMP" os-env ;
diff --git a/basis/io/files/unix/authors.txt b/basis/io/files/unix/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/files/unix/summary.txt b/basis/io/files/unix/summary.txt
new file mode 100644 (file)
index 0000000..57527be
--- /dev/null
@@ -0,0 +1 @@
+Implementation of reading and writing files on Unix-like systems
diff --git a/basis/io/files/unix/tags.txt b/basis/io/files/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/unix/unix-tests.factor b/basis/io/files/unix/unix-tests.factor
new file mode 100644 (file)
index 0000000..48a128d
--- /dev/null
@@ -0,0 +1,164 @@
+USING: tools.test io.files io.files.temp io.pathnames
+io.directories io.files.info io.files.info.unix continuations
+kernel io.files.unix math.bitwise calendar accessors
+math.functions math unix.users unix.groups arrays sequences ;
+IN: io.files.unix.tests
+
+[ "/usr/libexec/" ] [ "/usr/libexec/awk/" parent-directory ] unit-test
+[ "/etc/" ] [ "/etc/passwd" parent-directory ] unit-test
+[ "/" ] [ "/etc/" parent-directory ] unit-test
+[ "/" ] [ "/etc" parent-directory ] unit-test
+[ "/" ] [ "/" parent-directory ] unit-test
+
+[ f ] [ "" root-directory? ] unit-test
+[ t ] [ "/" root-directory? ] unit-test
+[ t ] [ "//" root-directory? ] unit-test
+[ t ] [ "///////" root-directory? ] unit-test
+
+[ "/" ] [ "/" file-name ] unit-test
+[ "///" ] [ "///" file-name ] unit-test
+
+[ "/" ] [ "/" "../.." append-path ] unit-test
+[ "/" ] [ "/" "../../" append-path ] unit-test
+[ "/lib" ] [ "/" "../lib" append-path ] unit-test
+[ "/lib/" ] [ "/" "../lib/" append-path ] unit-test
+[ "/lib" ] [ "/" "../../lib" append-path ] unit-test
+[ "/lib/" ] [ "/" "../../lib/" append-path ] unit-test
+
+[ "/lib" ] [ "/usr/" "/lib" append-path ] unit-test
+[ "/lib/" ] [ "/usr/" "/lib/" append-path ] unit-test
+[ "/lib/bux" ] [ "/usr" "/lib/bux" append-path ] unit-test
+[ "/lib/bux/" ] [ "/usr" "/lib/bux/" append-path ] unit-test
+[ t ] [ "/foo" absolute-path? ] unit-test
+
+: test-file ( -- path )
+    "permissions" temp-file ;
+
+: prepare-test-file ( -- )
+    [ test-file delete-file ] ignore-errors
+    test-file touch-file ;
+
+: perms ( -- n )
+    test-file file-permissions OCT: 7777 mask ;
+
+prepare-test-file
+
+[ t ]
+[ test-file { USER-ALL GROUP-ALL OTHER-ALL } flags set-file-permissions perms OCT: 777 = ] unit-test
+
+[ t ] [ test-file user-read? ] unit-test
+[ t ] [ test-file user-write? ] unit-test
+[ t ] [ test-file user-execute? ] unit-test
+[ t ] [ test-file group-read? ] unit-test
+[ t ] [ test-file group-write? ] unit-test
+[ t ] [ test-file group-execute? ] unit-test
+[ t ] [ test-file other-read? ] unit-test
+[ t ] [ test-file other-write? ] unit-test
+[ t ] [ test-file other-execute? ] unit-test
+
+[ t ] [ test-file f set-other-execute perms OCT: 776 = ] unit-test
+[ f ] [ test-file file-info other-execute? ] unit-test
+
+[ t ] [ test-file f set-other-write perms OCT: 774 = ] unit-test
+[ f ] [ test-file file-info other-write? ] unit-test
+
+[ t ] [ test-file f set-other-read perms OCT: 770 = ] unit-test
+[ f ] [ test-file file-info other-read? ] unit-test
+
+[ t ] [ test-file f set-group-execute perms OCT: 760 = ] unit-test
+[ f ] [ test-file file-info group-execute? ] unit-test
+
+[ t ] [ test-file f set-group-write perms OCT: 740 = ] unit-test
+[ f ] [ test-file file-info group-write? ] unit-test
+
+[ t ] [ test-file f set-group-read perms OCT: 700 = ] unit-test
+[ f ] [ test-file file-info group-read? ] unit-test
+
+[ t ] [ test-file f set-user-execute perms OCT: 600 = ] unit-test
+[ f ] [ test-file file-info other-execute? ] unit-test
+
+[ t ] [ test-file f set-user-write perms OCT: 400 = ] unit-test
+[ f ] [ test-file file-info other-write? ] unit-test
+
+[ t ] [ test-file f set-user-read perms OCT: 000 = ] unit-test
+[ f ] [ test-file file-info other-read? ] unit-test
+
+[ t ]
+[ test-file { USER-ALL GROUP-ALL OTHER-EXECUTE } flags set-file-permissions perms OCT: 771 = ] unit-test
+
+prepare-test-file
+
+[ t ]
+[
+    test-file now
+    [ set-file-access-time ] 2keep
+    [ file-info accessed>> ]
+    [ [ [ truncate >integer ] change-second ] bi@ ] bi* =
+] unit-test
+
+[ t ]
+[
+    test-file now
+    [ set-file-modified-time ] 2keep
+    [ file-info modified>> ]
+    [ [ [ truncate >integer ] change-second ] bi@ ] bi* =
+] unit-test
+
+[ t ]
+[
+    test-file now [ dup 2array set-file-times ] 2keep
+    [ file-info [ modified>> ] [ accessed>> ] bi ] dip
+    3array
+    [ [ truncate >integer ] change-second ] map all-equal?
+] unit-test
+
+[ ] [ test-file f now 2array set-file-times ] unit-test
+[ ] [ test-file now f 2array set-file-times ] unit-test
+[ ] [ test-file f f 2array set-file-times ] unit-test
+
+
+[ ] [ test-file real-username set-file-user ] unit-test
+[ ] [ test-file real-user-id set-file-user ] unit-test
+[ ] [ test-file real-group-name set-file-group ] unit-test
+[ ] [ test-file real-group-id set-file-group ] unit-test
+
+[ t ] [ test-file file-username real-username = ] unit-test
+[ t ] [ test-file file-group-name real-group-name = ] unit-test
+
+[ ]
+[ test-file real-user-id real-group-id set-file-ids ] unit-test
+
+[ ]
+[ test-file f real-group-id set-file-ids ] unit-test
+
+[ ]
+[ test-file real-user-id f set-file-ids ] unit-test
+
+[ ]
+[ test-file f f set-file-ids ] unit-test
+
+[ t ] [ OCT: 4000 uid? ] unit-test
+[ t ] [ OCT: 2000 gid? ] unit-test
+[ t ] [ OCT: 1000 sticky? ] unit-test
+[ t ] [ OCT: 400 user-read? ] unit-test
+[ t ] [ OCT: 200 user-write? ] unit-test
+[ t ] [ OCT: 100 user-execute? ] unit-test
+[ t ] [ OCT: 040 group-read? ] unit-test
+[ t ] [ OCT: 020 group-write? ] unit-test
+[ t ] [ OCT: 010 group-execute? ] unit-test
+[ t ] [ OCT: 004 other-read? ] unit-test
+[ t ] [ OCT: 002 other-write? ] unit-test
+[ t ] [ OCT: 001 other-execute? ] unit-test
+
+[ f ] [ 0 uid? ] unit-test
+[ f ] [ 0 gid? ] unit-test
+[ f ] [ 0 sticky? ] unit-test
+[ f ] [ 0 user-read? ] unit-test
+[ f ] [ 0 user-write? ] unit-test
+[ f ] [ 0 user-execute? ] unit-test
+[ f ] [ 0 group-read? ] unit-test
+[ f ] [ 0 group-write? ] unit-test
+[ f ] [ 0 group-execute? ] unit-test
+[ f ] [ 0 other-read? ] unit-test
+[ f ] [ 0 other-write? ] unit-test
+[ f ] [ 0 other-execute? ] unit-test
diff --git a/basis/io/files/unix/unix.factor b/basis/io/files/unix/unix.factor
new file mode 100644 (file)
index 0000000..9518d1c
--- /dev/null
@@ -0,0 +1,42 @@
+! Copyright (C) 2005, 2008 Slava Pestov, Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: unix byte-arrays kernel io.backend.unix math.bitwise
+io.ports io.files io.files.private io.pathnames environment
+destructors system ;
+IN: io.files.unix
+
+M: unix cwd ( -- path )
+    MAXPATHLEN [ <byte-array> ] keep getcwd
+    [ (io-error) ] unless* ;
+
+M: unix cd ( path -- ) [ chdir ] unix-system-call drop ;
+
+: read-flags ( -- n ) O_RDONLY ; inline
+
+: open-read ( path -- fd ) O_RDONLY file-mode open-file ;
+
+M: unix (file-reader) ( path -- stream )
+    open-read <fd> init-fd <input-port> ;
+
+: write-flags ( -- n )
+    { O_WRONLY O_CREAT O_TRUNC } flags ; inline
+
+: open-write ( path -- fd )
+    write-flags file-mode open-file ;
+
+M: unix (file-writer) ( path -- stream )
+    open-write <fd> init-fd <output-port> ;
+
+: append-flags ( -- n )
+    { O_WRONLY O_APPEND O_CREAT } flags ; inline
+
+: open-append ( path -- fd )
+    [
+        append-flags file-mode open-file |dispose
+        dup 0 SEEK_END lseek io-error
+    ] with-destructors ;
+
+M: unix (file-appender) ( path -- stream )
+    open-append <fd> init-fd <output-port> ;
+
+M: unix home "HOME" os-env ;
diff --git a/basis/io/files/windows/nt/authors.txt b/basis/io/files/windows/nt/authors.txt
new file mode 100755 (executable)
index 0000000..026f4cd
--- /dev/null
@@ -0,0 +1,3 @@
+Doug Coleman
+Slava Pestov
+Mackenzie Straight
diff --git a/basis/io/files/windows/nt/nt-tests.factor b/basis/io/files/windows/nt/nt-tests.factor
new file mode 100644 (file)
index 0000000..e934dc8
--- /dev/null
@@ -0,0 +1,55 @@
+USING: io.files io.pathnames kernel tools.test io.backend
+io.files.windows.nt splitting sequences ;
+IN: io.files.windows.nt.tests
+
+[ f ] [ "\\foo" absolute-path? ] unit-test
+[ t ] [ "\\\\?\\c:\\foo" absolute-path? ] unit-test
+[ t ] [ "\\\\?\\c:\\" absolute-path? ] unit-test
+[ t ] [ "\\\\?\\c:" absolute-path? ] unit-test
+[ t ] [ "c:\\foo" absolute-path? ] unit-test
+[ t ] [ "c:" absolute-path? ] unit-test
+[ t ] [ "c:\\" absolute-path? ] unit-test
+[ f ] [ "/cygdrive/c/builds" absolute-path? ] unit-test
+
+[ "c:\\foo\\" ] [ "c:\\foo\\bar" parent-directory ] unit-test
+[ "c:\\" ] [ "c:\\foo\\" parent-directory ] unit-test
+[ "c:\\" ] [ "c:\\foo" parent-directory ] unit-test
+! { "c:" "c:\\" "c:/" } [ directory ] each -- all do the same thing
+[ "c:\\" ] [ "c:\\" parent-directory ] unit-test
+[ "Z:\\" ] [ "Z:\\" parent-directory ] unit-test
+[ "c:" ] [ "c:" parent-directory ] unit-test
+[ "Z:" ] [ "Z:" parent-directory ] unit-test
+
+[ f ] [ "" root-directory? ] unit-test
+[ t ] [ "\\" root-directory? ] unit-test
+[ t ] [ "\\\\" root-directory? ] unit-test
+[ t ] [ "/" root-directory? ] unit-test
+[ t ] [ "//" root-directory? ] unit-test
+[ t ] [ "c:\\" trim-right-separators root-directory? ] unit-test
+[ t ] [ "Z:\\" trim-right-separators root-directory? ] unit-test
+[ f ] [ "c:\\foo" root-directory? ] unit-test
+[ f ] [ "." root-directory? ] unit-test
+[ f ] [ ".." root-directory? ] unit-test
+[ t ] [ "\\\\?\\c:\\" root-directory? ] unit-test
+[ t ] [ "\\\\?\\c:" root-directory? ] unit-test
+[ f ] [ "\\\\?\\c:\\bar" root-directory? ] unit-test
+
+[ "\\foo\\bar" ] [ "/foo/bar" normalize-path ":" split1 nip ] unit-test
+
+[ "\\\\?\\C:\\builds\\factor\\log.txt" ] [
+    "C:\\builds\\factor\\12345\\"
+    "..\\log.txt" append-path normalize-path
+] unit-test
+
+[ "\\\\?\\C:\\builds\\" ] [
+    "C:\\builds\\factor\\12345\\"
+    "..\\.." append-path normalize-path
+] unit-test
+
+[ "\\\\?\\C:\\builds\\" ] [
+    "C:\\builds\\factor\\12345\\"
+    "..\\.." append-path normalize-path
+] unit-test
+
+[ "c:\\blah" ] [ "c:\\foo\\bar" "\\blah" append-path ] unit-test
+[ t ] [ "" resource-path 2 tail exists? ] unit-test
diff --git a/basis/io/files/windows/nt/nt.factor b/basis/io/files/windows/nt/nt.factor
new file mode 100755 (executable)
index 0000000..3241d19
--- /dev/null
@@ -0,0 +1,61 @@
+USING: continuations destructors io.buffers io.files io.backend
+io.timeouts io.ports io.pathnames io.files.private
+io.backend.windows io.files.windows io.encodings.utf16n windows
+windows.kernel32 kernel libc math threads system environment
+alien.c-types alien.arrays alien.strings sequences combinators
+combinators.short-circuit ascii splitting alien strings assocs
+namespaces make accessors tr windows.time ;
+IN: io.files.windows.nt
+
+M: winnt cwd
+    MAX_UNICODE_PATH dup "ushort" <c-array>
+    [ GetCurrentDirectory win32-error=0/f ] keep
+    utf16n alien>string ;
+
+M: winnt cd
+    SetCurrentDirectory win32-error=0/f ;
+
+: unicode-prefix ( -- seq )
+    "\\\\?\\" ; inline
+
+M: winnt root-directory? ( path -- ? )
+    {
+        { [ dup empty? ] [ drop f ] }
+        { [ dup [ path-separator? ] all? ] [ drop t ] }
+        { [ dup trim-right-separators { [ length 2 = ]
+          [ second CHAR: : = ] } 1&& ] [ drop t ] }
+        { [ dup unicode-prefix head? ]
+          [ trim-right-separators length unicode-prefix length 2 + = ] }
+        [ drop f ]
+    } cond ;
+
+: prepend-prefix ( string -- string' )
+    dup unicode-prefix head? [
+        unicode-prefix prepend
+    ] unless ;
+
+TR: normalize-separators "/" "\\" ;
+
+M: winnt normalize-path ( string -- string' )
+    (normalize-path)
+    normalize-separators
+    prepend-prefix ;
+
+M: winnt CreateFile-flags ( DWORD -- DWORD )
+    FILE_FLAG_OVERLAPPED bitor ;
+
+<PRIVATE
+
+: windows-file-size ( path -- size )
+    normalize-path 0 "WIN32_FILE_ATTRIBUTE_DATA" <c-object>
+    [ GetFileAttributesEx win32-error=0/f ] keep
+    [ WIN32_FILE_ATTRIBUTE_DATA-nFileSizeLow ]
+    [ WIN32_FILE_ATTRIBUTE_DATA-nFileSizeHigh ] bi >64bit ;
+
+PRIVATE>
+
+M: winnt open-append
+    [ dup windows-file-size ] [ drop 0 ] recover
+    [ (open-append) ] dip >>ptr ;
+
+M: winnt home "USERPROFILE" os-env ;
diff --git a/basis/io/files/windows/nt/tags.txt b/basis/io/files/windows/nt/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/windows/tags.txt b/basis/io/files/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/files/windows/windows.factor b/basis/io/files/windows/windows.factor
new file mode 100755 (executable)
index 0000000..842f1ec
--- /dev/null
@@ -0,0 +1,133 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.c-types io.binary io.backend io.files
+io.files.types io.buffers io.encodings.utf16n io.ports
+io.backend.windows kernel math splitting fry alien.strings
+windows windows.kernel32 windows.time calendar combinators
+math.functions sequences namespaces make words system
+destructors accessors math.bitwise continuations windows.errors
+arrays byte-arrays generalizations ;
+IN: io.files.windows
+
+: open-file ( path access-mode create-mode flags -- handle )
+    [
+        [ share-mode default-security-attributes ] 2dip
+        CreateFile-flags f CreateFile opened-file
+    ] with-destructors ;
+
+: open-pipe-r/w ( path -- win32-file )
+    { GENERIC_READ GENERIC_WRITE } flags
+    OPEN_EXISTING 0 open-file ;
+
+: open-read ( path -- win32-file )
+    GENERIC_READ OPEN_EXISTING 0 open-file 0 >>ptr ;
+
+: open-write ( path -- win32-file )
+    GENERIC_WRITE CREATE_ALWAYS 0 open-file 0 >>ptr ;
+
+: (open-append) ( path -- win32-file )
+    GENERIC_WRITE OPEN_ALWAYS 0 open-file ;
+
+: open-existing ( path -- win32-file )
+    { GENERIC_READ GENERIC_WRITE } flags
+    share-mode
+    f
+    OPEN_EXISTING
+    FILE_FLAG_BACKUP_SEMANTICS
+    f CreateFileW dup win32-error=0/f <win32-file> ;
+
+: maybe-create-file ( path -- win32-file ? )
+    #! return true if file was just created
+    { GENERIC_READ GENERIC_WRITE } flags
+    share-mode
+    f
+    OPEN_ALWAYS
+    0 CreateFile-flags
+    f CreateFileW dup win32-error=0/f <win32-file>
+    GetLastError ERROR_ALREADY_EXISTS = not ;
+
+: set-file-pointer ( handle length method -- )
+    [ dupd d>w/w <uint> ] dip SetFilePointer
+    INVALID_SET_FILE_POINTER = [
+        CloseHandle "SetFilePointer failed" throw
+    ] when drop ;
+
+HOOK: open-append os ( path -- win32-file )
+
+TUPLE: FileArgs
+    hFile lpBuffer nNumberOfBytesToRead
+    lpNumberOfBytesRet lpOverlapped ;
+
+C: <FileArgs> FileArgs
+
+: make-FileArgs ( port -- <FileArgs> )
+    {
+        [ handle>> check-disposed ]
+        [ handle>> handle>> ]
+        [ buffer>> ]
+        [ buffer>> buffer-length ]
+        [ drop "DWORD" <c-object> ]
+        [ FileArgs-overlapped ]
+    } cleave <FileArgs> ;
+
+: setup-read ( <FileArgs> -- hFile lpBuffer nNumberOfBytesToRead lpNumberOfBytesRead lpOverlapped )
+    {
+        [ hFile>> ]
+        [ lpBuffer>> buffer-end ]
+        [ lpBuffer>> buffer-capacity ]
+        [ lpNumberOfBytesRet>> ]
+        [ lpOverlapped>> ]
+    } cleave ;
+
+: setup-write ( <FileArgs> -- hFile lpBuffer nNumberOfBytesToWrite lpNumberOfBytesWritten lpOverlapped )
+    {
+        [ hFile>> ]
+        [ lpBuffer>> buffer@ ]
+        [ lpBuffer>> buffer-length ]
+        [ lpNumberOfBytesRet>> ]
+        [ lpOverlapped>> ]
+    } cleave ;
+
+M: windows (file-reader) ( path -- stream )
+    open-read <input-port> ;
+
+M: windows (file-writer) ( path -- stream )
+    open-write <output-port> ;
+
+M: windows (file-appender) ( path -- stream )
+    open-append <output-port> ;
+
+SYMBOLS: +read-only+ +hidden+ +system+
++archive+ +device+ +normal+ +temporary+
++sparse-file+ +reparse-point+ +compressed+ +offline+
++not-content-indexed+ +encrypted+ ;
+
+: win32-file-attribute ( n attr symbol -- )
+    rot mask? [ , ] [ drop ] if ;
+
+: win32-file-attributes ( n -- seq )
+    [
+        {
+            [ +read-only+ FILE_ATTRIBUTE_READONLY win32-file-attribute ]
+            [ +hidden+ FILE_ATTRIBUTE_HIDDEN win32-file-attribute ]
+            [ +system+ FILE_ATTRIBUTE_SYSTEM win32-file-attribute ]
+            [ +directory+ FILE_ATTRIBUTE_DIRECTORY win32-file-attribute ]
+            [ +archive+ FILE_ATTRIBUTE_ARCHIVE win32-file-attribute ]
+            [ +device+ FILE_ATTRIBUTE_DEVICE win32-file-attribute ]
+            [ +normal+ FILE_ATTRIBUTE_NORMAL win32-file-attribute ]
+            [ +temporary+ FILE_ATTRIBUTE_TEMPORARY win32-file-attribute ]
+            [ +sparse-file+ FILE_ATTRIBUTE_SPARSE_FILE win32-file-attribute ]
+            [ +reparse-point+ FILE_ATTRIBUTE_REPARSE_POINT win32-file-attribute ]
+            [ +compressed+ FILE_ATTRIBUTE_COMPRESSED win32-file-attribute ]
+            [ +offline+ FILE_ATTRIBUTE_OFFLINE win32-file-attribute ]
+            [ +not-content-indexed+ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED win32-file-attribute ]
+            [ +encrypted+ FILE_ATTRIBUTE_ENCRYPTED win32-file-attribute ]
+        } cleave
+    ] { } make ;
+
+: win32-file-type ( n -- symbol )
+    FILE_ATTRIBUTE_DIRECTORY mask? +directory+ +regular-file+ ? ;
+
+: (set-file-times) ( handle timestamp/f timestamp/f timestamp/f -- )
+    [ timestamp>FILETIME ] tri@
+    SetFileTime win32-error=0/f ;
old mode 100644 (file)
new mode 100755 (executable)
index 7bafb95..f580922
@@ -261,8 +261,7 @@ M: object run-pipeline-element
     drop ;
 
 {
-    { [ os unix? ] [ "io.unix.launcher" require ] }
-    { [ os winnt? ] [ "io.windows.nt.launcher" require ] }
-    { [ os wince? ] [ "io.windows.launcher" require ] }
+    { [ os unix? ] [ "io.launcher.unix" require ] }
+    { [ os winnt? ] [ "io.launcher.windows.nt" require ] }
     [ ]
 } cond
diff --git a/basis/io/launcher/unix/authors.txt b/basis/io/launcher/unix/authors.txt
new file mode 100755 (executable)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/launcher/unix/parser/parser-tests.factor b/basis/io/launcher/unix/parser/parser-tests.factor
new file mode 100644 (file)
index 0000000..07502e8
--- /dev/null
@@ -0,0 +1,33 @@
+IN: io.launcher.unix.parser.tests
+USING: io.launcher.unix.parser tools.test ;
+
+[ "" tokenize-command ] must-fail
+[ "   " tokenize-command ] must-fail
+[ V{ "a" } ] [ "a" tokenize-command ] unit-test
+[ V{ "abc" } ] [ "abc" tokenize-command ] unit-test
+[ V{ "abc" } ] [ "abc   " tokenize-command ] unit-test
+[ V{ "abc" } ] [ "   abc" tokenize-command ] unit-test
+[ V{ "abc" "def" } ] [ "abc def" tokenize-command ] unit-test
+[ V{ "abc def" } ] [ "abc\\ def" tokenize-command ] unit-test
+[ V{ "abc\\" "def" } ] [ "abc\\\\ def" tokenize-command ] unit-test
+[ V{ "abc\\ def" } ] [ "'abc\\\\ def'" tokenize-command ] unit-test
+[ V{ "abc\\ def" } ] [ "  'abc\\\\ def'" tokenize-command ] unit-test
+[ V{ "abc\\ def" "hey" } ] [ "'abc\\\\ def' hey" tokenize-command ] unit-test
+[ V{ "abc def" "hey" } ] [ "'abc def' \"hey\"" tokenize-command ] unit-test
+[ "'abc def' \"hey" tokenize-command ] must-fail
+[ "'abc def" tokenize-command ] must-fail
+[ V{ "abc def" "h\"ey" } ] [ "'abc def' \"h\\\"ey\"  " tokenize-command ] unit-test
+
+[
+    V{
+        "Hello world.app/Contents/MacOS/hello-ui"
+        "-i=boot.macosx-ppc.image"
+        "-include= math compiler ui"
+        "-deploy-vocab=hello-ui"
+        "-output-image=Hello world.app/Contents/Resources/hello-ui.image"
+        "-no-stack-traces"
+        "-no-user-init"
+    }
+] [
+    "\"Hello world.app/Contents/MacOS/hello-ui\" -i=boot.macosx-ppc.image \"-include= math compiler ui\" -deploy-vocab=hello-ui \"-output-image=Hello world.app/Contents/Resources/hello-ui.image\" -no-stack-traces -no-user-init" tokenize-command
+] unit-test
diff --git a/basis/io/launcher/unix/parser/parser.factor b/basis/io/launcher/unix/parser/parser.factor
new file mode 100644 (file)
index 0000000..97e6dee
--- /dev/null
@@ -0,0 +1,33 @@
+! Copyright (C) 2008 Slava Pestov
+! See http://factorcode.org/license.txt for BSD license.
+USING: peg peg.parsers kernel sequences strings words ;
+IN: io.launcher.unix.parser
+
+! Our command line parser. Supported syntax:
+! foo bar baz -- simple tokens
+! foo\ bar -- escaping the space
+! 'foo bar' -- quotation
+! "foo bar" -- quotation
+: 'escaped-char' ( -- parser )
+    "\\" token any-char 2seq [ second ] action ;
+
+: 'quoted-char' ( delimiter -- parser' )
+    'escaped-char'
+    swap [ member? not ] curry satisfy
+    2choice ; inline
+
+: 'quoted' ( delimiter -- parser )
+    dup 'quoted-char' repeat0 swap dup surrounded-by ;
+
+: 'unquoted' ( -- parser ) " '\"" 'quoted-char' repeat1 ;
+
+: 'argument' ( -- parser )
+    "\"" 'quoted'
+    "'" 'quoted'
+    'unquoted' 3choice
+    [ >string ] action ;
+
+PEG: tokenize-command ( command -- ast/f )
+    'argument' " " token repeat1 list-of
+    " " token repeat0 tuck pack
+    just ;
diff --git a/basis/io/launcher/unix/parser/tags.txt b/basis/io/launcher/unix/parser/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/launcher/unix/tags.txt b/basis/io/launcher/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/launcher/unix/unix-tests.factor b/basis/io/launcher/unix/unix-tests.factor
new file mode 100644 (file)
index 0000000..f375bb4
--- /dev/null
@@ -0,0 +1,138 @@
+IN: io.launcher.unix.tests
+USING: io.files io.files.temp io.directories io.pathnames
+tools.test io.launcher arrays io namespaces continuations math
+io.encodings.binary io.encodings.ascii accessors kernel
+sequences io.encodings.utf8 destructors io.streams.duplex locals
+concurrency.promises threads unix.process ;
+
+[ ] [
+    [ "launcher-test-1" temp-file delete-file ] ignore-errors
+] unit-test
+
+[ ] [
+    "touch"
+    "launcher-test-1" temp-file
+    2array
+    try-process
+] unit-test
+
+[ t ] [ "launcher-test-1" temp-file exists? ] unit-test
+
+[ ] [
+    [ "launcher-test-1" temp-file delete-file ] ignore-errors
+] unit-test
+
+[ ] [
+    <process>
+        "echo Hello" >>command
+        "launcher-test-1" temp-file >>stdout
+    try-process
+] unit-test
+
+[ "Hello\n" ] [
+    "cat"
+    "launcher-test-1" temp-file
+    2array
+    ascii <process-reader> contents
+] unit-test
+
+[ ] [
+    [ "launcher-test-1" temp-file delete-file ] ignore-errors
+] unit-test
+
+[ ] [
+    <process>
+        "cat" >>command
+        +closed+ >>stdin
+        "launcher-test-1" temp-file >>stdout
+    try-process
+] unit-test
+
+[ f ] [
+    "cat"
+    "launcher-test-1" temp-file
+    2array
+    ascii <process-reader> contents
+] unit-test
+
+[ ] [
+    2 [
+        "launcher-test-1" temp-file binary <file-appender> [
+            <process>
+                swap >>stdout
+                "echo Hello" >>command
+            try-process
+        ] with-disposal
+    ] times
+] unit-test
+
+[ "Hello\nHello\n" ] [
+    "cat"
+    "launcher-test-1" temp-file
+    2array
+    ascii <process-reader> contents
+] unit-test
+
+[ t ] [
+    <process>
+        "env" >>command
+        { { "A" "B" } } >>environment
+    ascii <process-reader> lines
+    "A=B" swap member?
+] unit-test
+
+[ { "A=B" } ] [
+    <process>
+        "env" >>command
+        { { "A" "B" } } >>environment
+        +replace-environment+ >>environment-mode
+    ascii <process-reader> lines
+] unit-test
+
+[ "hi\n" ] [
+    temp-directory [
+        [ "aloha" delete-file ] ignore-errors
+        <process>
+            { "echo" "hi" } >>command
+            "aloha" >>stdout
+        try-process
+    ] with-directory
+    temp-directory "aloha" append-path
+    utf8 file-contents
+] unit-test
+
+[ "append-test" temp-file delete-file ] ignore-errors
+
+[ "hi\nhi\n" ] [
+    2 [
+        <process>
+            "echo hi" >>command
+            "append-test" temp-file <appender> >>stdout
+        try-process
+    ] times
+    "append-test" temp-file utf8 file-contents
+] unit-test
+
+[ t ] [ "ls" utf8 <process-stream> contents >boolean ] unit-test
+
+[ "Hello world.\n" ] [
+    "cat" utf8 <process-stream> [
+        "Hello world.\n" write
+        output-stream get dispose
+        input-stream get contents
+    ] with-stream
+] unit-test
+
+! Killed processes were exiting with code 0 on FreeBSD
+[ f ] [
+    [let | p [ <promise> ]
+           s [ <promise> ] |
+       [
+           "sleep 1000" run-detached
+           [ p fulfill ] [ wait-for-process s fulfill ] bi
+       ] in-thread
+
+       p ?promise handle>> 9 kill drop
+       s ?promise 0 =
+    ]
+] unit-test
diff --git a/basis/io/launcher/unix/unix.factor b/basis/io/launcher/unix/unix.factor
new file mode 100644 (file)
index 0000000..ac25e4e
--- /dev/null
@@ -0,0 +1,106 @@
+! Copyright (C) 2007, 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types arrays assocs combinators
+continuations environment io io.backend io.backend.unix
+io.files io.files.private io.files.unix io.launcher
+io.launcher.unix.parser io.pathnames io.ports kernel math
+namespaces sequences strings system threads unix unix
+unix.process ;
+IN: io.launcher.unix
+
+! Search unix first
+USE: unix
+
+: get-arguments ( process -- seq )
+    command>> dup string? [ tokenize-command ] when ;
+
+: assoc>env ( assoc -- env )
+    [ "=" glue ] { } assoc>map ;
+
+: setup-priority ( process -- process )
+    dup priority>> [
+        H{
+            { +lowest-priority+ 20 }
+            { +low-priority+ 10 }
+            { +normal-priority+ 0 }
+            { +high-priority+ -10 }
+            { +highest-priority+ -20 }
+            { +realtime-priority+ -20 }
+        } at set-priority
+    ] when* ;
+
+: reset-fd ( fd -- )
+    [ F_SETFL 0 fcntl io-error ] [ F_SETFD 0 fcntl io-error ] bi ;
+
+: redirect-fd ( oldfd fd -- )
+    2dup = [ 2drop ] [ dup2 io-error ] if ;
+
+: redirect-file ( obj mode fd -- )
+    [ [ normalize-path ] dip file-mode open-file ] dip redirect-fd ;
+
+: redirect-file-append ( obj mode fd -- )
+    [ drop path>> normalize-path open-append ] dip redirect-fd ;
+
+: redirect-closed ( obj mode fd -- )
+    [ drop "/dev/null" ] 2dip redirect-file ;
+
+: redirect ( obj mode fd -- )
+    {
+        { [ pick not ] [ 3drop ] }
+        { [ pick string? ] [ redirect-file ] }
+        { [ pick appender? ] [ redirect-file-append ] }
+        { [ pick +closed+ eq? ] [ redirect-closed ] }
+        { [ pick fd? ] [ [ drop fd>> dup reset-fd ] dip redirect-fd ] }
+        [ [ underlying-handle ] 2dip redirect ]
+    } cond ;
+
+: ?closed ( obj -- obj' )
+    dup +closed+ eq? [ drop "/dev/null" ] when ;
+
+: setup-redirection ( process -- process )
+    dup stdin>> ?closed read-flags 0 redirect
+    dup stdout>> ?closed write-flags 1 redirect
+    dup stderr>> dup +stdout+ eq? [
+        drop 1 2 dup2 io-error
+    ] [
+        ?closed write-flags 2 redirect
+    ] if ;
+
+: setup-environment ( process -- process )
+    dup pass-environment? [
+        dup get-environment set-os-envs
+    ] when ;
+
+: spawn-process ( process -- * )
+    [ setup-priority ] [ 250 _exit ] recover
+    [ setup-redirection ] [ 251 _exit ] recover
+    [ current-directory get (normalize-path) cd ] [ 252 _exit ] recover
+    [ setup-environment ] [ 253 _exit ] recover
+    [ get-arguments exec-args-with-path ] [ 254 _exit ] recover
+    255 _exit ;
+
+M: unix current-process-handle ( -- handle ) getpid ;
+
+M: unix run-process* ( process -- pid )
+    [ spawn-process ] curry [ ] with-fork ;
+
+M: unix kill-process* ( pid -- )
+    SIGTERM kill io-error ;
+
+: find-process ( handle -- process )
+    processes get swap [ nip swap handle>> = ] curry
+    assoc-find 2drop ;
+
+TUPLE: signal n ;
+
+: code>status ( code -- obj )
+    dup WIFEXITED [ WEXITSTATUS ] [ WTERMSIG signal boa ] if ;
+
+M: unix wait-for-processes ( -- ? )
+    -1 0 <int> tuck WNOHANG waitpid
+    dup 0 <= [
+        2drop t
+    ] [
+        find-process dup
+        [ swap *int code>status notify-exit f ] [ 2drop f ] if
+    ] if ;
diff --git a/basis/io/launcher/windows/authors.txt b/basis/io/launcher/windows/authors.txt
new file mode 100755 (executable)
index 0000000..5674120
--- /dev/null
@@ -0,0 +1,2 @@
+Doug Coleman
+Slava Pestov
diff --git a/basis/io/launcher/windows/nt/authors.txt b/basis/io/launcher/windows/nt/authors.txt
new file mode 100755 (executable)
index 0000000..026f4cd
--- /dev/null
@@ -0,0 +1,3 @@
+Doug Coleman
+Slava Pestov
+Mackenzie Straight
diff --git a/basis/io/launcher/windows/nt/nt-tests.factor b/basis/io/launcher/windows/nt/nt-tests.factor
new file mode 100644 (file)
index 0000000..93b1e8c
--- /dev/null
@@ -0,0 +1,161 @@
+USING: io.launcher tools.test calendar accessors environment
+namespaces kernel system arrays io io.files io.encodings.ascii
+sequences parser assocs hashtables math continuations eval
+io.files.temp io.directories io.pathnames ;
+IN: io.launcher.windows.nt.tests
+
+[ ] [
+    <process>
+        "notepad" >>command
+        1/2 seconds >>timeout
+    "notepad" set
+] unit-test
+
+[ f ] [ "notepad" get process-running? ] unit-test
+
+[ f ] [ "notepad" get process-started? ] unit-test
+
+[ ] [ "notepad" [ run-detached ] change ] unit-test
+
+[ "notepad" get wait-for-process ] must-fail
+
+[ t ] [ "notepad" get killed>> ] unit-test
+
+[ f ] [ "notepad" get process-running? ] unit-test
+
+[ ] [
+    <process>
+        vm "-quiet" "-run=hello-world" 3array >>command
+        "out.txt" temp-file >>stdout
+    try-process
+] unit-test
+
+[ "Hello world" ] [
+    "out.txt" temp-file ascii file-lines first
+] unit-test
+
+[ ] [
+    <process>
+        vm "-run=listener" 2array >>command
+        +closed+ >>stdin
+    try-process
+] unit-test
+
+: launcher-test-path ( -- str )
+    "resource:basis/io/launcher/windows/nt/test" ;
+
+[ ] [
+    launcher-test-path [
+        <process>
+            vm "-script" "stderr.factor" 3array >>command
+            "out.txt" temp-file >>stdout
+            "err.txt" temp-file >>stderr
+        try-process
+    ] with-directory
+] unit-test
+
+[ "output" ] [
+    "out.txt" temp-file ascii file-lines first
+] unit-test
+
+[ "error" ] [
+    "err.txt" temp-file ascii file-lines first
+] unit-test
+
+[ ] [
+    launcher-test-path [
+        <process>
+            vm "-script" "stderr.factor" 3array >>command
+            "out.txt" temp-file >>stdout
+            +stdout+ >>stderr
+        try-process
+    ] with-directory
+] unit-test
+
+[ "outputerror" ] [
+    "out.txt" temp-file ascii file-lines first
+] unit-test
+
+[ "output" ] [
+    launcher-test-path [
+        <process>
+            vm "-script" "stderr.factor" 3array >>command
+            "err2.txt" temp-file >>stderr
+        ascii <process-reader> lines first
+    ] with-directory
+] unit-test
+
+[ "error" ] [
+    "err2.txt" temp-file ascii file-lines first
+] unit-test
+
+[ t ] [
+    launcher-test-path [
+        <process>
+            vm "-script" "env.factor" 3array >>command
+        ascii <process-reader> contents
+    ] with-directory eval
+
+    os-envs =
+] unit-test
+
+[ t ] [
+    launcher-test-path [
+        <process>
+            vm "-script" "env.factor" 3array >>command
+            +replace-environment+ >>environment-mode
+            os-envs >>environment
+        ascii <process-reader> contents
+    ] with-directory eval
+    
+    os-envs =
+] unit-test
+
+[ "B" ] [
+    launcher-test-path [
+        <process>
+            vm "-script" "env.factor" 3array >>command
+            { { "A" "B" } } >>environment
+        ascii <process-reader> contents
+    ] with-directory eval
+
+    "A" swap at
+] unit-test
+
+[ f ] [
+    launcher-test-path [
+        <process>
+            vm "-script" "env.factor" 3array >>command
+            { { "USERPROFILE" "XXX" } } >>environment
+            +prepend-environment+ >>environment-mode
+        ascii <process-reader> contents
+    ] with-directory eval
+
+    "USERPROFILE" swap at "XXX" =
+] unit-test
+
+2 [
+    [ ] [
+        <process>
+            "cmd.exe /c dir" >>command
+            "dir.txt" temp-file >>stdout
+        try-process
+    ] unit-test
+
+    [ ] [ "dir.txt" temp-file delete-file ] unit-test
+] times
+
+[ "append-test" temp-file delete-file ] ignore-errors
+
+[ "Hello appender\r\nHello appender\r\n" ] [
+    2 [
+        launcher-test-path [
+            <process>
+                vm "-script" "append.factor" 3array >>command
+                "append-test" temp-file <appender> >>stdout
+            try-process
+        ] with-directory
+    ] times
+   
+    "append-test" temp-file ascii file-contents
+] unit-test
diff --git a/basis/io/launcher/windows/nt/nt.factor b/basis/io/launcher/windows/nt/nt.factor
new file mode 100755 (executable)
index 0000000..5ebb38a
--- /dev/null
@@ -0,0 +1,110 @@
+! Copyright (C) 2007, 2008 Doug Coleman, Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types arrays continuations destructors io
+io.backend.windows libc io.ports io.pipes windows.types math
+windows.kernel32 windows namespaces make io.launcher kernel
+sequences windows.errors assocs splitting system strings
+io.launcher.windows io.files.windows io.backend io.files
+io.files.private combinators shuffle accessors locals ;
+IN: io.launcher.windows.nt
+
+: duplicate-handle ( handle -- handle' )
+    GetCurrentProcess ! source process
+    swap ! handle
+    GetCurrentProcess ! target process
+    f <void*> [ ! target handle
+        DUPLICATE_SAME_ACCESS ! desired access
+        TRUE ! inherit handle
+        DUPLICATE_CLOSE_SOURCE ! options
+        DuplicateHandle win32-error=0/f
+    ] keep *void* ;
+
+! /dev/null simulation
+: null-input ( -- pipe )
+    (pipe) [ in>> handle>> ] [ out>> dispose ] bi ;
+
+: null-output ( -- pipe )
+    (pipe) [ in>> dispose ] [ out>> handle>> ] bi ;
+
+: null-pipe ( mode -- pipe )
+    {
+        { GENERIC_READ [ null-input ] }
+        { GENERIC_WRITE [ null-output ] }
+    } case ;
+
+! The below code is based on the example given in
+! http://msdn2.microsoft.com/en-us/library/ms682499.aspx
+
+: redirect-default ( obj access-mode create-mode -- handle )
+    3drop f ;
+
+: redirect-closed ( obj access-mode create-mode -- handle )
+    drop nip null-pipe ;
+
+:: redirect-file ( path access-mode create-mode -- handle )
+    path normalize-path
+    access-mode
+    share-mode
+    default-security-attributes
+    create-mode
+    FILE_ATTRIBUTE_NORMAL ! flags and attributes
+    f ! template file
+    CreateFile dup invalid-handle? <win32-file> &dispose handle>> ;
+
+: redirect-append ( path access-mode create-mode -- handle )
+    [ path>> ] 2dip
+    drop OPEN_ALWAYS
+    redirect-file
+    dup 0 FILE_END set-file-pointer ;
+
+: redirect-handle ( handle access-mode create-mode -- handle )
+    2drop handle>> duplicate-handle ;
+
+: redirect-stream ( stream access-mode create-mode -- handle )
+    [ underlying-handle handle>> ] 2dip redirect-handle ;
+
+: redirect ( obj access-mode create-mode -- handle )
+    {
+        { [ pick not ] [ redirect-default ] }
+        { [ pick +closed+ eq? ] [ redirect-closed ] }
+        { [ pick string? ] [ redirect-file ] }
+        { [ pick appender? ] [ redirect-append ] }
+        { [ pick win32-file? ] [ redirect-handle ] }
+        [ redirect-stream ]
+    } cond
+    dup [ dup t set-inherit ] when ;
+
+: redirect-stdout ( process args -- handle )
+    drop
+    stdout>>
+    GENERIC_WRITE
+    CREATE_ALWAYS
+    redirect
+    STD_OUTPUT_HANDLE GetStdHandle or ;
+
+: redirect-stderr ( process args -- handle )
+    over stderr>> +stdout+ eq? [
+        nip
+        lpStartupInfo>> STARTUPINFO-hStdOutput
+    ] [
+        drop
+        stderr>>
+        GENERIC_WRITE
+        CREATE_ALWAYS
+        redirect
+        STD_ERROR_HANDLE GetStdHandle or
+    ] if ;
+
+: redirect-stdin ( process args -- handle )
+    drop
+    stdin>>
+    GENERIC_READ
+    OPEN_EXISTING
+    redirect
+    STD_INPUT_HANDLE GetStdHandle or ;
+
+M: winnt fill-redirection ( process args -- )
+    [ 2dup redirect-stdout ] keep lpStartupInfo>> set-STARTUPINFO-hStdOutput
+    [ 2dup redirect-stderr ] keep lpStartupInfo>> set-STARTUPINFO-hStdError
+    [ 2dup redirect-stdin  ] keep lpStartupInfo>> set-STARTUPINFO-hStdInput
+    2drop ;
diff --git a/basis/io/launcher/windows/nt/tags.txt b/basis/io/launcher/windows/nt/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/launcher/windows/nt/test/append.factor b/basis/io/launcher/windows/nt/test/append.factor
new file mode 100644 (file)
index 0000000..4c1de0c
--- /dev/null
@@ -0,0 +1,2 @@
+USE: io\r
+"Hello appender" print\r
diff --git a/basis/io/launcher/windows/nt/test/env.factor b/basis/io/launcher/windows/nt/test/env.factor
new file mode 100644 (file)
index 0000000..503ca7d
--- /dev/null
@@ -0,0 +1,4 @@
+USE: system
+USE: prettyprint
+USE: environment
+os-envs .
diff --git a/basis/io/launcher/windows/nt/test/stderr.factor b/basis/io/launcher/windows/nt/test/stderr.factor
new file mode 100644 (file)
index 0000000..f22f50e
--- /dev/null
@@ -0,0 +1,5 @@
+USE: io\r
+USE: namespaces\r
+\r
+"output" write flush\r
+"error" error-stream get stream-write error-stream get stream-flush\r
diff --git a/basis/io/launcher/windows/tags.txt b/basis/io/launcher/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/launcher/windows/windows-tests.factor b/basis/io/launcher/windows/windows-tests.factor
new file mode 100644 (file)
index 0000000..1a3fe82
--- /dev/null
@@ -0,0 +1,10 @@
+IN: io.launcher.windows.tests\r
+USING: tools.test io.launcher.windows ;\r
+\r
+[ "hello world" ] [ { "hello" "world" } join-arguments ] unit-test\r
+\r
+[ "bob \"mac arthur\"" ] [ { "bob" "mac arthur" } join-arguments ] unit-test\r
+\r
+[ "bob mac\\\\arthur" ] [ { "bob" "mac\\\\arthur" } join-arguments ] unit-test\r
+\r
+[ "bob \"mac arthur\\\\\"" ] [ { "bob" "mac arthur\\" } join-arguments ] unit-test\r
diff --git a/basis/io/launcher/windows/windows.factor b/basis/io/launcher/windows/windows.factor
new file mode 100755 (executable)
index 0000000..0497754
--- /dev/null
@@ -0,0 +1,164 @@
+! Copyright (C) 2007, 2008 Doug Coleman, Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types arrays continuations io
+io.backend.windows io.pipes.windows.nt io.pathnames libc io.ports
+windows.types math windows.kernel32
+namespaces make io.launcher kernel sequences windows.errors
+splitting system threads init strings combinators
+io.backend accessors concurrency.flags io.files assocs
+io.files.private windows destructors specialized-arrays.ushort
+specialized-arrays.alien ;
+IN: io.launcher.windows
+
+TUPLE: CreateProcess-args
+       lpApplicationName
+       lpCommandLine
+       lpProcessAttributes
+       lpThreadAttributes
+       bInheritHandles
+       dwCreateFlags
+       lpEnvironment
+       lpCurrentDirectory
+       lpStartupInfo
+       lpProcessInformation ;
+
+: default-CreateProcess-args ( -- obj )
+    CreateProcess-args new
+    "STARTUPINFO" <c-object>
+    "STARTUPINFO" heap-size over set-STARTUPINFO-cb >>lpStartupInfo
+    "PROCESS_INFORMATION" <c-object> >>lpProcessInformation
+    TRUE >>bInheritHandles
+    0 >>dwCreateFlags ;
+
+: call-CreateProcess ( CreateProcess-args -- )
+    {
+        [ lpApplicationName>> ]
+        [ lpCommandLine>> ]
+        [ lpProcessAttributes>> ]
+        [ lpThreadAttributes>> ]
+        [ bInheritHandles>> ]
+        [ dwCreateFlags>> ]
+        [ lpEnvironment>> ]
+        [ lpCurrentDirectory>> ]
+        [ lpStartupInfo>> ]
+        [ lpProcessInformation>> ]
+    } cleave
+    CreateProcess win32-error=0/f ;
+
+: count-trailing-backslashes ( str n -- str n )
+    [ "\\" ?tail ] dip swap [
+        1+ count-trailing-backslashes
+    ] when ;
+
+: fix-trailing-backslashes ( str -- str' )
+    0 count-trailing-backslashes
+    2 * CHAR: \\ <repetition> append ;
+
+: escape-argument ( str -- newstr )
+    CHAR: \s over member? [
+        fix-trailing-backslashes "\"" dup surround
+    ] when ;
+
+: join-arguments ( args -- cmd-line )
+    [ escape-argument ] map " " join ;
+
+: lookup-priority ( process -- n )
+    priority>> {
+        { +lowest-priority+ [ IDLE_PRIORITY_CLASS ] }
+        { +low-priority+ [ BELOW_NORMAL_PRIORITY_CLASS ] }
+        { +normal-priority+ [ NORMAL_PRIORITY_CLASS ] }
+        { +high-priority+ [ ABOVE_NORMAL_PRIORITY_CLASS ] }
+        { +highest-priority+ [ HIGH_PRIORITY_CLASS ] }
+        { +realtime-priority+ [ REALTIME_PRIORITY_CLASS ] }
+        [ drop f ]
+    } case ;
+
+: app-name/cmd-line ( process -- app-name cmd-line )
+    command>> dup string? [
+        " " split1
+    ] [
+        unclip swap join-arguments
+    ] if ;
+
+: cmd-line ( process -- cmd-line )
+    command>> dup string? [ join-arguments ] unless ;
+
+: fill-lpApplicationName ( process args -- process args )
+    over app-name/cmd-line
+    [ >>lpApplicationName ] [ >>lpCommandLine ] bi* ;
+
+: fill-lpCommandLine ( process args -- process args )
+    over cmd-line >>lpCommandLine ;
+
+: fill-dwCreateFlags ( process args -- process args )
+    0
+    pick pass-environment? [ CREATE_UNICODE_ENVIRONMENT bitor ] when
+    pick detached>> os winnt? and [ DETACHED_PROCESS bitor ] when
+    pick lookup-priority [ bitor ] when*
+    >>dwCreateFlags ;
+
+: fill-lpEnvironment ( process args -- process args )
+    over pass-environment? [
+        [
+            over get-environment
+            [ swap % "=" % % "\0" % ] assoc-each
+            "\0" %
+        ] ushort-array{ } make underlying>>
+        >>lpEnvironment
+    ] when ;
+
+: fill-startup-info ( process args -- process args )
+    STARTF_USESTDHANDLES over lpStartupInfo>> set-STARTUPINFO-dwFlags ;
+
+HOOK: fill-redirection io-backend ( process args -- )
+
+M: wince fill-redirection 2drop ;
+
+: make-CreateProcess-args ( process -- args )
+    default-CreateProcess-args
+    os wince? [ fill-lpApplicationName ] [ fill-lpCommandLine ] if
+    fill-dwCreateFlags
+    fill-lpEnvironment
+    fill-startup-info
+    nip ;
+
+M: windows current-process-handle ( -- handle )
+    GetCurrentProcessId ;
+
+M: windows run-process* ( process -- handle )
+    [
+        current-directory get (normalize-path) cd
+
+        dup make-CreateProcess-args
+        tuck fill-redirection
+        dup call-CreateProcess
+        lpProcessInformation>>
+    ] with-destructors ;
+
+M: windows kill-process* ( handle -- )
+    PROCESS_INFORMATION-hProcess
+    255 TerminateProcess win32-error=0/f ;
+
+: dispose-process ( process-information -- )
+    #! From MSDN: "Handles in PROCESS_INFORMATION must be closed
+    #! with CloseHandle when they are no longer needed."
+    dup PROCESS_INFORMATION-hProcess [ CloseHandle drop ] when*
+    PROCESS_INFORMATION-hThread [ CloseHandle drop ] when* ;
+
+: exit-code ( process -- n )
+    PROCESS_INFORMATION-hProcess
+    0 <ulong> [ GetExitCodeProcess ] keep *ulong
+    swap win32-error=0/f ;
+
+: process-exited ( process -- )
+    dup handle>> exit-code
+    over handle>> dispose-process
+    notify-exit ;
+
+M: windows wait-for-processes ( -- ? )
+    processes get keys dup
+    [ handle>> PROCESS_INFORMATION-hProcess ] void*-array{ } map-as
+    [ length ] [ underlying>> ] bi 0 0
+    WaitForMultipleObjects
+    dup HEX: ffffffff = [ win32-error ] when
+    dup WAIT_TIMEOUT = [ 2drop t ] [ swap nth process-exited f ] if ;
index dc2f0b4687a76c48b5928ad803c8d2c34625e726..166167a7e7f070c591a4a3ef13c7170121652740 100644 (file)
@@ -1,5 +1,6 @@
-USING: io io.mmap io.mmap.char io.files kernel tools.test
-continuations sequences io.encodings.ascii accessors ;
+USING: io io.mmap io.mmap.char io.files io.files.temp
+io.directories kernel tools.test continuations sequences
+io.encodings.ascii accessors ;
 IN: io.mmap.tests
 
 [ "mmap-test-file.txt" temp-file delete-file ] ignore-errors
index 3cf451bd036f432af4ae12aecbf38a691cd04164..6f2fabb7098e9ba53ffd8fe1b0fba1c65103e8cd 100644 (file)
@@ -1,13 +1,13 @@
 ! Copyright (C) 2007, 2008 Doug Coleman, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: continuations destructors io.files io.backend kernel
-quotations system alien alien.accessors accessors system
-vocabs.loader combinators alien.c-types ;
+USING: continuations destructors io.files io.files.info
+io.backend kernel quotations system alien alien.accessors
+accessors system vocabs.loader combinators alien.c-types ;
 IN: io.mmap
 
 TUPLE: mapped-file address handle length disposed ;
 
-HOOK: (mapped-file) io-backend ( path length -- address handle )
+HOOK: (mapped-file) os ( path length -- address handle )
 
 : <mapped-file> ( path -- mmap )
     [ normalize-path ] [ file-info size>> ] bi [ (mapped-file) ] keep
@@ -21,6 +21,6 @@ M: mapped-file dispose* ( mmap -- ) close-mapped-file ;
     [ <mapped-file> ] dip with-disposal ; inline
 
 {
-    { [ os unix? ] [ "io.unix.mmap" require ] }
-    { [ os winnt? ] [ "io.windows.mmap" require ] }
+    { [ os unix? ] [ "io.mmap.unix" require ] }
+    { [ os winnt? ] [ "io.mmap.windows" require ] }
 } cond
diff --git a/basis/io/mmap/unix/authors.txt b/basis/io/mmap/unix/authors.txt
new file mode 100755 (executable)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/mmap/unix/tags.txt b/basis/io/mmap/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/mmap/unix/unix.factor b/basis/io/mmap/unix/unix.factor
new file mode 100644 (file)
index 0000000..9325dcd
--- /dev/null
@@ -0,0 +1,24 @@
+! Copyright (C) 2007 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien io io.files kernel math math.bitwise system unix
+io.backend.unix io.ports io.mmap destructors locals accessors ;
+IN: io.mmap.unix
+
+: open-r/w ( path -- fd ) O_RDWR file-mode open-file ;
+
+:: mmap-open ( path length prot flags -- alien fd )
+    [
+        f length prot flags
+        path open-r/w |dispose
+        [ 0 mmap dup MAP_FAILED = [ (io-error) ] when ] keep
+    ] with-destructors ;
+
+M: unix (mapped-file)
+    { PROT_READ PROT_WRITE } flags
+    { MAP_FILE MAP_SHARED } flags
+    mmap-open ;
+
+M: unix close-mapped-file ( mmap -- )
+    [ [ address>> ] [ length>> ] bi munmap io-error ]
+    [ handle>> close-file ]
+    bi ;
diff --git a/basis/io/mmap/windows/authors.txt b/basis/io/mmap/windows/authors.txt
new file mode 100755 (executable)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/io/mmap/windows/tags.txt b/basis/io/mmap/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/mmap/windows/windows.factor b/basis/io/mmap/windows/windows.factor
new file mode 100644 (file)
index 0000000..fcdf416
--- /dev/null
@@ -0,0 +1,44 @@
+USING: alien alien.c-types arrays destructors generic io.mmap
+io.ports io.backend.windows io.files.windows io.backend.windows.privileges
+kernel libc math math.bitwise namespaces quotations sequences
+windows windows.advapi32 windows.kernel32 io.backend system
+accessors locals ;
+IN: io.mmap.windows
+
+: create-file-mapping ( hFile lpAttributes flProtect dwMaximumSizeHigh dwMaximumSizeLow lpName -- HANDLE )
+    CreateFileMapping [ win32-error=0/f ] keep <win32-handle> ;
+
+: map-view-of-file ( hFileMappingObject dwDesiredAccess dwFileOffsetHigh dwFileOffsetLow dwNumberOfBytesToMap -- HANDLE )
+    MapViewOfFile [ win32-error=0/f ] keep ;
+
+:: mmap-open ( path length access-mode create-mode protect access -- handle handle address )
+    [let | lo [ length HEX: ffffffff bitand ]
+           hi [ length -32 shift HEX: ffffffff bitand ] |
+        { "SeCreateGlobalPrivilege" "SeLockMemoryPrivilege" } [
+            path access-mode create-mode 0 open-file |dispose
+            dup handle>> f protect hi lo f create-file-mapping |dispose
+            dup handle>> access 0 0 0 map-view-of-file
+        ] with-privileges
+    ] ;
+
+TUPLE: win32-mapped-file file mapping ;
+
+M: win32-mapped-file dispose
+    [ file>> dispose ] [ mapping>> dispose ] bi ;
+
+C: <win32-mapped-file> win32-mapped-file
+
+M: windows (mapped-file)
+    [
+        { GENERIC_WRITE GENERIC_READ } flags
+        OPEN_ALWAYS
+        { PAGE_READWRITE SEC_COMMIT } flags
+        FILE_MAP_ALL_ACCESS mmap-open
+        -rot <win32-mapped-file>
+    ] with-destructors ;
+
+M: windows close-mapped-file ( mapped-file -- )
+    [
+        [ handle>> &dispose drop ]
+        [ address>> UnmapViewOfFile win32-error=0/f ] bi
+    ] with-destructors ;
diff --git a/basis/io/monitors/linux/linux-tests.factor b/basis/io/monitors/linux/linux-tests.factor
new file mode 100644 (file)
index 0000000..6755894
--- /dev/null
@@ -0,0 +1,37 @@
+IN: io.monitors.linux.tests
+USING: io.monitors tools.test io.files io.files.temp
+io.directories system sequences continuations namespaces
+concurrency.count-downs kernel io threads calendar prettyprint
+destructors io.timeouts ;
+
+! On Linux, a notification on the directory itself would report an invalid
+! path name
+[
+    [ ] [ "monitor-test-self" temp-file make-directories ] unit-test
+    
+    ! Non-recursive
+    [ ] [ "monitor-test-self" temp-file f <monitor> "m" set ] unit-test
+    [ ] [ 3 seconds "m" get set-timeout ] unit-test
+
+    [ ] [ "monitor-test-self" temp-file touch-file ] unit-test
+
+    [ t ] [
+        "m" get next-change drop
+        [ "" = ] [ "monitor-test-self" temp-file = ] bi or
+    ] unit-test
+
+    [ ] [ "m" get dispose ] unit-test
+    
+    ! Recursive
+    [ ] [ "monitor-test-self" temp-file t <monitor> "m" set ] unit-test
+    [ ] [ 3 seconds "m" get set-timeout ] unit-test
+
+    [ ] [ "monitor-test-self" temp-file touch-file ] unit-test
+
+    [ t ] [
+        "m" get next-change drop
+        [ "" = ] [ "monitor-test-self" temp-file = ] bi or
+    ] unit-test
+
+    [ ] [ "m" get dispose ] unit-test
+] with-monitors
diff --git a/basis/io/monitors/linux/linux.factor b/basis/io/monitors/linux/linux.factor
new file mode 100644 (file)
index 0000000..e914f32
--- /dev/null
@@ -0,0 +1,136 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel io.backend io.monitors io.monitors.recursive
+io.files io.pathnames io.buffers io.monitors io.ports io.timeouts
+io.backend.unix io.encodings.utf8 unix.linux.inotify assocs
+namespaces make threads continuations init math math.bitwise
+sets alien alien.strings alien.c-types vocabs.loader accessors
+system hashtables destructors unix ;
+IN: io.monitors.linux
+
+SYMBOL: watches
+
+SYMBOL: inotify
+
+TUPLE: linux-monitor < monitor wd inotify watches disposed ;
+
+: <linux-monitor> ( wd path mailbox -- monitor )
+    linux-monitor new-monitor
+        inotify get >>inotify
+        watches get >>watches
+        swap >>wd ;
+
+: wd>monitor ( wd -- monitor ) watches get at ;
+
+: <inotify> ( -- port/f )
+    inotify_init dup 0 < [ drop f ] [ <fd> init-fd <input-port> ] if ;
+
+: inotify-fd ( -- fd ) inotify get handle>> handle-fd ;
+
+: check-existing ( wd -- )
+    watches get key? [
+        "Cannot open multiple monitors for the same file" throw
+    ] when ;
+
+: (add-watch) ( path mask -- wd )
+    inotify-fd -rot inotify_add_watch dup io-error dup check-existing ;
+
+: add-watch ( path mask mailbox -- monitor )
+    [ [ (normalize-path) ] dip [ (add-watch) ] [ drop ] 2bi ] dip
+    <linux-monitor> [ ] [ ] [ wd>> ] tri watches get set-at ;
+
+: check-inotify ( -- )
+    inotify get [
+        "Calling <monitor> outside with-monitors" throw
+    ] unless ;
+
+M: linux (monitor) ( path recursive? mailbox -- monitor )
+    swap [
+        <recursive-monitor>
+    ] [
+        check-inotify
+        IN_CHANGE_EVENTS swap add-watch
+    ] if ;
+
+M: linux-monitor dispose* ( monitor -- )
+    [ [ wd>> ] [ watches>> ] bi delete-at ]
+    [
+        dup inotify>> disposed>> [ drop ] [
+            [ inotify>> handle>> handle-fd ] [ wd>> ] bi
+            inotify_rm_watch io-error
+        ] if
+    ] bi ;
+
+: ignore-flags? ( mask -- ? )
+    {
+        IN_DELETE_SELF
+        IN_MOVE_SELF
+        IN_UNMOUNT
+        IN_Q_OVERFLOW
+        IN_IGNORED
+    } flags bitand 0 > ;
+
+: parse-action ( mask -- changed )
+    [
+        IN_CREATE +add-file+ ?flag
+        IN_DELETE +remove-file+ ?flag
+        IN_MODIFY +modify-file+ ?flag
+        IN_ATTRIB +modify-file+ ?flag
+        IN_MOVED_FROM +rename-file-old+ ?flag
+        IN_MOVED_TO +rename-file-new+ ?flag
+        drop
+    ] { } make prune ;
+
+: parse-event-name ( event -- name )
+    dup inotify-event-len zero?
+    [ drop "" ] [ inotify-event-name utf8 alien>string ] if ;
+
+: parse-file-notify ( buffer -- path changed )
+    dup inotify-event-mask ignore-flags? [
+        drop f f
+    ] [
+        [ parse-event-name ] [ inotify-event-mask parse-action ] bi
+    ] if ;
+
+: events-exhausted? ( i buffer -- ? )
+    fill>> >= ;
+
+: inotify-event@ ( i buffer -- alien )
+    ptr>> <displaced-alien> ;
+
+: next-event ( i buffer -- i buffer )
+    2dup inotify-event@
+    inotify-event-len "inotify-event" heap-size +
+    swap [ + ] dip ;
+
+: parse-file-notifications ( i buffer -- )
+    2dup events-exhausted? [ 2drop ] [
+        2dup inotify-event@ dup inotify-event-wd wd>monitor
+        [ parse-file-notify ] dip queue-change
+        next-event parse-file-notifications
+    ] if ;
+
+: inotify-read-loop ( port -- )
+    dup check-disposed
+    dup wait-to-read drop
+    0 over buffer>> parse-file-notifications
+    0 over buffer>> buffer-reset
+    inotify-read-loop ;
+
+: inotify-read-thread ( port -- )
+    [ inotify-read-loop ] curry ignore-errors ;
+
+M: linux init-monitors
+    H{ } clone watches set
+    <inotify> [
+        [ inotify set ]
+        [
+            [ inotify-read-thread ] curry
+            "Linux monitor thread" spawn drop
+        ] bi
+    ] [
+        "Linux kernel version is too old" throw
+    ] if* ;
+
+M: linux dispose-monitors
+    inotify get dispose ;
diff --git a/basis/io/monitors/linux/tags.txt b/basis/io/monitors/linux/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/monitors/macosx/macosx.factor b/basis/io/monitors/macosx/macosx.factor
new file mode 100644 (file)
index 0000000..be1dcc6
--- /dev/null
@@ -0,0 +1,23 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: io.backend io.monitors
+core-foundation.fsevents continuations kernel sequences
+namespaces arrays system locals accessors destructors fry ;
+IN: io.monitors.macosx
+
+TUPLE: macosx-monitor < monitor handle ;
+
+: enqueue-notifications ( triples monitor -- )
+    '[ first { +modify-file+ } _ queue-change ] each ;
+
+M:: macosx (monitor) ( path recursive? mailbox -- monitor )
+    [let | path [ path normalize-path ] |
+        path mailbox macosx-monitor new-monitor
+        dup [ enqueue-notifications ] curry
+        path 1array 0 0 <event-stream> >>handle
+    ] ;
+
+M: macosx-monitor dispose
+    handle>> dispose ;
+
+macosx set-io-backend
diff --git a/basis/io/monitors/macosx/tags.txt b/basis/io/monitors/macosx/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
index 1cc97753b715a8e067f06a472d25c2aa6089da13..9efa785061a1c629f74fe773017135abc96ec747 100644 (file)
@@ -1,7 +1,9 @@
 IN: io.monitors.tests
 USING: io.monitors tools.test io.files system sequences
 continuations namespaces concurrency.count-downs kernel io
-threads calendar prettyprint destructors io.timeouts ;
+threads calendar prettyprint destructors io.timeouts
+io.files.temp io.directories io.directories.hierarchy
+io.pathnames ;
 
 os { winnt linux macosx } member? [
     [
index 72f2bc80c5d1be305770596b082ae5089b5dba52..e225e45430b51afc6fceaa7801b455575ee85e91 100644 (file)
@@ -56,8 +56,8 @@ SYMBOL: +rename-file+
     [ <monitor> ] dip with-disposal ; inline
 
 {
-    { [ os macosx? ] [ "io.unix.macosx.monitors" require ] }
-    { [ os linux? ] [ "io.unix.linux.monitors" require ] }
-    { [ os winnt? ] [ "io.windows.nt.monitors" require ] }
+    { [ os macosx? ] [ "io.monitors.macosx" require ] }
+    { [ os linux? ] [ "io.monitors.linux" require ] }
+    { [ os winnt? ] [ "io.monitors.windows.nt" require ] }
     [ ]
 } cond
index fba879a6d278c26dbf855e8f848cd405dd6fd3c6..ace93ace4434615e08e73ef569baa642a1793354 100644 (file)
@@ -1,6 +1,7 @@
 USING: accessors math kernel namespaces continuations
 io.files io.monitors io.monitors.recursive io.backend
-concurrency.mailboxes tools.test destructors ;
+concurrency.mailboxes tools.test destructors io.files.info
+io.pathnames io.files.temp io.directories.hierarchy ;
 IN: io.monitors.recursive.tests
 
 \ pump-thread must-infer
index a96c6f04f14123723d0d97133b374bc1e4b700d5..18fa62f6d69bad878a5eca23a761d1d125331c7e 100644 (file)
@@ -2,8 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors sequences assocs arrays continuations
 destructors combinators kernel threads concurrency.messaging
-concurrency.mailboxes concurrency.promises io.files io.monitors
-debugger fry ;
+concurrency.mailboxes concurrency.promises io.files io.files.info
+io.directories io.pathnames io.monitors debugger fry ;
 IN: io.monitors.recursive
 
 ! Simulate recursive monitors on platforms that don't have them
diff --git a/basis/io/monitors/windows/nt/authors.txt b/basis/io/monitors/windows/nt/authors.txt
new file mode 100755 (executable)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/io/monitors/windows/nt/nt-tests.factor b/basis/io/monitors/windows/nt/nt-tests.factor
new file mode 100644 (file)
index 0000000..79cd7e9
--- /dev/null
@@ -0,0 +1,4 @@
+IN: io.monitors.windows.nt.tests\r
+USING: io.monitors.windows.nt tools.test ;\r
+\r
+\ fill-queue-thread must-infer\r
diff --git a/basis/io/monitors/windows/nt/nt.factor b/basis/io/monitors/windows/nt/nt.factor
new file mode 100755 (executable)
index 0000000..d2408a3
--- /dev/null
@@ -0,0 +1,106 @@
+! Copyright (C) 2008 Doug Coleman, Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types alien.strings libc destructors locals
+kernel math assocs namespaces make continuations sequences
+hashtables sorting arrays combinators math.bitwise strings
+system accessors threads splitting io.backend io.backend.windows
+io.backend.windows.nt io.files.windows.nt io.monitors io.ports
+io.buffers io.files io.timeouts io.encodings.string
+io.encodings.utf16n io windows windows.kernel32 windows.types
+io.pathnames ;
+IN: io.monitors.windows.nt
+
+: open-directory ( path -- handle )
+    normalize-path
+    FILE_LIST_DIRECTORY
+    share-mode
+    f
+    OPEN_EXISTING
+    { FILE_FLAG_BACKUP_SEMANTICS FILE_FLAG_OVERLAPPED } flags
+    f
+    CreateFile opened-file ;
+
+TUPLE: win32-monitor-port < input-port recursive ;
+
+TUPLE: win32-monitor < monitor port ;
+
+: begin-reading-changes ( port -- overlapped )
+    {
+        [ handle>> handle>> ]
+        [ buffer>> ptr>> ]
+        [ buffer>> size>> ]
+        [ recursive>> 1 0 ? ]
+    } cleave
+    FILE_NOTIFY_CHANGE_ALL
+    0 <uint>
+    (make-overlapped)
+    [ f ReadDirectoryChangesW win32-error=0/f ] keep ;
+
+: read-changes ( port -- bytes-transferred )
+    [
+        [ begin-reading-changes ] [ twiddle-thumbs ] bi
+    ] with-destructors ;
+
+: parse-action ( action -- changed )
+    {
+        { FILE_ACTION_ADDED [ +add-file+ ] }
+        { FILE_ACTION_REMOVED [ +remove-file+ ] }
+        { FILE_ACTION_MODIFIED [ +modify-file+ ] }
+        { FILE_ACTION_RENAMED_OLD_NAME [ +rename-file+ ] }
+        { FILE_ACTION_RENAMED_NEW_NAME [ +rename-file+ ] }
+        [ drop +modify-file+ ]
+    } case 1array ;
+
+: memory>u16-string ( alien len -- string )
+    memory>byte-array utf16n decode ;
+
+: parse-notify-record ( buffer -- path changed )
+    [
+        [ FILE_NOTIFY_INFORMATION-FileName ]
+        [ FILE_NOTIFY_INFORMATION-FileNameLength ]
+        bi memory>u16-string
+    ]
+    [ FILE_NOTIFY_INFORMATION-Action parse-action ] bi ;
+
+: (file-notify-records) ( buffer -- buffer )
+    dup ,
+    dup FILE_NOTIFY_INFORMATION-NextEntryOffset zero? [
+        [ FILE_NOTIFY_INFORMATION-NextEntryOffset ] keep <displaced-alien>
+        (file-notify-records)
+    ] unless ;
+
+: file-notify-records ( buffer -- seq )
+    [ (file-notify-records) drop ] { } make ;
+
+:: parse-notify-records ( monitor buffer -- )
+    buffer file-notify-records [
+        parse-notify-record
+        [ monitor path>> prepend-path normalize-path ] dip
+        monitor queue-change
+    ] each ;
+
+: fill-queue ( monitor -- )
+    dup port>> dup check-disposed
+    [ buffer>> ptr>> ] [ read-changes zero? ] bi
+    [ 2dup parse-notify-records ] unless
+    2drop ;
+
+: (fill-queue-thread) ( monitor -- )
+    dup fill-queue (fill-queue-thread) ;
+
+: fill-queue-thread ( monitor -- )
+    [ dup fill-queue (fill-queue-thread) ]
+    [ dup already-disposed? [ 2drop ] [ rethrow ] if ] recover ;
+
+M:: winnt (monitor) ( path recursive? mailbox -- monitor )
+    [
+        path normalize-path mailbox win32-monitor new-monitor
+            path open-directory \ win32-monitor-port <buffered-port>
+                recursive? >>recursive
+            >>port
+        dup [ fill-queue-thread ] curry
+        "Windows monitor thread" spawn drop
+    ] with-destructors ;
+
+M: win32-monitor dispose
+    port>> dispose ;
diff --git a/basis/io/monitors/windows/nt/tags.txt b/basis/io/monitors/windows/nt/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/paths/authors.txt b/basis/io/paths/authors.txt
deleted file mode 100755 (executable)
index 7c1b2f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
diff --git a/basis/io/paths/paths-tests.factor b/basis/io/paths/paths-tests.factor
deleted file mode 100644 (file)
index 01763ce..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-USING: io.paths kernel tools.test io.files.unique sequences
-io.files namespaces sorting ;
-IN: io.paths.tests
-
-[ t ] [
-    [
-        10 [ "io.paths.test" "gogogo" make-unique-file* ] replicate
-        current-directory get t [ ] find-all-files
-    ] with-unique-directory
-    [ natural-sort ] bi@ =
-] unit-test
diff --git a/basis/io/paths/paths.factor b/basis/io/paths/paths.factor
deleted file mode 100755 (executable)
index 212ba9e..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays deques dlists io.files
-kernel sequences system vocabs.loader fry continuations ;
-IN: io.paths
-
-TUPLE: directory-iterator path bfs queue ;
-
-<PRIVATE
-
-: qualified-directory ( path -- seq )
-    dup directory-files [ append-path ] with map ;
-
-: push-directory ( path iter -- )
-    [ qualified-directory ] dip [
-        dup queue>> swap bfs>>
-        [ push-front ] [ push-back ] if
-    ] curry each ;
-
-: <directory-iterator> ( path bfs? -- iterator )
-    <dlist> directory-iterator boa
-    dup path>> over push-directory ;
-
-: next-file ( iter -- file/f )
-    dup queue>> deque-empty? [ drop f ] [
-        dup queue>> pop-back dup link-info directory?
-        [ over push-directory next-file ] [ nip ] if
-    ] if ;
-
-: iterate-directory ( iter quot: ( obj -- ? ) -- obj )
-    over next-file [
-        over call
-        [ 2nip ] [ iterate-directory ] if*
-    ] [
-        2drop f
-    ] if* ; inline recursive
-
-PRIVATE>
-
-: find-file ( path bfs? quot: ( obj -- ? ) -- path/f )
-    [ <directory-iterator> ] dip
-    [ keep and ] curry iterate-directory ; inline
-
-: each-file ( path bfs? quot: ( obj -- ? ) -- )
-    [ <directory-iterator> ] dip
-    [ f ] compose iterate-directory drop ; inline
-
-: find-all-files ( path bfs? quot: ( obj -- ? ) -- paths )
-    [ <directory-iterator> ] dip
-    pusher [ [ f ] compose iterate-directory drop ] dip ; inline
-
-: recursive-directory ( path bfs? -- paths )
-    [ ] accumulator [ each-file ] dip ;
-
-: find-in-directories ( directories bfs? quot -- path' )
-    '[ _ _ find-file ] attempt-all ; inline
-
-os windows? [ "io.paths.windows" require ] when
diff --git a/basis/io/paths/windows/authors.txt b/basis/io/paths/windows/authors.txt
deleted file mode 100644 (file)
index 7c1b2f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
diff --git a/basis/io/paths/windows/tags.txt b/basis/io/paths/windows/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/paths/windows/windows.factor b/basis/io/paths/windows/windows.factor
deleted file mode 100644 (file)
index b4858aa..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: arrays continuations fry io.files io.paths
-kernel windows.shell32 sequences ;
-IN: io.paths.windows
-
-: program-files-directories ( -- array )
-    program-files program-files-x86 2array ; inline
-
-: find-in-program-files ( base-directory bfs? quot -- path )
-    [
-        [ program-files-directories ] dip '[ _ append-path ] map
-    ] 2dip find-in-directories ; inline
index 3a7fa5a2e09366cf8163919729ae4c4578a7c639..9cadb3f6cc2b6df7eb3917e5f27b348b363b0617 100644 (file)
@@ -53,7 +53,7 @@ PRIVATE>
     ] 2parallel-map ;
 
 {
-    { [ os unix? ] [ "io.unix.pipes" require ] }
-    { [ os winnt? ] [ "io.windows.nt.pipes" require ] }
+    { [ os unix? ] [ "io.pipes.unix" require ] }
+    { [ os winnt? ] [ "io.pipes.windows.nt" require ] }
     [ ]
 } cond
diff --git a/basis/io/pipes/unix/pipes-tests.factor b/basis/io/pipes/unix/pipes-tests.factor
new file mode 100644 (file)
index 0000000..ce3f155
--- /dev/null
@@ -0,0 +1,17 @@
+USING: tools.test io.pipes io.pipes.unix io.encodings.utf8
+io.encodings io namespaces sequences ;
+IN: io.pipes.unix.tests
+
+[ { 0 0 } ] [ { "ls" "grep ." } run-pipeline ] unit-test
+
+[ { 0 f 0 } ] [
+    {
+        "ls"
+        [
+            input-stream [ utf8 <decoder> ] change
+            output-stream [ utf8 <encoder> ] change
+            input-stream get lines reverse [ print ] each f
+        ]
+        "grep ."
+    } run-pipeline
+] unit-test
diff --git a/basis/io/pipes/unix/tags.txt b/basis/io/pipes/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/pipes/unix/unix.factor b/basis/io/pipes/unix/unix.factor
new file mode 100644 (file)
index 0000000..6a00150
--- /dev/null
@@ -0,0 +1,11 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: system kernel unix math sequences
+io.backend.unix io.ports specialized-arrays.int accessors ;
+IN: io.pipes.unix
+QUALIFIED: io.pipes
+
+M: unix io.pipes:(pipe) ( -- pair )
+    2 <int-array>
+    [ underlying>> pipe io-error ]
+    [ first2 [ <fd> init-fd ] bi@ io.pipes:pipe boa ] bi ;
diff --git a/basis/io/pipes/windows/nt/authors.txt b/basis/io/pipes/windows/nt/authors.txt
new file mode 100755 (executable)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/pipes/windows/nt/nt.factor b/basis/io/pipes/windows/nt/nt.factor
new file mode 100644 (file)
index 0000000..cec03cf
--- /dev/null
@@ -0,0 +1,46 @@
+! Copyright (C) 2007, 2008 Doug Coleman, Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types arrays destructors io io.backend.windows libc
+windows.types math.bitwise windows.kernel32 windows namespaces
+make kernel sequences windows.errors assocs math.parser system
+random combinators accessors io.pipes io.ports ;
+IN: io.pipes.windows.nt
+
+! This code is based on
+! http://twistedmatrix.com/trac/browser/trunk/twisted/internet/iocpreactor/process.py
+
+: create-named-pipe ( name -- handle )
+    { PIPE_ACCESS_INBOUND FILE_FLAG_OVERLAPPED } flags
+    PIPE_TYPE_BYTE
+    1
+    4096
+    4096
+    0
+    default-security-attributes
+    CreateNamedPipe opened-file ;
+
+: open-other-end ( name -- handle )
+    GENERIC_WRITE
+    { FILE_SHARE_READ FILE_SHARE_WRITE } flags
+    default-security-attributes
+    OPEN_EXISTING
+    FILE_FLAG_OVERLAPPED
+    f
+    CreateFile opened-file ;
+
+: unique-pipe-name ( -- string )
+    [
+        "\\\\.\\pipe\\factor-" %
+        pipe counter #
+        "-" %
+        32 random-bits #
+        "-" %
+        micros #
+    ] "" make ;
+
+M: winnt (pipe) ( -- pipe )
+    [
+        unique-pipe-name
+        [ create-named-pipe ] [ open-other-end ] bi
+        pipe boa
+    ] with-destructors ;
diff --git a/basis/io/pipes/windows/nt/tags.txt b/basis/io/pipes/windows/nt/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
index 60402c37ea0073923bcd09735eb480cbdf2b0b9a..0326969e4fbc0bca3543b9e867043738ad38f16d 100644 (file)
@@ -1,10 +1,10 @@
 ! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors byte-arrays kernel sequences
-namespaces math math.order combinators init alien alien.c-types
-alien.strings libc continuations destructors summary
-splitting assocs random math.parser locals unicode.case openssl
-openssl.libcrypto openssl.libssl io.backend io.ports io.files
+USING: accessors byte-arrays kernel sequences namespaces math
+math.order combinators init alien alien.c-types alien.strings
+libc continuations destructors summary splitting assocs random
+math.parser locals unicode.case openssl openssl.libcrypto
+openssl.libssl io.backend io.ports io.pathnames
 io.encodings.8-bit io.timeouts io.sockets.secure ;
 IN: io.sockets.secure.openssl
 
index 01f64dfccfd061175de6b07a578ad377e0996e4e..5dd4fe6b405043ed84f4a3090560c05b6d506fb3 100644 (file)
@@ -86,7 +86,7 @@ ARTICLE: "ssl-contexts" "Secure socket contexts"
 HELP: secure
 { $class-description "The class of secure socket addresses." } ;
 
-HELP: <secure> ( addrspec -- secure )
+HELP: <secure>
 { $values { "addrspec" "an address specifier" } { "secure" secure } }
 { $description "Creates a new secure socket address, which can then be passed to " { $link <client> } " or " { $link <server> } "." } ;
 
index e752e7c328d02d86425a7bfdc0ae3275afc3319a..c4a1475f4871b5c76cada33ddfafc1b18cb078ff 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors kernel symbols namespaces continuations
+USING: accessors kernel namespaces continuations
 destructors io debugger io.sockets sequences summary calendar
 delegate system vocabs.loader combinators present ;
 IN: io.sockets.secure
@@ -97,6 +97,6 @@ HOOK: send-secure-handshake secure-socket-backend ( -- )
 HOOK: accept-secure-handshake secure-socket-backend ( -- )
 
 {
-    { [ os unix? ] [ "io.unix.sockets.secure" require ] }
+    { [ os unix? ] [ "io.sockets.secure.unix" require ] }
     { [ os windows? ] [ "openssl" require ] }
 } cond
diff --git a/basis/io/sockets/secure/unix/debug/debug.factor b/basis/io/sockets/secure/unix/debug/debug.factor
new file mode 100644 (file)
index 0000000..d32cdee
--- /dev/null
@@ -0,0 +1,11 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors io.sockets.secure kernel ;
+IN: io.sockets.secure.unix.debug
+
+: with-test-context ( quot -- )
+    <secure-config>
+        "resource:basis/openssl/test/server.pem" >>key-file
+        "resource:basis/openssl/test/dh1024.pem" >>dh-file
+        "password" >>password
+    swap with-secure-context ; inline
diff --git a/basis/io/sockets/secure/unix/tags.txt b/basis/io/sockets/secure/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/sockets/secure/unix/unix-tests.factor b/basis/io/sockets/secure/unix/unix-tests.factor
new file mode 100644 (file)
index 0000000..a3bfacc
--- /dev/null
@@ -0,0 +1,147 @@
+IN: io.sockets.secure.tests
+USING: accessors kernel namespaces io io.sockets
+io.sockets.secure io.encodings.ascii io.streams.duplex
+io.backend.unix classes words destructors threads tools.test
+concurrency.promises byte-arrays locals calendar io.timeouts
+io.sockets.secure.unix.debug ;
+
+\ <secure-config> must-infer
+{ 1 0 } [ [ ] with-secure-context ] must-infer-as
+
+[ ] [ <promise> "port" set ] unit-test
+
+:: server-test ( quot -- )
+    [
+        [
+            "127.0.0.1" 0 <inet4> <secure> ascii <server> [
+                dup addr>> addrspec>> port>> "port" get fulfill
+                accept [
+                    quot call
+                ] curry with-stream
+            ] with-disposal
+        ] with-test-context
+    ] "SSL server test" spawn drop ;
+
+: client-test ( -- string )
+    <secure-config> [
+        "127.0.0.1" "port" get ?promise <inet4> <secure> ascii <client> drop contents
+    ] with-secure-context ;
+
+[ ] [ [ class name>> write ] server-test ] unit-test
+
+[ "secure" ] [ client-test ] unit-test
+
+! Now, see what happens if the server closes the connection prematurely
+[ ] [ <promise> "port" set ] unit-test
+
+[ ] [
+    [
+        drop
+        "hello" write flush
+        input-stream get stream>> handle>> f >>connected drop
+    ] server-test
+] unit-test
+
+[ client-test ] [ premature-close? ] must-fail-with
+
+! Now, try validating the certificate. This should fail because its
+! actually an invalid certificate
+[ ] [ <promise> "port" set ] unit-test
+
+[ ] [ [ drop "hi" write ] server-test ] unit-test
+
+[
+    <secure-config> [
+        "localhost" "port" get ?promise <inet> <secure> ascii
+        <client> drop dispose
+    ] with-secure-context
+] [ certificate-verify-error? ] must-fail-with
+
+! Client-side handshake timeout
+[ ] [ <promise> "port" set ] unit-test
+
+[ ] [
+    [
+        "127.0.0.1" 0 <inet4> ascii <server> [
+            dup addr>> port>> "port" get fulfill
+            accept drop 1 minutes sleep dispose
+        ] with-disposal
+    ] "Silly server" spawn drop
+] unit-test
+
+[
+    1 seconds secure-socket-timeout [
+        client-test
+    ] with-variable
+] [ io-timeout? ] must-fail-with
+
+! Server-side handshake timeout
+[ ] [ <promise> "port" set ] unit-test
+
+[ ] [
+    [
+        "127.0.0.1" "port" get ?promise
+        <inet4> ascii <client> drop 1 minutes sleep dispose
+    ] "Silly client" spawn drop
+] unit-test
+
+[
+    1 seconds secure-socket-timeout [
+        [
+            "127.0.0.1" 0 <inet4> <secure> ascii <server> [
+                dup addr>> addrspec>> port>> "port" get fulfill
+                accept drop dup stream-read1 drop dispose
+            ] with-disposal
+        ] with-test-context
+    ] with-variable
+] [ io-timeout? ] must-fail-with
+
+! Client socket shutdown timeout
+
+! Until I sort out two-stage handshaking, I can't do much here
+[
+    [ ] [ <promise> "port" set ] unit-test
+    
+    [ ] [
+        [
+            [
+                "127.0.0.1" 0 <inet4> <secure> ascii <server> [
+                    dup addr>> addrspec>> port>> "port" get fulfill
+                    accept drop 1 minutes sleep dispose
+                ] with-disposal
+            ] with-test-context
+        ] "Silly server" spawn drop
+    ] unit-test
+    
+    [
+        1 seconds secure-socket-timeout [
+            <secure-config> [
+                "127.0.0.1" "port" get ?promise <inet4> <secure>
+                ascii <client> drop dispose
+            ] with-secure-context
+        ] with-variable
+    ] [ io-timeout? ] must-fail-with
+    
+    ! Server socket shutdown timeout
+    [ ] [ <promise> "port" set ] unit-test
+    
+    [ ] [
+        [
+            [
+                "127.0.0.1" "port" get ?promise
+                <inet4> <secure> ascii <client> drop 1 minutes sleep dispose
+            ] with-test-context
+        ] "Silly client" spawn drop
+    ] unit-test
+    
+    [
+        1 seconds secure-socket-timeout [
+            [
+                "127.0.0.1" 0 <inet4> <secure> ascii <server> [
+                    dup addr>> addrspec>> port>> "port" get fulfill
+                    accept drop dispose
+                ] with-disposal
+            ] with-test-context
+        ] with-variable
+    ] [ io-timeout? ] must-fail-with
+] drop
diff --git a/basis/io/sockets/secure/unix/unix.factor b/basis/io/sockets/secure/unix/unix.factor
new file mode 100644 (file)
index 0000000..8419246
--- /dev/null
@@ -0,0 +1,200 @@
+! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors unix byte-arrays kernel sequences
+namespaces math math.order combinators init alien alien.c-types
+alien.strings libc continuations destructors openssl
+openssl.libcrypto openssl.libssl io io.files io.ports
+io.backend.unix io.sockets.unix io.encodings.ascii io.buffers
+io.sockets io.sockets.secure io.sockets.secure.openssl
+io.timeouts system summary fry ;
+IN: io.sockets.secure.unix
+
+M: ssl-handle handle-fd file>> handle-fd ;
+
+: syscall-error ( r -- * )
+    ERR_get_error dup zero? [
+        drop
+        {
+            { -1 [ err_no ECONNRESET = [ premature-close ] [ (io-error) ] if ] }
+            { 0 [ premature-close ] }
+        } case
+    ] [ nip (ssl-error) ] if ;
+
+: check-accept-response ( handle r -- event )
+    over handle>> over SSL_get_error
+    {
+        { SSL_ERROR_NONE [ 2drop f ] }
+        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
+        { SSL_ERROR_WANT_ACCEPT [ 2drop +input+ ] }
+        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
+        { SSL_ERROR_SYSCALL [ syscall-error ] }
+        { SSL_ERROR_ZERO_RETURN [ (ssl-error) ] }
+        { SSL_ERROR_SSL [ (ssl-error) ] }
+    } case ;
+
+: do-ssl-accept ( ssl-handle -- )
+    dup dup handle>> SSL_accept check-accept-response dup
+    [ [ dup file>> ] dip wait-for-fd do-ssl-accept ] [ 2drop ] if ;
+
+: maybe-handshake ( ssl-handle -- )
+    dup connected>> [ drop ] [
+        t >>connected
+        [ do-ssl-accept ] with-timeout
+    ] if ;
+
+: check-response ( port r -- port r n )
+    over handle>> handle>> over SSL_get_error ; inline
+
+! Input ports
+: check-read-response ( port r -- event )
+    check-response
+    {
+        { SSL_ERROR_NONE [ swap buffer>> n>buffer f ] }
+        { SSL_ERROR_ZERO_RETURN [ 2drop f ] }
+        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
+        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
+        { SSL_ERROR_SYSCALL [ syscall-error ] }
+        { SSL_ERROR_SSL [ (ssl-error) ] }
+    } case ;
+
+M: ssl-handle refill
+    dup maybe-handshake
+    handle>> ! ssl
+    over buffer>>
+    [ buffer-end ] ! buf
+    [ buffer-capacity ] bi ! len
+    SSL_read
+    check-read-response ;
+
+! Output ports
+: check-write-response ( port r -- event )
+    check-response
+    {
+        { SSL_ERROR_NONE [ swap buffer>> buffer-consume f ] }
+        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
+        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
+        { SSL_ERROR_SYSCALL [ syscall-error ] }
+        { SSL_ERROR_SSL [ (ssl-error) ] }
+    } case ;
+
+M: ssl-handle drain
+    dup maybe-handshake
+    handle>> ! ssl
+    over buffer>>
+    [ buffer@ ] ! buf
+    [ buffer-length ] bi ! len
+    SSL_write
+    check-write-response ;
+
+M: ssl-handle cancel-operation
+    file>> cancel-operation ;
+
+M: ssl-handle timeout
+    drop secure-socket-timeout get ;
+
+! Client sockets
+: <ssl-socket> ( fd -- ssl )
+    [ fd>> BIO_NOCLOSE BIO_new_socket dup ssl-error ] keep <ssl-handle>
+    [ handle>> swap dup SSL_set_bio ] keep ;
+
+M: secure ((client)) ( addrspec -- handle )
+    addrspec>> ((client)) <ssl-socket> ;
+
+M: secure parse-sockaddr addrspec>> parse-sockaddr <secure> ;
+
+M: secure (get-local-address) addrspec>> (get-local-address) ;
+
+: check-connect-response ( ssl-handle r -- event )
+    over handle>> over SSL_get_error
+    {
+        { SSL_ERROR_NONE [ 2drop f ] }
+        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
+        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
+        { SSL_ERROR_SYSCALL [ syscall-error ] }
+        { SSL_ERROR_SSL [ (ssl-error) ] }
+    } case ;
+
+: do-ssl-connect ( ssl-handle -- )
+    dup dup handle>> SSL_connect check-connect-response dup
+    [ dupd wait-for-fd do-ssl-connect ] [ 2drop ] if ;
+
+: resume-session ( ssl-handle ssl-session -- )
+    [ [ handle>> ] dip SSL_set_session ssl-error ]
+    [ drop do-ssl-connect ]
+    2bi ;
+
+: begin-session ( ssl-handle addrspec -- )
+    [ drop do-ssl-connect ]
+    [ [ handle>> SSL_get1_session ] dip save-session ]
+    2bi ;
+
+: secure-connection ( client-out addrspec -- )
+    [ handle>> ] dip
+    [
+        '[
+            _ dup get-session
+            [ resume-session ] [ begin-session ] ?if
+        ] with-timeout
+    ] [ drop t >>connected drop ] 2bi ;
+
+M: secure establish-connection ( client-out remote -- )
+    addrspec>> [ establish-connection ] [ secure-connection ] 2bi ;
+
+M: secure (server) addrspec>> (server) ;
+
+M: secure (accept)
+    [
+        addrspec>> (accept) [ |dispose <ssl-socket> ] dip
+    ] with-destructors ;
+
+: check-shutdown-response ( handle r -- event )
+    #! We don't do two-step shutdown here because I couldn't
+    #! figure out how to do it with non-blocking BIOs. Also, it
+    #! seems that SSL_shutdown always returns 0 -- this sounds
+    #! like a bug
+    over handle>> over SSL_get_error
+    {
+        { SSL_ERROR_NONE [ 2drop f ] }
+        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
+        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
+        { SSL_ERROR_SYSCALL [ dup zero? [ 2drop f ] [ syscall-error ] if ] }
+        { SSL_ERROR_SSL [ (ssl-error) ] }
+    } case ;
+
+: (shutdown) ( handle -- )
+    dup dup handle>> SSL_shutdown check-shutdown-response
+    dup [ dupd wait-for-fd (shutdown) ] [ 2drop ] if ;
+
+M: ssl-handle shutdown
+    dup connected>> [
+        f >>connected [ (shutdown) ] with-timeout
+    ] [ drop ] if ;
+
+: check-buffer ( port -- port )
+    dup buffer>> buffer-empty? [ upgrade-buffers-full ] unless ;
+
+: input/output-ports ( -- input output )
+    input-stream output-stream
+    [ get underlying-port check-buffer ] bi@
+    2dup [ handle>> ] bi@ eq? [ upgrade-on-non-socket ] unless ;
+
+: make-input/output-secure ( input output -- )
+    dup handle>> fd? [ upgrade-on-non-socket ] unless
+    [ <ssl-socket> ] change-handle
+    handle>> >>handle drop ;
+
+: (send-secure-handshake) ( output -- )
+    remote-address get [ upgrade-on-non-socket ] unless*
+    secure-connection ;
+
+M: openssl send-secure-handshake
+    input/output-ports
+    [ make-input/output-secure ] keep
+    [ (send-secure-handshake) ] keep
+    remote-address get dup inet? [
+        host>> swap handle>> check-certificate
+    ] [ 2drop ] if ;
+
+M: openssl accept-secure-handshake
+    input/output-ports
+    make-input/output-secure ;
index 597aa61138903251a11dd084f58c72d4d809bf17..0ef485b74cca7840e2ec79ecab79f49f62718c88 100644 (file)
@@ -6,7 +6,7 @@ sequences arrays io.encodings io.ports io.streams.duplex
 io.encodings.ascii alien.strings io.binary accessors destructors
 classes byte-arrays system combinators parser
 alien.c-types math.parser splitting grouping math assocs summary
-system vocabs.loader combinators present fry ;
+system vocabs.loader combinators present fry vocabs.parser ;
 IN: io.sockets
 
 << {
@@ -318,7 +318,6 @@ M: inet (server)
     invalid-inet-server ;
 
 {
-    { [ os unix? ] [ "io.unix.sockets" require ] }
-    { [ os winnt? ] [ "io.windows.nt.sockets" require ] }
-    { [ os wince? ] [ "io.windows.ce.sockets" require ] }
+    { [ os unix? ] [ "io.sockets.unix" require ] }
+    { [ os winnt? ] [ "io.sockets.windows.nt" require ] }
 } cond
diff --git a/basis/io/sockets/unix/authors.txt b/basis/io/sockets/unix/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/io/sockets/unix/summary.txt b/basis/io/sockets/unix/summary.txt
new file mode 100644 (file)
index 0000000..22342ec
--- /dev/null
@@ -0,0 +1 @@
+Implementation of TCP/IP and UDP/IP sockets on Unix-like systems
diff --git a/basis/io/sockets/unix/tags.txt b/basis/io/sockets/unix/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/sockets/unix/unix.factor b/basis/io/sockets/unix/unix.factor
new file mode 100644 (file)
index 0000000..f209df5
--- /dev/null
@@ -0,0 +1,155 @@
+! Copyright (C) 2004, 2008 Slava Pestov, Ivan Tikhonov. 
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types alien.strings generic kernel math
+namespaces threads sequences byte-arrays io.ports
+io.binary io.backend.unix io.streams.duplex
+io.backend io.ports io.pathnames io.files.private
+io.encodings.utf8 math.parser continuations libc combinators
+system accessors destructors unix locals init ;
+
+EXCLUDE: io => read write close ;
+EXCLUDE: io.sockets => accept ;
+
+IN: io.sockets.unix
+
+: socket-fd ( domain type -- fd )
+    0 socket dup io-error <fd> init-fd |dispose ;
+
+: set-socket-option ( fd level opt -- )
+    [ handle-fd ] 2dip 1 <int> "int" heap-size setsockopt io-error ;
+
+M: unix addrinfo-error ( n -- )
+    dup zero? [ drop ] [ gai_strerror throw ] if ;
+
+! Client sockets - TCP and Unix domain
+M: object (get-local-address) ( handle remote -- sockaddr )
+    [ handle-fd ] dip empty-sockaddr/size <int>
+    [ getsockname io-error ] 2keep drop ;
+
+M: object (get-remote-address) ( handle local -- sockaddr )
+    [ handle-fd ] dip empty-sockaddr/size <int>
+    [ getpeername io-error ] 2keep drop ;
+
+: init-client-socket ( fd -- )
+    SOL_SOCKET SO_OOBINLINE set-socket-option ;
+
+: wait-to-connect ( port -- )
+    dup handle>> handle-fd f 0 write
+    {
+        { [ 0 = ] [ drop ] }
+        { [ err_no EAGAIN = ] [ dup +output+ wait-for-port wait-to-connect ] }
+        { [ err_no EINTR = ] [ wait-to-connect ] }
+        [ (io-error) ]
+    } cond ;
+
+M: object establish-connection ( client-out remote -- )
+    [ drop ] [ [ handle>> handle-fd ] [ make-sockaddr/size ] bi* connect ] 2bi
+    {
+        { [ 0 = ] [ drop ] }
+        { [ err_no EINPROGRESS = ] [
+            [ +output+ wait-for-port ] [ wait-to-connect ] bi
+        ] }
+        [ (io-error) ]
+    } cond ;
+
+M: object ((client)) ( addrspec -- fd )
+    protocol-family SOCK_STREAM socket-fd dup init-client-socket ;
+
+! Server sockets - TCP and Unix domain
+: init-server-socket ( fd -- )
+    SOL_SOCKET SO_REUSEADDR set-socket-option ;
+
+: server-socket-fd ( addrspec type -- fd )
+    [ dup protocol-family ] dip socket-fd
+    dup init-server-socket
+    dup handle-fd rot make-sockaddr/size bind io-error ;
+
+M: object (server) ( addrspec -- handle )
+    [
+        SOCK_STREAM server-socket-fd
+        dup handle-fd 128 listen io-error
+    ] with-destructors ;
+
+: do-accept ( server addrspec -- fd sockaddr )
+    [ handle>> handle-fd ] [ empty-sockaddr/size <int> ] bi*
+    [ accept ] 2keep drop ; inline
+
+M: object (accept) ( server addrspec -- fd sockaddr )
+    2dup do-accept
+    {
+        { [ over 0 >= ] [ [ 2nip <fd> init-fd ] dip ] }
+        { [ err_no EINTR = ] [ 2drop (accept) ] }
+        { [ err_no EAGAIN = ] [
+            2drop
+            [ drop +input+ wait-for-port ]
+            [ (accept) ]
+            2bi
+        ] }
+        [ (io-error) ]
+    } cond ;
+
+! Datagram sockets - UDP and Unix domain
+M: unix (datagram)
+    [ SOCK_DGRAM server-socket-fd ] with-destructors ;
+
+SYMBOL: receive-buffer
+
+: packet-size 65536 ; inline
+
+[ packet-size malloc receive-buffer set-global ] "io.sockets.unix" add-init-hook
+
+:: do-receive ( port -- packet sockaddr )
+    port addr>> empty-sockaddr/size [| sockaddr len |
+        port handle>> handle-fd ! s
+        receive-buffer get-global ! buf
+        packet-size ! nbytes
+        0 ! flags
+        sockaddr ! from
+        len <int> ! fromlen
+        recvfrom dup 0 >= [
+            receive-buffer get-global swap memory>byte-array sockaddr
+        ] [
+            drop f f
+        ] if
+    ] call ;
+
+M: unix (receive) ( datagram -- packet sockaddr )
+    dup do-receive dup [ [ drop ] 2dip ] [
+        2drop [ +input+ wait-for-port ] [ (receive) ] bi
+    ] if ;
+
+:: do-send ( packet sockaddr len socket datagram -- )
+    socket handle-fd packet dup length 0 sockaddr len sendto
+    0 < [
+        err_no EINTR = [
+            packet sockaddr len socket datagram do-send
+        ] [
+            err_no EAGAIN = [
+                datagram +output+ wait-for-port
+                packet sockaddr len socket datagram do-send
+            ] [
+                (io-error)
+            ] if
+        ] if
+    ] when ;
+
+M: unix (send) ( packet addrspec datagram -- )
+    [ make-sockaddr/size ] [ [ handle>> ] keep ] bi* do-send ;
+
+! Unix domain sockets
+M: local protocol-family drop PF_UNIX ;
+
+M: local sockaddr-size drop "sockaddr-un" heap-size ;
+
+M: local empty-sockaddr drop "sockaddr-un" <c-object> ;
+
+M: local make-sockaddr
+    path>> (normalize-path)
+    dup length 1 + max-un-path > [ "Path too long" throw ] when
+    "sockaddr-un" <c-object>
+    AF_UNIX over set-sockaddr-un-family
+    dup sockaddr-un-path rot utf8 string>alien dup length memcpy ;
+
+M: local parse-sockaddr
+    drop
+    sockaddr-un-path utf8 alien>string <local> ;
diff --git a/basis/io/sockets/windows/nt/authors.txt b/basis/io/sockets/windows/nt/authors.txt
new file mode 100755 (executable)
index 0000000..026f4cd
--- /dev/null
@@ -0,0 +1,3 @@
+Doug Coleman
+Slava Pestov
+Mackenzie Straight
diff --git a/basis/io/sockets/windows/nt/nt.factor b/basis/io/sockets/windows/nt/nt.factor
new file mode 100644 (file)
index 0000000..f6a1bcf
--- /dev/null
@@ -0,0 +1,216 @@
+USING: alien alien.accessors alien.c-types byte-arrays
+continuations destructors io.ports io.timeouts io.sockets
+io.sockets io namespaces io.streams.duplex io.backend.windows
+io.sockets.windows io.backend.windows.nt windows.winsock kernel
+libc math sequences threads system combinators accessors ;
+IN: io.sockets.windows.nt
+
+: malloc-int ( object -- object )
+    "int" heap-size malloc tuck 0 set-alien-signed-4 ; inline
+
+M: winnt WSASocket-flags ( -- DWORD )
+    WSA_FLAG_OVERLAPPED ;
+
+: get-ConnectEx-ptr ( socket -- void* )
+    SIO_GET_EXTENSION_FUNCTION_POINTER
+    WSAID_CONNECTEX
+    "GUID" heap-size
+    "void*" <c-object>
+    [
+        "void*" heap-size
+        "DWORD" <c-object>
+        f
+        f
+        WSAIoctl SOCKET_ERROR = [
+            winsock-error-string throw
+        ] when
+    ] keep *void* ;
+
+TUPLE: ConnectEx-args port
+    s name namelen lpSendBuffer dwSendDataLength
+    lpdwBytesSent lpOverlapped ptr ;
+
+: wait-for-socket ( args -- n )
+    [ lpOverlapped>> ] [ port>> ] bi twiddle-thumbs ; inline
+
+: <ConnectEx-args> ( sockaddr size -- ConnectEx )
+    ConnectEx-args new
+        swap >>namelen
+        swap >>name
+        f >>lpSendBuffer
+        0 >>dwSendDataLength
+        f >>lpdwBytesSent
+        (make-overlapped) >>lpOverlapped ; inline
+
+: call-ConnectEx ( ConnectEx -- )
+    {
+        [ s>> ]
+        [ name>> ]
+        [ namelen>> ]
+        [ lpSendBuffer>> ]
+        [ dwSendDataLength>> ]
+        [ lpdwBytesSent>> ]
+        [ lpOverlapped>> ]
+        [ ptr>> ]
+    } cleave
+    "int"
+    { "SOCKET" "sockaddr_in*" "int" "PVOID" "DWORD" "LPDWORD" "void*" }
+    "stdcall" alien-indirect drop
+    winsock-error-string [ throw ] when* ; inline
+
+M: object establish-connection ( client-out remote -- )
+    make-sockaddr/size <ConnectEx-args>
+        swap >>port
+        dup port>> handle>> handle>> >>s
+        dup s>> get-ConnectEx-ptr >>ptr
+        dup call-ConnectEx
+        wait-for-socket drop ;
+
+TUPLE: AcceptEx-args port
+    sListenSocket sAcceptSocket lpOutputBuffer dwReceiveDataLength
+    dwLocalAddressLength dwRemoteAddressLength lpdwBytesReceived lpOverlapped ;
+
+: init-accept-buffer ( addr AcceptEx -- )
+    swap sockaddr-size 16 +
+        [ >>dwLocalAddressLength ] [ >>dwRemoteAddressLength ] bi
+        dup dwLocalAddressLength>> 2 * malloc &free >>lpOutputBuffer
+        drop ; inline
+
+: <AcceptEx-args> ( server addr -- AcceptEx )
+    AcceptEx-args new
+        2dup init-accept-buffer
+        swap SOCK_STREAM open-socket |dispose handle>> >>sAcceptSocket
+        over handle>> handle>> >>sListenSocket
+        swap >>port
+        0 >>dwReceiveDataLength
+        f >>lpdwBytesReceived
+        (make-overlapped) >>lpOverlapped ; inline
+
+: call-AcceptEx ( AcceptEx -- )
+    {
+        [ sListenSocket>> ]
+        [ sAcceptSocket>> ]
+        [ lpOutputBuffer>> ]
+        [ dwReceiveDataLength>> ]
+        [ dwLocalAddressLength>> ]
+        [ dwRemoteAddressLength>> ]
+        [ lpdwBytesReceived>> ]
+        [ lpOverlapped>> ]
+    } cleave AcceptEx drop
+    winsock-error-string [ throw ] when* ; inline
+
+: extract-remote-address ( AcceptEx -- sockaddr )
+    {
+        [ lpOutputBuffer>> ]
+        [ dwReceiveDataLength>> ]
+        [ dwLocalAddressLength>> ]
+        [ dwRemoteAddressLength>> ]
+    } cleave
+    f <void*>
+    0 <int>
+    f <void*>
+    [ 0 <int> GetAcceptExSockaddrs ] keep *void* ; inline
+
+M: object (accept) ( server addr -- handle sockaddr )
+    [
+        <AcceptEx-args>
+        {
+            [ call-AcceptEx ]
+            [ wait-for-socket drop ]
+            [ sAcceptSocket>> <win32-socket> ]
+            [ extract-remote-address ]
+        } cleave
+    ] with-destructors ;
+
+TUPLE: WSARecvFrom-args port
+       s lpBuffers dwBufferCount lpNumberOfBytesRecvd
+       lpFlags lpFrom lpFromLen lpOverlapped lpCompletionRoutine ;
+
+: make-receive-buffer ( -- WSABUF )
+    "WSABUF" malloc-object &free
+    default-buffer-size get over set-WSABUF-len
+    default-buffer-size get malloc &free over set-WSABUF-buf ; inline
+
+: <WSARecvFrom-args> ( datagram -- WSARecvFrom )
+    WSARecvFrom-args new
+        swap >>port
+        dup port>> handle>> handle>> >>s
+        dup port>> addr>> sockaddr-size
+            [ malloc &free >>lpFrom ]
+            [ malloc-int &free >>lpFromLen ] bi
+        make-receive-buffer >>lpBuffers
+        1 >>dwBufferCount
+        0 malloc-int &free >>lpFlags
+        0 malloc-int &free >>lpNumberOfBytesRecvd
+        (make-overlapped) >>lpOverlapped ; inline
+
+: call-WSARecvFrom ( WSARecvFrom -- )
+    {
+        [ s>> ]
+        [ lpBuffers>> ]
+        [ dwBufferCount>> ]
+        [ lpNumberOfBytesRecvd>> ]
+        [ lpFlags>> ]
+        [ lpFrom>> ]
+        [ lpFromLen>> ]
+        [ lpOverlapped>> ]
+        [ lpCompletionRoutine>> ]
+    } cleave WSARecvFrom socket-error* ; inline
+
+: parse-WSARecvFrom ( n WSARecvFrom -- packet sockaddr )
+    [ lpBuffers>> WSABUF-buf swap memory>byte-array ]
+    [ [ lpFrom>> ] [ lpFromLen>> *int ] bi memory>byte-array ] bi ; inline
+
+M: winnt (receive) ( datagram -- packet addrspec )
+    [
+        <WSARecvFrom-args>
+        [ call-WSARecvFrom ]
+        [ wait-for-socket ]
+        [ parse-WSARecvFrom ]
+        tri
+    ] with-destructors ;
+
+TUPLE: WSASendTo-args port
+       s lpBuffers dwBufferCount lpNumberOfBytesSent
+       dwFlags lpTo iToLen lpOverlapped lpCompletionRoutine ;
+
+: make-send-buffer ( packet -- WSABUF )
+    "WSABUF" malloc-object &free
+    [ [ malloc-byte-array &free ] dip set-WSABUF-buf ]
+    [ [ length ] dip set-WSABUF-len ]
+    [ nip ]
+    2tri ; inline
+
+: <WSASendTo-args> ( packet addrspec datagram -- WSASendTo )
+    WSASendTo-args new
+        swap >>port
+        dup port>> handle>> handle>> >>s
+        swap make-sockaddr/size
+            [ malloc-byte-array &free ] dip
+            [ >>lpTo ] [ >>iToLen ] bi*
+        swap make-send-buffer >>lpBuffers
+        1 >>dwBufferCount
+        0 >>dwFlags
+        0 <uint> >>lpNumberOfBytesSent
+        (make-overlapped) >>lpOverlapped ; inline
+
+: call-WSASendTo ( WSASendTo -- )
+    {
+        [ s>> ]
+        [ lpBuffers>> ]
+        [ dwBufferCount>> ]
+        [ lpNumberOfBytesSent>> ]
+        [ dwFlags>> ]
+        [ lpTo>> ]
+        [ iToLen>> ]
+        [ lpOverlapped>> ]
+        [ lpCompletionRoutine>> ]
+    } cleave WSASendTo socket-error* ; inline
+
+M: winnt (send) ( packet addrspec datagram -- )
+    [
+        <WSASendTo-args>
+        [ call-WSASendTo ]
+        [ wait-for-socket drop ]
+        bi
+    ] with-destructors ;
diff --git a/basis/io/sockets/windows/nt/tags.txt b/basis/io/sockets/windows/nt/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/sockets/windows/tags.txt b/basis/io/sockets/windows/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/basis/io/sockets/windows/windows.factor b/basis/io/sockets/windows/windows.factor
new file mode 100644 (file)
index 0000000..2900940
--- /dev/null
@@ -0,0 +1,61 @@
+USING: kernel accessors io.sockets io.backend.windows io.backend\r
+windows.winsock system destructors alien.c-types ;\r
+IN: io.sockets.windows\r
+\r
+HOOK: WSASocket-flags io-backend ( -- DWORD )\r
+\r
+TUPLE: win32-socket < win32-file ;\r
+\r
+: <win32-socket> ( handle -- win32-socket )\r
+    win32-socket new-win32-handle ;\r
+\r
+M: win32-socket dispose ( stream -- )\r
+    handle>> closesocket drop ;\r
+\r
+: unspecific-sockaddr/size ( addrspec -- sockaddr len )\r
+    [ empty-sockaddr/size ] [ protocol-family ] bi\r
+    pick set-sockaddr-in-family ;\r
+\r
+: opened-socket ( handle -- win32-socket )\r
+    <win32-socket> |dispose dup add-completion ;\r
+\r
+: open-socket ( addrspec type -- win32-socket )\r
+    [ protocol-family ] dip\r
+    0 f 0 WSASocket-flags WSASocket\r
+    dup socket-error\r
+    opened-socket ;\r
+\r
+M: object (get-local-address) ( socket addrspec -- sockaddr )\r
+    [ handle>> ] dip empty-sockaddr/size <int>\r
+    [ getsockname socket-error ] 2keep drop ;\r
+\r
+M: object (get-remote-address) ( socket addrspec -- sockaddr )\r
+    [ handle>> ] dip empty-sockaddr/size <int>\r
+    [ getpeername socket-error ] 2keep drop ;\r
+\r
+: bind-socket ( win32-socket sockaddr len -- )\r
+    [ handle>> ] 2dip bind socket-error ;\r
+\r
+M: object ((client)) ( addrspec -- handle )\r
+    [ SOCK_STREAM open-socket ] keep\r
+    [ unspecific-sockaddr/size bind-socket ] [ drop ] 2bi ;\r
+\r
+: server-socket ( addrspec type -- fd )\r
+    [ open-socket ] [ drop ] 2bi\r
+    [ make-sockaddr/size bind-socket ] [ drop ] 2bi ;\r
+\r
+! http://support.microsoft.com/kb/127144\r
+! NOTE: Possibly tweak this because of SYN flood attacks\r
+: listen-backlog ( -- n ) HEX: 7fffffff ; inline\r
+\r
+M: object (server) ( addrspec -- handle )\r
+    [\r
+        SOCK_STREAM server-socket\r
+        dup handle>> listen-backlog listen winsock-return-check\r
+    ] with-destructors ;\r
+\r
+M: windows (datagram) ( addrspec -- handle )\r
+    [ SOCK_DGRAM server-socket ] with-destructors ;\r
+\r
+M: windows addrinfo-error ( n -- )\r
+    winsock-return-check ;\r
index ca4f424fb6cadf1751d081bc67b21f3d631e54c0..48afafeec742ac253e3f74c78f633fb9fba7e097 100644 (file)
@@ -15,7 +15,7 @@ HELP: duplex-stream
 { $class-description "A bidirectional stream wrapping an input and output stream." } ;
 
 HELP: <duplex-stream>
-{ $values { "in" "an input stream" } { "out" "an output stream" } { "stream" " a duplex stream" } }
+{ $values { "in" "an input stream" } { "out" "an output stream" } { "duplex-stream" duplex-stream } }
 { $description "Creates a duplex stream. Writing to a duplex stream will write to " { $snippet "out" } ", and reading from a duplex stream will read from " { $snippet "in" } ". Closing a duplex stream closes both the input and output streams." } ;
 
 HELP: with-stream
index febec6573a104221787751e48df6c4b91ce068d5..c29f3d5d702a7aa87d849f673651173dca9f0f1e 100644 (file)
@@ -150,7 +150,7 @@ HELP: input
     { $code "\"2 3 + .\" dup <input> write-object nl" }
 } ;
 
-HELP: <input> ( string -- input )
+HELP: <input>
 { $values { "string" string } { "input" input } }
 { $description "Creates a new " { $link input } "." } ;
 
index fe86ba9e3dbe996a0c065c3cbc7f5c3d39283c36..7589d4918ec29fff8fe0231269b201b9d8a48713 100644 (file)
@@ -1,14 +1,20 @@
 ! Copyright (C) 2008 Slava Pestov.\r
 ! See http://factorcode.org/license.txt for BSD license.\r
+USING: threads io.backend namespaces init math kernel ;\r
 IN: io.thread\r
-USING: threads io.backend namespaces init math ;\r
+\r
+! The Cocoa UI backend stops the I/O thread and takes over\r
+! completely.\r
+SYMBOL: io-thread-running?\r
 \r
 : io-thread ( -- )\r
     sleep-time io-multiplex yield ;\r
 \r
 : start-io-thread ( -- )\r
-    [ io-thread t ]\r
-    "I/O wait" spawn-server\r
-    \ io-thread set-global ;\r
+    [ [ io-thread-running? get-global ] [ io-thread ] [ ] while ]\r
+    "I/O wait" spawn drop ;\r
 \r
-[ start-io-thread ] "io.thread" add-init-hook\r
+[\r
+    t io-thread-running? set-global\r
+    start-io-thread\r
+] "io.thread" add-init-hook\r
diff --git a/basis/io/unix/authors.txt b/basis/io/unix/authors.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/backend/authors.txt b/basis/io/unix/backend/authors.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/backend/backend.factor b/basis/io/unix/backend/backend.factor
deleted file mode 100644 (file)
index 954a0a6..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-! Copyright (C) 2004, 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types alien.syntax generic assocs kernel
-kernel.private math io.ports sequences strings sbufs threads
-unix vectors io.buffers io.backend io.encodings math.parser
-continuations system libc qualified namespaces make io.timeouts
-io.encodings.utf8 destructors accessors summary combinators
-locals unix.time fry ;
-QUALIFIED: io
-IN: io.unix.backend
-
-GENERIC: handle-fd ( handle -- fd )
-
-TUPLE: fd fd disposed ;
-
-: init-fd ( fd -- fd )
-    [
-        |dispose
-        dup fd>> F_SETFL O_NONBLOCK fcntl io-error
-        dup fd>> F_SETFD FD_CLOEXEC fcntl io-error
-    ] with-destructors ;
-
-: <fd> ( n -- fd )
-    #! We drop the error code rather than calling io-error,
-    #! since on OS X 10.3, this operation fails from init-io
-    #! when running the Factor.app (presumably because fd 0 and
-    #! 1 are closed).
-    f fd boa ;
-
-M: fd dispose
-    dup disposed>> [ drop ] [
-        [ cancel-operation ]
-        [ t >>disposed drop ]
-        [ fd>> close-file ]
-        tri
-    ] if ;
-
-M: fd handle-fd dup check-disposed fd>> ;
-
-! I/O multiplexers
-TUPLE: mx fd reads writes ;
-
-: new-mx ( class -- obj )
-    new
-        H{ } clone >>reads
-        H{ } clone >>writes ; inline
-
-GENERIC: add-input-callback ( thread fd mx -- )
-
-M: mx add-input-callback reads>> push-at ;
-
-GENERIC: add-output-callback ( thread fd mx -- )
-
-M: mx add-output-callback writes>> push-at ;
-
-GENERIC: remove-input-callbacks ( fd mx -- callbacks )
-
-M: mx remove-input-callbacks reads>> delete-at* drop ;
-
-GENERIC: remove-output-callbacks ( fd mx -- callbacks )
-
-M: mx remove-output-callbacks writes>> delete-at* drop ;
-
-GENERIC: wait-for-events ( ms mx -- )
-
-: input-available ( fd mx -- )
-    reads>> delete-at* drop [ resume ] each ;
-
-: output-available ( fd mx -- )
-    writes>> delete-at* drop [ resume ] each ;
-
-M: fd cancel-operation ( fd -- )
-    dup disposed>> [ drop ] [
-        fd>>
-        mx get-global
-        [ remove-input-callbacks [ t swap resume-with ] each ]
-        [ remove-output-callbacks [ t swap resume-with ] each ]
-        2bi
-    ] if ;
-
-SYMBOL: +retry+ ! just try the operation again without blocking
-SYMBOL: +input+
-SYMBOL: +output+
-
-ERROR: io-timeout ;
-
-M: io-timeout summary drop "I/O operation timed out" ;
-
-: wait-for-fd ( handle event -- )
-    dup +retry+ eq? [ 2drop ] [
-        '[
-            swap handle-fd mx get-global _ {
-                { +input+ [ add-input-callback ] }
-                { +output+ [ add-output-callback ] }
-            } case
-        ] "I/O" suspend nip [ io-timeout ] when
-    ] if ;
-
-: wait-for-port ( port event -- )
-    '[ handle>> _ wait-for-fd ] with-timeout ;
-
-! Some general stuff
-: file-mode OCT: 0666 ;
-! Readers
-: (refill) ( port -- n )
-    [ handle>> ]
-    [ buffer>> buffer-end ]
-    [ buffer>> buffer-capacity ] tri read ;
-
-! Returns an event to wait for which will ensure completion of
-! this request
-GENERIC: refill ( port handle -- event/f )
-
-M: fd refill
-    fd>> over buffer>> [ buffer-end ] [ buffer-capacity ] bi read
-    {
-        { [ dup 0 >= ] [ swap buffer>> n>buffer f ] }
-        { [ err_no EINTR = ] [ 2drop +retry+ ] }
-        { [ err_no EAGAIN = ] [ 2drop +input+ ] }
-        [ (io-error) ]
-    } cond ;
-
-M: unix (wait-to-read) ( port -- )
-    dup
-    dup handle>> dup check-disposed refill dup
-    [ dupd wait-for-port (wait-to-read) ] [ 2drop ] if ;
-
-! Writers
-GENERIC: drain ( port handle -- event/f )
-
-M: fd drain
-    fd>> over buffer>> [ buffer@ ] [ buffer-length ] bi write
-    {
-        { [ dup 0 >= ] [
-            over buffer>> buffer-consume
-            buffer>> buffer-empty? f +output+ ?
-        ] }
-        { [ err_no EINTR = ] [ 2drop +retry+ ] }
-        { [ err_no EAGAIN = ] [ 2drop +output+ ] }
-        [ (io-error) ]
-    } cond ;
-
-M: unix (wait-to-write) ( port -- )
-    dup
-    dup handle>> dup check-disposed drain
-    dup [ wait-for-port ] [ 2drop ] if ;
-
-M: unix io-multiplex ( ms/f -- )
-    mx get-global wait-for-events ;
-
-! On Unix, you're not supposed to set stdin to non-blocking
-! because the fd might be shared with another process (either
-! parent or child). So what we do is have the VM start a thread
-! which pumps data from the real stdin to a pipe. We set the
-! pipe to non-blocking, and read from it instead of the real
-! stdin. Very crufty, but it will suffice until we get native
-! threading support at the language level.
-TUPLE: stdin control size data disposed ;
-
-M: stdin dispose*
-    [
-        [ control>> &dispose drop ]
-        [ size>> &dispose drop ]
-        [ data>> &dispose drop ]
-        tri
-    ] with-destructors ;
-
-: wait-for-stdin ( stdin -- n )
-    [ control>> CHAR: X over io:stream-write1 io:stream-flush ]
-    [ size>> "ssize_t" heap-size swap io:stream-read *int ]
-    bi ;
-
-:: refill-stdin ( buffer stdin size -- )
-    stdin data>> handle-fd buffer buffer-end size read
-    dup 0 < [
-        drop
-        err_no EINTR = [ buffer stdin size refill-stdin ] [ (io-error) ] if
-    ] [
-        size = [ "Error reading stdin pipe" throw ] unless
-        size buffer n>buffer
-    ] if ;
-
-M: stdin refill
-    [ buffer>> ] [ dup wait-for-stdin ] bi* refill-stdin f ;
-
-: control-write-fd ( -- fd ) &: control_write *uint ;
-
-: size-read-fd ( -- fd ) &: size_read *uint ;
-
-: data-read-fd ( -- fd ) &: stdin_read *uint ;
-
-: <stdin> ( -- stdin )
-    stdin new
-        control-write-fd <fd> <output-port> >>control
-        size-read-fd <fd> init-fd <input-port> >>size
-        data-read-fd <fd> >>data ;
-
-M: unix (init-stdio) ( -- )
-    <stdin> <input-port>
-    1 <fd> <output-port>
-    2 <fd> <output-port> ;
-
-! mx io-task for embedding an fd-based mx inside another mx
-TUPLE: mx-port < port mx ;
-
-: <mx-port> ( mx -- port )
-    dup fd>> mx-port <port> swap >>mx ;
-
-: multiplexer-error ( n -- n )
-    dup 0 < [
-        err_no [ EAGAIN = ] [ EINTR = ] bi or
-        [ drop 0 ] [ (io-error) ] if
-    ] when ;
-
-: ?flag ( n mask symbol -- n )
-    pick rot bitand 0 > [ , ] [ drop ] if ;
diff --git a/basis/io/unix/backend/summary.txt b/basis/io/unix/backend/summary.txt
deleted file mode 100644 (file)
index 8f66d88..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Non-blocking I/O and sockets on Unix-like systems
diff --git a/basis/io/unix/backend/tags.txt b/basis/io/unix/backend/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/bsd/authors.txt b/basis/io/unix/bsd/authors.txt
deleted file mode 100755 (executable)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/bsd/bsd.factor b/basis/io/unix/bsd/bsd.factor
deleted file mode 100644 (file)
index e158347..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: namespaces system kernel accessors assocs continuations
-unix io.backend io.unix.backend io.unix.kqueue ;
-IN: io.unix.bsd
-
-M: bsd init-io ( -- )
-    <kqueue-mx> mx set-global ;
-
-! M: bsd (monitor) ( path recursive? mailbox -- )
-!     swap [ "Recursive kqueue monitors not supported" throw ] when
-!     <vnode-monitor> ;
diff --git a/basis/io/unix/bsd/tags.txt b/basis/io/unix/bsd/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/epoll/authors.txt b/basis/io/unix/epoll/authors.txt
deleted file mode 100755 (executable)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/epoll/epoll.factor b/basis/io/unix/epoll/epoll.factor
deleted file mode 100644 (file)
index 93d0b4a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types kernel io.ports io.unix.backend
-bit-arrays sequences assocs struct-arrays math namespaces locals
-fry unix unix.linux.epoll unix.time ;
-IN: io.unix.epoll
-
-TUPLE: epoll-mx < mx events ;
-
-: max-events ( -- n )
-    #! We read up to 256 events at a time. This is an arbitrary
-    #! constant...
-    256 ; inline
-
-: <epoll-mx> ( -- mx )
-    epoll-mx new-mx
-        max-events epoll_create dup io-error >>fd
-        max-events "epoll-event" <struct-array> >>events ;
-
-: make-event ( fd events -- event )
-    "epoll-event" <c-object>
-    [ set-epoll-event-events ] keep
-    [ set-epoll-event-fd ] keep ;
-
-:: do-epoll-ctl ( fd mx what events -- )
-    mx fd>> what fd fd events make-event epoll_ctl io-error ;
-
-: do-epoll-add ( fd mx events -- )
-    EPOLL_CTL_ADD swap EPOLLONESHOT bitor do-epoll-ctl ;
-
-: do-epoll-del ( fd mx events -- )
-    EPOLL_CTL_DEL swap do-epoll-ctl ;
-
-M: epoll-mx add-input-callback ( thread fd mx -- )
-    [ EPOLLIN do-epoll-add ] [ call-next-method ] 2bi ;
-
-M: epoll-mx add-output-callback ( thread fd mx -- )
-    [ EPOLLOUT do-epoll-add ] [ call-next-method ] 2bi ;
-
-M: epoll-mx remove-input-callbacks ( fd mx -- seq )
-    2dup reads>> key? [
-        [ call-next-method ] [ EPOLLIN do-epoll-del ] 2bi
-    ] [ 2drop f ] if ;
-
-M: epoll-mx remove-output-callbacks ( fd mx -- seq )
-    2dup writes>> key? [
-        [ EPOLLOUT do-epoll-del ] [ call-next-method ] 2bi
-    ] [ 2drop f ] if ;
-
-: wait-event ( mx us -- n )
-    [ [ fd>> ] [ events>> ] bi [ underlying>> ] [ length ] bi ] [ 1000 /i ] bi*
-    epoll_wait multiplexer-error ;
-
-: handle-event ( event mx -- )
-    [ epoll-event-fd ] dip
-    [ EPOLLIN EPOLLOUT bitor do-epoll-del ]
-    [ input-available ] [ output-available ] 2tri ;
-
-: handle-events ( mx n -- )
-    [ dup events>> ] dip head-slice swap '[ _ handle-event ] each ;
-
-M: epoll-mx wait-for-events ( us mx -- )
-    swap 60000000 or dupd wait-event handle-events ;
diff --git a/basis/io/unix/epoll/tags.txt b/basis/io/unix/epoll/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/authors.txt b/basis/io/unix/files/authors.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/files/bsd/bsd.factor b/basis/io/unix/files/bsd/bsd.factor
deleted file mode 100644 (file)
index 3c94baa..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel alien.syntax math io.unix.files system
-unix.stat accessors combinators calendar.unix ;
-IN: io.unix.files.bsd
-
-TUPLE: bsd-file-info < unix-file-info birth-time flags gen ;
-
-M: bsd new-file-info ( -- class ) bsd-file-info new ;
-
-M: bsd stat>file-info ( stat -- file-info )
-    [ call-next-method ] keep
-    {
-        [ stat-st_flags >>flags ]
-        [ stat-st_gen >>gen ]
-        [
-            stat-st_birthtimespec timespec>unix-time
-            >>birth-time
-        ]
-    } cleave ;
diff --git a/basis/io/unix/files/bsd/tags.txt b/basis/io/unix/files/bsd/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/files-docs.factor b/basis/io/unix/files/files-docs.factor
deleted file mode 100644 (file)
index 3798380..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: classes help.markup help.syntax io.streams.string
-strings math calendar io.files ;
-IN: io.unix.files
-
-HELP: file-group-id
-{ $values
-     { "path" "a pathname string" }
-     { "gid" integer } }
-{ $description "Returns the group id for a given file." } ;
-
-HELP: file-group-name
-{ $values
-     { "path" "a pathname string" }
-     { "string" string } }
-{ $description "Returns the group name for a given file." } ;
-
-HELP: file-permissions
-{ $values
-     { "path" "a pathname string" }
-     { "n" integer } }
-{ $description "Returns the Unix file permissions for a given file." } ;
-
-HELP: file-username
-{ $values
-     { "path" "a pathname string" }
-     { "string" string } }
-{ $description "Returns the username for a given file." } ;
-
-HELP: file-user-id
-{ $values
-     { "path" "a pathname string" }
-     { "uid" integer } }
-{ $description "Returns the user id for a given file." } ;
-
-HELP: group-execute?
-{ $values
-     { "obj" "a pathname string or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "group execute" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: group-read?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "group read" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: group-write?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "group write" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: other-execute?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "other execute" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: other-read?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "other read" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: other-write?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "other write" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: set-file-access-time
-{ $values
-     { "path" "a pathname string" } { "timestamp" timestamp } }
-{ $description "Sets a file's last access timestamp." } ;
-
-HELP: set-file-group
-{ $values
-     { "path" "a pathname string" } { "string/id" "a string or a group id" } }
-{ $description "Sets a file's group id from the given group id or group name." } ;
-
-HELP: set-file-ids
-{ $values
-     { "path" "a pathname string" } { "uid" integer } { "gid" integer } }
-{ $description "Sets the user id and group id of a file with a single library call." } ;
-
-HELP: set-file-permissions
-{ $values
-     { "path" "a pathname string" } { "n" "an integer, interepreted as a string of bits" } }
-{ $description "Sets the file permissions for a given file with the supplied Unix permissions integer. Supplying an octal number with " { $link POSTPONE: OCT: } " is recommended." }
-{ $examples "Using the tradidional octal value:"
-    { $unchecked-example "USING: io.unix.files kernel ;"
-        "\"resource:license.txt\" OCT: 755 set-file-permissions"
-        ""
-    }
-    "Higher-level, setting named bits:"
-    { $unchecked-example "USING: io.unix.files kernel math.bitwise ;"
-    "\"resource:license.txt\""
-    "{ USER-ALL GROUP-READ GROUP-EXECUTE OTHER-READ OTHER-EXECUTE }"
-    "flags set-file-permissions"
-    "" }
-} ;
-
-HELP: set-file-times
-{ $values
-     { "path" "a pathname string" } { "timestamps" "an array of two timestamps" } }
-{ $description "Sets the access and write timestamps for a file as provided in the input array. A value of " { $link f } " provided for either of the timestamps will not change that timestamp." } ;
-
-HELP: set-file-user
-{ $values
-     { "path" "a pathname string" } { "string/id" "a string or a user id" } }
-{ $description "Sets a file's user id from the given user id or username." } ;
-
-HELP: set-file-modified-time
-{ $values
-     { "path" "a pathname string" } { "timestamp" timestamp } }
-{ $description "Sets a file's last modified timestamp, or write timestamp." } ;
-
-HELP: set-gid
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "gid" } " bit of a file to true or false." } ;
-
-HELP: gid?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "gid" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: set-group-execute
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "group execute" } " bit of a file to true or false." } ;
-
-HELP: set-group-read
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "group read" } " bit of a file to true or false." } ;
-
-HELP: set-group-write
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "group write" } " bit of a file to true or false." } ;
-
-HELP: set-other-execute
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "other execute" } " bit of a file to true or false." } ;
-
-HELP: set-other-read
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "other read" } " bit of a file to true or false." } ;
-
-HELP: set-other-write
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "other execute" } " bit of a file to true or false." } ;
-
-HELP: set-sticky
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "sticky" } " bit of a file to true or false." } ;
-
-HELP: sticky?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "sticky" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: set-uid
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "uid" } " bit of a file to true or false." } ;
-
-HELP: uid?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "uid" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: set-user-execute
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "user execute" } " bit of a file to true or false." } ;
-
-HELP: set-user-read
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "user read" } " bit of a file to true or false." } ;
-
-HELP: set-user-write
-{ $values
-     { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Sets the " { $snippet "user write" } " bit of a file to true or false." } ;
-
-HELP: user-execute?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "user execute" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: user-read?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "user read" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-HELP: user-write?
-{ $values
-     { "obj" "a pathname string, file-info object, or an integer" }
-     { "?" "a boolean" } }
-{ $description "Tests whether the " { $snippet "user write" } " bit is set on a file, " { $link file-info } ", or an integer." } ;
-
-ARTICLE: "unix-file-permissions" "Unix file permissions"
-"Reading all file permissions:"
-{ $subsection file-permissions }
-"Reading individual file permissions:"
-{ $subsection uid? }
-{ $subsection gid? }
-{ $subsection sticky? }
-{ $subsection user-read? }
-{ $subsection user-write? }
-{ $subsection user-execute? }
-{ $subsection group-read? }
-{ $subsection group-write? }
-{ $subsection group-execute? }
-{ $subsection other-read? }
-{ $subsection other-write? }
-{ $subsection other-execute? }
-"Writing all file permissions:"
-{ $subsection set-file-permissions }
-"Writing individual file permissions:"
-{ $subsection set-uid }
-{ $subsection set-gid }
-{ $subsection set-sticky }
-{ $subsection set-user-read }
-{ $subsection set-user-write }
-{ $subsection set-user-execute }
-{ $subsection set-group-read }
-{ $subsection set-group-write }
-{ $subsection set-group-execute }
-{ $subsection set-other-read }
-{ $subsection set-other-write }
-{ $subsection set-other-execute } ;
-
-ARTICLE: "unix-file-timestamps" "Unix file timestamps"
-"To read file times, use the accessors on the object returned by the " { $link file-info } " word." $nl
-"Setting multiple file times:"
-{ $subsection set-file-times }
-"Setting just the last access time:"
-{ $subsection set-file-access-time }
-"Setting just the last modified time:"
-{ $subsection set-file-modified-time } ;
-
-
-ARTICLE: "unix-file-ids" "Unix file user and group ids"
-"Reading file user data:"
-{ $subsection file-user-id }
-{ $subsection file-username }
-"Setting file user data:"
-{ $subsection set-file-user }
-"Reading file group data:"
-{ $subsection file-group-id }
-{ $subsection file-group-name }
-"Setting file group data:"
-{ $subsection set-file-group } ;
-
-
-ARTICLE: "io.unix.files" "Unix file attributes"
-"The " { $vocab-link "io.unix.files" } " vocabulary implements the Unix backend for opening files and provides a high-level way to set permissions, timestamps, and user and group ids for files."
-{ $subsection "unix-file-permissions" }
-{ $subsection "unix-file-timestamps" }
-{ $subsection "unix-file-ids" } ;
-
-ABOUT: "io.unix.files"
diff --git a/basis/io/unix/files/files-tests.factor b/basis/io/unix/files/files-tests.factor
deleted file mode 100644 (file)
index 78a80ad..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-USING: tools.test io.files continuations kernel io.unix.files
-math.bitwise calendar accessors math.functions math unix.users
-unix.groups arrays sequences ;
-IN: io.unix.files.tests
-
-[ "/usr/libexec/" ] [ "/usr/libexec/awk/" parent-directory ] unit-test
-[ "/etc/" ] [ "/etc/passwd" parent-directory ] unit-test
-[ "/" ] [ "/etc/" parent-directory ] unit-test
-[ "/" ] [ "/etc" parent-directory ] unit-test
-[ "/" ] [ "/" parent-directory ] unit-test
-
-[ f ] [ "" root-directory? ] unit-test
-[ t ] [ "/" root-directory? ] unit-test
-[ t ] [ "//" root-directory? ] unit-test
-[ t ] [ "///////" root-directory? ] unit-test
-
-[ "/" ] [ "/" file-name ] unit-test
-[ "///" ] [ "///" file-name ] unit-test
-
-[ "/" ] [ "/" "../.." append-path ] unit-test
-[ "/" ] [ "/" "../../" append-path ] unit-test
-[ "/lib" ] [ "/" "../lib" append-path ] unit-test
-[ "/lib/" ] [ "/" "../lib/" append-path ] unit-test
-[ "/lib" ] [ "/" "../../lib" append-path ] unit-test
-[ "/lib/" ] [ "/" "../../lib/" append-path ] unit-test
-
-[ "/lib" ] [ "/usr/" "/lib" append-path ] unit-test
-[ "/lib/" ] [ "/usr/" "/lib/" append-path ] unit-test
-[ "/lib/bux" ] [ "/usr" "/lib/bux" append-path ] unit-test
-[ "/lib/bux/" ] [ "/usr" "/lib/bux/" append-path ] unit-test
-[ t ] [ "/foo" absolute-path? ] unit-test
-
-: test-file ( -- path )
-    "permissions" temp-file ;
-
-: prepare-test-file ( -- )
-    [ test-file delete-file ] ignore-errors
-    test-file touch-file ;
-
-: perms ( -- n )
-    test-file file-permissions OCT: 7777 mask ;
-
-prepare-test-file
-
-[ t ]
-[ test-file { USER-ALL GROUP-ALL OTHER-ALL } flags set-file-permissions perms OCT: 777 = ] unit-test
-
-[ t ] [ test-file user-read? ] unit-test
-[ t ] [ test-file user-write? ] unit-test
-[ t ] [ test-file user-execute? ] unit-test
-[ t ] [ test-file group-read? ] unit-test
-[ t ] [ test-file group-write? ] unit-test
-[ t ] [ test-file group-execute? ] unit-test
-[ t ] [ test-file other-read? ] unit-test
-[ t ] [ test-file other-write? ] unit-test
-[ t ] [ test-file other-execute? ] unit-test
-
-[ t ] [ test-file f set-other-execute perms OCT: 776 = ] unit-test
-[ f ] [ test-file file-info other-execute? ] unit-test
-
-[ t ] [ test-file f set-other-write perms OCT: 774 = ] unit-test
-[ f ] [ test-file file-info other-write? ] unit-test
-
-[ t ] [ test-file f set-other-read perms OCT: 770 = ] unit-test
-[ f ] [ test-file file-info other-read? ] unit-test
-
-[ t ] [ test-file f set-group-execute perms OCT: 760 = ] unit-test
-[ f ] [ test-file file-info group-execute? ] unit-test
-
-[ t ] [ test-file f set-group-write perms OCT: 740 = ] unit-test
-[ f ] [ test-file file-info group-write? ] unit-test
-
-[ t ] [ test-file f set-group-read perms OCT: 700 = ] unit-test
-[ f ] [ test-file file-info group-read? ] unit-test
-
-[ t ] [ test-file f set-user-execute perms OCT: 600 = ] unit-test
-[ f ] [ test-file file-info other-execute? ] unit-test
-
-[ t ] [ test-file f set-user-write perms OCT: 400 = ] unit-test
-[ f ] [ test-file file-info other-write? ] unit-test
-
-[ t ] [ test-file f set-user-read perms OCT: 000 = ] unit-test
-[ f ] [ test-file file-info other-read? ] unit-test
-
-[ t ]
-[ test-file { USER-ALL GROUP-ALL OTHER-EXECUTE } flags set-file-permissions perms OCT: 771 = ] unit-test
-
-prepare-test-file
-
-[ t ]
-[
-    test-file now
-    [ set-file-access-time ] 2keep
-    [ file-info accessed>> ]
-    [ [ [ truncate >integer ] change-second ] bi@ ] bi* =
-] unit-test
-
-[ t ]
-[
-    test-file now
-    [ set-file-modified-time ] 2keep
-    [ file-info modified>> ]
-    [ [ [ truncate >integer ] change-second ] bi@ ] bi* =
-] unit-test
-
-[ t ]
-[
-    test-file now [ dup 2array set-file-times ] 2keep
-    [ file-info [ modified>> ] [ accessed>> ] bi ] dip
-    3array
-    [ [ truncate >integer ] change-second ] map all-equal?
-] unit-test
-
-[ ] [ test-file f now 2array set-file-times ] unit-test
-[ ] [ test-file now f 2array set-file-times ] unit-test
-[ ] [ test-file f f 2array set-file-times ] unit-test
-
-
-[ ] [ test-file real-username set-file-user ] unit-test
-[ ] [ test-file real-user-id set-file-user ] unit-test
-[ ] [ test-file real-group-name set-file-group ] unit-test
-[ ] [ test-file real-group-id set-file-group ] unit-test
-
-[ t ] [ test-file file-username real-username = ] unit-test
-[ t ] [ test-file file-group-name real-group-name = ] unit-test
-
-[ ]
-[ test-file real-user-id real-group-id set-file-ids ] unit-test
-
-[ ]
-[ test-file f real-group-id set-file-ids ] unit-test
-
-[ ]
-[ test-file real-user-id f set-file-ids ] unit-test
-
-[ ]
-[ test-file f f set-file-ids ] unit-test
-
-[ t ] [ OCT: 4000 uid? ] unit-test
-[ t ] [ OCT: 2000 gid? ] unit-test
-[ t ] [ OCT: 1000 sticky? ] unit-test
-[ t ] [ OCT: 400 user-read? ] unit-test
-[ t ] [ OCT: 200 user-write? ] unit-test
-[ t ] [ OCT: 100 user-execute? ] unit-test
-[ t ] [ OCT: 040 group-read? ] unit-test
-[ t ] [ OCT: 020 group-write? ] unit-test
-[ t ] [ OCT: 010 group-execute? ] unit-test
-[ t ] [ OCT: 004 other-read? ] unit-test
-[ t ] [ OCT: 002 other-write? ] unit-test
-[ t ] [ OCT: 001 other-execute? ] unit-test
-
-[ f ] [ 0 uid? ] unit-test
-[ f ] [ 0 gid? ] unit-test
-[ f ] [ 0 sticky? ] unit-test
-[ f ] [ 0 user-read? ] unit-test
-[ f ] [ 0 user-write? ] unit-test
-[ f ] [ 0 user-execute? ] unit-test
-[ f ] [ 0 group-read? ] unit-test
-[ f ] [ 0 group-write? ] unit-test
-[ f ] [ 0 group-execute? ] unit-test
-[ f ] [ 0 other-read? ] unit-test
-[ f ] [ 0 other-write? ] unit-test
-[ f ] [ 0 other-execute? ] unit-test
diff --git a/basis/io/unix/files/files.factor b/basis/io/unix/files/files.factor
deleted file mode 100644 (file)
index 1fc5fe9..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-! Copyright (C) 2005, 2008 Slava Pestov, Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: io.backend io.ports io.unix.backend io.files io
-unix unix.stat unix.time kernel math continuations
-math.bitwise byte-arrays alien combinators calendar
-io.encodings.binary accessors sequences strings system
-io.files.private destructors vocabs.loader calendar.unix
-unix.stat alien.c-types arrays unix.users unix.groups
-environment fry io.encodings.utf8 alien.strings
-combinators.short-circuit ;
-IN: io.unix.files
-
-M: unix cwd ( -- path )
-    MAXPATHLEN [ <byte-array> ] keep getcwd
-    [ (io-error) ] unless* ;
-
-M: unix cd ( path -- ) [ chdir ] unix-system-call drop ;
-
-: read-flags O_RDONLY ; inline
-
-: open-read ( path -- fd ) O_RDONLY file-mode open-file ;
-
-M: unix (file-reader) ( path -- stream )
-    open-read <fd> init-fd <input-port> ;
-
-: write-flags { O_WRONLY O_CREAT O_TRUNC } flags ; inline
-
-: open-write ( path -- fd )
-    write-flags file-mode open-file ;
-
-M: unix (file-writer) ( path -- stream )
-    open-write <fd> init-fd <output-port> ;
-
-: append-flags { O_WRONLY O_APPEND O_CREAT } flags ; inline
-
-: open-append ( path -- fd )
-    [
-        append-flags file-mode open-file |dispose
-        dup 0 SEEK_END lseek io-error
-    ] with-destructors ;
-
-M: unix (file-appender) ( path -- stream )
-    open-append <fd> init-fd <output-port> ;
-
-: touch-mode ( -- n )
-    { O_WRONLY O_APPEND O_CREAT O_EXCL } flags ; foldable
-
-M: unix touch-file ( path -- )
-    normalize-path
-    dup exists? [ touch ] [
-        touch-mode file-mode open-file close-file
-    ] if ;
-
-M: unix move-file ( from to -- )
-    [ normalize-path ] bi@ rename io-error ;
-
-M: unix delete-file ( path -- ) normalize-path unlink-file ;
-
-M: unix make-directory ( path -- )
-    normalize-path OCT: 777 mkdir io-error ;
-
-M: unix delete-directory ( path -- )
-    normalize-path rmdir io-error ;
-
-: (copy-file) ( from to -- )
-    dup parent-directory make-directories
-    binary <file-writer> [
-        swap binary <file-reader> [
-            swap stream-copy
-        ] with-disposal
-    ] with-disposal ;
-
-M: unix copy-file ( from to -- )
-    [ normalize-path ] bi@
-    [ (copy-file) ]
-    [ swap file-info permissions>> chmod io-error ]
-    2bi ;
-
-TUPLE: unix-file-system-info < file-system-info
-block-size preferred-block-size
-blocks blocks-free blocks-available
-files files-free files-available
-name-max flags id ;
-
-HOOK: new-file-system-info os ( --  file-system-info )
-
-M: unix new-file-system-info ( -- ) unix-file-system-info new ;
-
-HOOK: file-system-statfs os ( path -- statfs )
-
-M: unix file-system-statfs drop f ;
-
-HOOK: file-system-statvfs os ( path -- statvfs )
-
-M: unix file-system-statvfs drop f ;
-
-HOOK: statfs>file-system-info os ( file-system-info statfs -- file-system-info' )
-
-M: unix statfs>file-system-info drop ;
-
-HOOK: statvfs>file-system-info os ( file-system-info statvfs -- file-system-info' )
-
-M: unix statvfs>file-system-info drop ;
-
-: file-system-calculations ( file-system-info -- file-system-info' )
-    {
-        [ dup [ blocks-available>> ] [ block-size>> ] bi * >>available-space drop ]
-        [ dup [ blocks-free>> ] [ block-size>> ] bi * >>free-space drop ]
-        [ dup [ blocks>> ] [ block-size>> ] bi * >>total-space drop ]
-        [ dup [ total-space>> ] [ free-space>> ] bi - >>used-space drop ]
-        [ ]
-    } cleave ;
-
-M: unix file-system-info
-    normalize-path
-    [ new-file-system-info ] dip
-    [ file-system-statfs statfs>file-system-info ]
-    [ file-system-statvfs statvfs>file-system-info ] bi
-    file-system-calculations ;
-
-os {
-    { linux   [ "io.unix.files.linux"   require ] }
-    { macosx  [ "io.unix.files.macosx"  require ] }
-    { freebsd [ "io.unix.files.freebsd" require ] }
-    { netbsd  [ "io.unix.files.netbsd"  require ] }
-    { openbsd [ "io.unix.files.openbsd" require ] }
-} case
-
-TUPLE: unix-file-info < file-info uid gid dev ino
-nlink rdev blocks blocksize ;
-
-HOOK: new-file-info os ( -- file-info )
-
-HOOK: stat>file-info os ( stat -- file-info )
-
-HOOK: stat>type os ( stat -- file-info )
-
-M: unix file-info ( path -- info )
-    normalize-path file-status stat>file-info ;
-
-M: unix link-info ( path -- info )
-    normalize-path link-status stat>file-info ;
-
-M: unix make-link ( path1 path2 -- )
-    normalize-path symlink io-error ;
-
-M: unix read-link ( path -- path' )
-   normalize-path read-symbolic-link ;
-
-M: unix new-file-info ( -- class ) unix-file-info new ;
-
-M: unix stat>file-info ( stat -- file-info )
-    [ new-file-info ] dip
-    {
-        [ stat>type >>type ]
-        [ stat-st_size >>size ]
-        [ stat-st_mode >>permissions ]
-        [ stat-st_ctimespec timespec>unix-time >>created ]
-        [ stat-st_mtimespec timespec>unix-time >>modified ]
-        [ stat-st_atimespec timespec>unix-time >>accessed ]
-        [ stat-st_uid >>uid ]
-        [ stat-st_gid >>gid ]
-        [ stat-st_dev >>dev ]
-        [ stat-st_ino >>ino ]
-        [ stat-st_nlink >>nlink ]
-        [ stat-st_rdev >>rdev ]
-        [ stat-st_blocks >>blocks ]
-        [ stat-st_blksize >>blocksize ]
-    } cleave ;
-
-: n>file-type ( n -- type )
-    S_IFMT bitand {
-        { S_IFREG [ +regular-file+ ] }
-        { S_IFDIR [ +directory+ ] }
-        { S_IFCHR [ +character-device+ ] }
-        { S_IFBLK [ +block-device+ ] }
-        { S_IFIFO [ +fifo+ ] }
-        { S_IFLNK [ +symbolic-link+ ] }
-        { S_IFSOCK [ +socket+ ] }
-        [ drop +unknown+ ]
-    } case ;
-
-M: unix stat>type ( stat -- type )
-    stat-st_mode n>file-type ;
-
-! Linux has no extra fields in its stat struct
-os {
-    { macosx  [ "io.unix.files.bsd" require ] }
-    { netbsd  [ "io.unix.files.bsd" require ] }
-    { openbsd  [ "io.unix.files.bsd" require ] }
-    { freebsd  [ "io.unix.files.bsd" require ] }
-    { linux [ ] }
-} case
-
-: with-unix-directory ( path quot -- )
-    [ opendir dup [ (io-error) ] unless ] dip
-    dupd curry swap '[ _ closedir io-error ] [ ] cleanup ; inline
-
-: find-next-file ( DIR* -- byte-array )
-    "dirent" <c-object>
-    f <void*>
-    [ readdir_r 0 = [ (io-error) ] unless ] 2keep
-    *void* [ drop f ] unless ;
-
-M: unix >directory-entry ( byte-array -- directory-entry )
-    [ dirent-d_name utf8 alien>string ]
-    [ dirent-d_type dirent-type>file-type ] bi directory-entry boa ;
-
-M: unix (directory-entries) ( path -- seq )
-    [
-        '[ _ find-next-file dup ]
-        [ >directory-entry ]
-        [ drop ] produce
-    ] with-unix-directory ;
-
-<PRIVATE
-
-: stat-mode ( path -- mode )
-    normalize-path file-status stat-st_mode ;
-
-: chmod-set-bit ( path mask ? -- )
-    [ dup stat-mode ] 2dip
-    [ bitor ] [ unmask ] if chmod io-error ;
-
-GENERIC# file-mode? 1 ( obj mask -- ? )
-
-M: integer file-mode? mask? ;
-M: string file-mode? [ stat-mode ] dip mask? ;
-M: file-info file-mode? [ permissions>> ] dip mask? ;
-
-PRIVATE>
-
-: ch>file-type ( ch -- type )
-    {
-        { CHAR: b [ +block-device+ ] }
-        { CHAR: c [ +character-device+ ] }
-        { CHAR: d [ +directory+ ] }
-        { CHAR: l [ +symbolic-link+ ] }
-        { CHAR: s [ +socket+ ] }
-        { CHAR: p [ +fifo+ ] }
-        { CHAR: - [ +regular-file+ ] }
-        [ drop +unknown+ ]
-    } case ;
-
-: file-type>ch ( type -- string )
-    {
-        { +block-device+ [ CHAR: b ] }
-        { +character-device+ [ CHAR: c ] }
-        { +directory+ [ CHAR: d ] }
-        { +symbolic-link+ [ CHAR: l ] }
-        { +socket+ [ CHAR: s ] }
-        { +fifo+ [ CHAR: p ] }
-        { +regular-file+ [ CHAR: - ] }
-        [ drop CHAR: - ]
-    } case ;
-
-: UID           OCT: 0004000 ; inline
-: GID           OCT: 0002000 ; inline
-: STICKY        OCT: 0001000 ; inline
-: USER-ALL      OCT: 0000700 ; inline
-: USER-READ     OCT: 0000400 ; inline
-: USER-WRITE    OCT: 0000200 ; inline
-: USER-EXECUTE  OCT: 0000100 ; inline
-: GROUP-ALL     OCT: 0000070 ; inline
-: GROUP-READ    OCT: 0000040 ; inline
-: GROUP-WRITE   OCT: 0000020 ; inline
-: GROUP-EXECUTE OCT: 0000010 ; inline
-: OTHER-ALL     OCT: 0000007 ; inline
-: OTHER-READ    OCT: 0000004 ; inline
-: OTHER-WRITE   OCT: 0000002 ; inline
-: OTHER-EXECUTE OCT: 0000001 ; inline
-
-: uid? ( obj -- ? ) UID file-mode? ;
-: gid? ( obj -- ? ) GID file-mode? ;
-: sticky? ( obj -- ? ) STICKY file-mode? ;
-: user-read? ( obj -- ? ) USER-READ file-mode? ;
-: user-write? ( obj -- ? ) USER-WRITE file-mode? ;
-: user-execute? ( obj -- ? ) USER-EXECUTE file-mode? ;
-: group-read? ( obj -- ? ) GROUP-READ file-mode? ;
-: group-write? ( obj -- ? ) GROUP-WRITE file-mode? ;
-: group-execute? ( obj -- ? ) GROUP-EXECUTE file-mode? ;
-: other-read? ( obj -- ? ) OTHER-READ file-mode? ;
-: other-write? ( obj -- ? ) OTHER-WRITE file-mode? ;
-: other-execute? ( obj -- ? ) OTHER-EXECUTE file-mode? ;
-
-: any-read? ( obj -- ? )
-    { [ user-read? ] [ group-read? ] [ other-read? ] } 1|| ;
-
-: any-write? ( obj -- ? )
-    { [ user-write? ] [ group-write? ] [ other-write? ] } 1|| ;
-
-: any-execute? ( obj -- ? )
-    { [ user-execute? ] [ group-execute? ] [ other-execute? ] } 1|| ;
-
-: set-uid ( path ? -- ) UID swap chmod-set-bit ;
-: set-gid ( path ? -- ) GID swap chmod-set-bit ;
-: set-sticky ( path ? -- ) STICKY swap chmod-set-bit ;
-: set-user-read ( path ? -- ) USER-READ swap chmod-set-bit ;
-: set-user-write ( path ? -- ) USER-WRITE swap chmod-set-bit ;
-: set-user-execute ( path ? -- ) USER-EXECUTE swap chmod-set-bit ;
-: set-group-read ( path ? -- ) GROUP-READ swap chmod-set-bit ;
-: set-group-write ( path ? -- ) GROUP-WRITE swap chmod-set-bit ;
-: set-group-execute ( path ? -- ) GROUP-EXECUTE swap chmod-set-bit ;
-: set-other-read ( path ? -- ) OTHER-READ swap chmod-set-bit ;
-: set-other-write ( path ? -- ) OTHER-WRITE swap chmod-set-bit ;
-: set-other-execute ( path ? -- ) OTHER-EXECUTE swap chmod-set-bit ;
-
-: set-file-permissions ( path n -- )
-    [ normalize-path ] dip chmod io-error ;
-
-: file-permissions ( path -- n )
-    normalize-path file-info permissions>> ;
-
-<PRIVATE
-
-: make-timeval-array ( array -- byte-array )
-    [ [ "timeval" <c-object> ] unless* ] map concat ;
-
-: timestamp>timeval ( timestamp -- timeval )
-    unix-1970 time- duration>microseconds make-timeval ;
-
-: timestamps>byte-array ( timestamps -- byte-array )
-    [ dup [ timestamp>timeval ] when ] map make-timeval-array ;
-
-PRIVATE>
-
-: set-file-times ( path timestamps -- )
-    #! set access, write
-    [ normalize-path ] dip
-    timestamps>byte-array utimes io-error ;
-
-: set-file-access-time ( path timestamp -- )
-    f 2array set-file-times ;
-
-: set-file-modified-time ( path timestamp -- )
-    f swap 2array set-file-times ;
-
-: set-file-ids ( path uid gid -- )
-    [ normalize-path ] 2dip
-    [ [ -1 ] unless* ] bi@ chown io-error ;
-
-GENERIC: set-file-user ( path string/id -- )
-
-GENERIC: set-file-group ( path string/id -- )
-
-M: integer set-file-user ( path uid -- )
-    f set-file-ids ;
-
-M: string set-file-user ( path string -- )
-    user-id f set-file-ids ;
-
-M: integer set-file-group ( path gid -- )
-    f swap set-file-ids ;
-
-M: string set-file-group ( path string -- )
-    group-id
-    f swap set-file-ids ;
-
-: file-user-id ( path -- uid )
-    normalize-path file-info uid>> ;
-
-: file-username ( path -- string )
-    file-user-id username ;
-
-: file-group-id ( path -- gid )
-    normalize-path file-info gid>> ;
-
-: file-group-name ( path -- string )
-    file-group-id group-name ;
-
-M: unix home "HOME" os-env ;
diff --git a/basis/io/unix/files/freebsd/freebsd.factor b/basis/io/unix/files/freebsd/freebsd.factor
deleted file mode 100644 (file)
index eaf217a..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types alien.syntax combinators
-io.backend io.files io.unix.files kernel math system unix
-unix.statfs.freebsd unix.statvfs.freebsd unix.getfsstat.freebsd
-sequences grouping alien.strings io.encodings.utf8
-specialized-arrays.direct.uint arrays ;
-IN: io.unix.files.freebsd
-
-TUPLE: freebsd-file-system-info < unix-file-system-info
-version io-size owner syncreads syncwrites asyncreads asyncwrites ;
-
-M: freebsd new-file-system-info freebsd-file-system-info new ;
-
-M: freebsd file-system-statfs ( path -- byte-array )
-    "statfs" <c-object> tuck statfs io-error ;
-
-M: freebsd statfs>file-system-info ( file-system-info statvfs -- file-system-info )
-    {
-        [ statfs-f_version >>version ]
-        [ statfs-f_type >>type ]
-        [ statfs-f_flags >>flags ]
-        [ statfs-f_bsize >>block-size ]
-        [ statfs-f_iosize >>io-size ]
-        [ statfs-f_blocks >>blocks ]
-        [ statfs-f_bfree >>blocks-free ]
-        [ statfs-f_bavail >>blocks-available ]
-        [ statfs-f_files >>files ]
-        [ statfs-f_ffree >>files-free ]
-        [ statfs-f_syncwrites >>syncwrites ]
-        [ statfs-f_asyncwrites >>asyncwrites ]
-        [ statfs-f_syncreads >>syncreads ]
-        [ statfs-f_asyncreads >>asyncreads ]
-        [ statfs-f_namemax >>name-max ]
-        [ statfs-f_owner >>owner ]
-        [ statfs-f_fsid 2 <direct-uint-array> >array >>id ]
-        [ statfs-f_fstypename utf8 alien>string >>type ]
-        [ statfs-f_mntfromname utf8 alien>string >>device-name ]
-        [ statfs-f_mntonname utf8 alien>string >>mount-point ]
-    } cleave ;
-
-M: freebsd file-system-statvfs ( path -- byte-array )
-    "statvfs" <c-object> tuck statvfs io-error ;
-
-M: freebsd statvfs>file-system-info ( file-system-info statvfs -- file-system-info )
-    {
-        [ statvfs-f_favail >>files-available ]
-        [ statvfs-f_frsize >>preferred-block-size ]
-    } cleave ;
-
-M: freebsd file-systems ( -- array )
-    f 0 0 getfsstat dup io-error
-    "statfs" <c-array> dup dup length 0 getfsstat io-error
-    "statfs" heap-size group
-    [ statfs-f_mntonname alien>native-string file-system-info ] map ;
diff --git a/basis/io/unix/files/freebsd/tags.txt b/basis/io/unix/files/freebsd/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/linux/linux.factor b/basis/io/unix/files/linux/linux.factor
deleted file mode 100644 (file)
index c30855c..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types alien.syntax combinators csv
-io.backend io.encodings.utf8 io.files io.streams.string
-io.unix.files kernel math.order namespaces sequences sorting
-system unix unix.statfs.linux unix.statvfs.linux
-specialized-arrays.direct.uint arrays ;
-IN: io.unix.files.linux
-
-TUPLE: linux-file-system-info < unix-file-system-info
-namelen ;
-
-M: linux new-file-system-info linux-file-system-info new ;
-
-M: linux file-system-statfs ( path -- byte-array )
-    "statfs64" <c-object> tuck statfs64 io-error ;
-
-M: linux statfs>file-system-info ( struct -- statfs )
-    {
-        [ statfs64-f_type >>type ]
-        [ statfs64-f_bsize >>block-size ]
-        [ statfs64-f_blocks >>blocks ]
-        [ statfs64-f_bfree >>blocks-free ]
-        [ statfs64-f_bavail >>blocks-available ]
-        [ statfs64-f_files >>files ]
-        [ statfs64-f_ffree >>files-free ]
-        [ statfs64-f_fsid 2 <direct-uint-array> >array >>id ]
-        [ statfs64-f_namelen >>namelen ]
-        [ statfs64-f_frsize >>preferred-block-size ]
-        ! [ statfs64-f_spare >>spare ]
-    } cleave ;
-
-M: linux file-system-statvfs ( path -- byte-array )
-    "statvfs64" <c-object> tuck statvfs64 io-error ;
-
-M: linux statvfs>file-system-info ( struct -- statfs )
-    {
-        [ statvfs64-f_flag >>flags ]
-        [ statvfs64-f_namemax >>name-max ]
-    } cleave ;
-
-TUPLE: mtab-entry file-system-name mount-point type options
-frequency pass-number ;
-
-: mtab-csv>mtab-entry ( csv -- mtab-entry )
-    [ mtab-entry new ] dip
-    {
-        [ first >>file-system-name ]
-        [ second >>mount-point ]
-        [ third >>type ]
-        [ fourth <string-reader> csv first >>options ]
-        [ 4 swap nth >>frequency ]
-        [ 5 swap nth >>pass-number ]
-    } cleave ;
-
-: parse-mtab ( -- array )
-    [
-        "/etc/mtab" utf8 <file-reader>
-        CHAR: \s delimiter set csv
-    ] with-scope
-    [ mtab-csv>mtab-entry ] map ;
-
-M: linux file-systems
-    parse-mtab [
-        [ mount-point>> file-system-info ] keep
-        {
-            [ file-system-name>> >>device-name ]
-            [ mount-point>> >>mount-point ]
-            [ type>> >>type ]
-        } cleave
-    ] map ;
-
-ERROR: file-system-not-found ;
-
-M: linux file-system-info ( path -- )
-    normalize-path
-    [
-        [ new-file-system-info ] dip
-        [ file-system-statfs statfs>file-system-info ]
-        [ file-system-statvfs statvfs>file-system-info ] bi
-        file-system-calculations
-    ] keep
-    
-    parse-mtab [ [ mount-point>> ] bi@ <=> invert-comparison ] sort
-    [ mount-point>> head? ] with find nip [ file-system-not-found ] unless*
-    {
-        [ file-system-name>> >>device-name drop ]
-        [ mount-point>> >>mount-point drop ]
-        [ type>> >>type ]
-    } 2cleave ;
diff --git a/basis/io/unix/files/linux/tags.txt b/basis/io/unix/files/linux/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/macosx/macosx.factor b/basis/io/unix/files/macosx/macosx.factor
deleted file mode 100644 (file)
index 397145c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types alien.strings combinators
-grouping io.encodings.utf8 io.files kernel math sequences
-system unix io.unix.files specialized-arrays.direct.uint arrays
-unix.statfs.macosx unix.statvfs.macosx unix.getfsstat.macosx ;
-IN: io.unix.files.macosx
-
-TUPLE: macosx-file-system-info < unix-file-system-info
-io-size owner type-id filesystem-subtype ;
-
-M: macosx file-systems ( -- array )
-    f <void*> dup 0 getmntinfo64 dup io-error
-    [ *void* ] dip
-    "statfs64" heap-size [ * memory>byte-array ] keep group
-    [ statfs64-f_mntonname utf8 alien>string file-system-info ] map ;
-    ! [ [ new-file-system-info ] dip statfs>file-system-info ] map ;
-
-M: macosx new-file-system-info macosx-file-system-info new ;
-
-M: macosx file-system-statfs ( normalized-path -- statfs )
-    "statfs64" <c-object> tuck statfs64 io-error ;
-
-M: macosx file-system-statvfs ( normalized-path -- statvfs )
-    "statvfs" <c-object> tuck statvfs io-error ;
-
-M: macosx statfs>file-system-info ( file-system-info byte-array -- file-system-info' )
-    {
-        [ statfs64-f_bsize >>block-size ]
-        [ statfs64-f_iosize >>io-size ]
-        [ statfs64-f_blocks >>blocks ]
-        [ statfs64-f_bfree >>blocks-free ]
-        [ statfs64-f_bavail >>blocks-available ]
-        [ statfs64-f_files >>files ]
-        [ statfs64-f_ffree >>files-free ]
-        [ statfs64-f_fsid 2 <direct-uint-array> >array >>id ]
-        [ statfs64-f_owner >>owner ]
-        [ statfs64-f_type >>type-id ]
-        [ statfs64-f_flags >>flags ]
-        [ statfs64-f_fssubtype >>filesystem-subtype ]
-        [ statfs64-f_fstypename utf8 alien>string >>type ]
-        [ statfs64-f_mntonname utf8 alien>string >>mount-point ]
-        [ statfs64-f_mntfromname utf8 alien>string >>device-name ]
-    } cleave ;
-
-M: macosx statvfs>file-system-info ( file-system-info byte-array -- file-system-info' )
-    {
-        [ statvfs-f_frsize >>preferred-block-size ]
-        [ statvfs-f_favail >>files-available ]
-        [ statvfs-f_namemax >>name-max ]
-    } cleave ;
diff --git a/basis/io/unix/files/macosx/tags.txt b/basis/io/unix/files/macosx/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/netbsd/netbsd.factor b/basis/io/unix/files/netbsd/netbsd.factor
deleted file mode 100644 (file)
index 82ac3dc..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien.syntax kernel unix.stat math unix
-combinators system io.backend accessors alien.c-types
-io.encodings.utf8 alien.strings unix.types io.unix.files
-io.files unix.statvfs.netbsd unix.getfsstat.netbsd arrays
-grouping sequences io.encodings.utf8 specialized-arrays.direct.uint ;
-IN: io.unix.files.netbsd
-
-TUPLE: netbsd-file-system-info < unix-file-system-info
-blocks-reserved files-reserved
-owner io-size sync-reads sync-writes async-reads async-writes
-idx mount-from ;
-
-M: netbsd new-file-system-info netbsd-file-system-info new ;
-
-M: netbsd file-system-statvfs
-    "statvfs" <c-object> tuck statvfs io-error ;
-
-M: netbsd statvfs>file-system-info ( file-system-info statvfs -- file-system-info' )
-    {
-        [ statvfs-f_flag >>flags ]
-        [ statvfs-f_bsize >>block-size ]
-        [ statvfs-f_frsize >>preferred-block-size ]
-        [ statvfs-f_iosize >>io-size ]
-        [ statvfs-f_blocks >>blocks ]
-        [ statvfs-f_bfree >>blocks-free ]
-        [ statvfs-f_bavail >>blocks-available ]
-        [ statvfs-f_bresvd >>blocks-reserved ]
-        [ statvfs-f_files >>files ]
-        [ statvfs-f_ffree >>files-free ]
-        [ statvfs-f_favail >>files-available ]
-        [ statvfs-f_fresvd >>files-reserved ]
-        [ statvfs-f_syncreads >>sync-reads ]
-        [ statvfs-f_syncwrites >>sync-writes ]
-        [ statvfs-f_asyncreads >>async-reads ]
-        [ statvfs-f_asyncwrites >>async-writes ]
-        [ statvfs-f_fsidx 2 <direct-uint-array> >array >>idx ]
-        [ statvfs-f_fsid >>id ]
-        [ statvfs-f_namemax >>name-max ]
-        [ statvfs-f_owner >>owner ]
-        ! [ statvfs-f_spare >>spare ]
-        [ statvfs-f_fstypename utf8 alien>string >>type ]
-        [ statvfs-f_mntonname utf8 alien>string >>mount-point ]
-        [ statvfs-f_mntfromname utf8 alien>string >>device-name ]
-    } cleave ;
-
-M: netbsd file-systems ( -- array )
-    f 0 0 getvfsstat dup io-error
-    "statvfs" <c-array> dup dup length 0 getvfsstat io-error
-    "statvfs" heap-size group
-    [ statvfs-f_mntonname utf8 alien>string file-system-info ] map ;
diff --git a/basis/io/unix/files/netbsd/tags.txt b/basis/io/unix/files/netbsd/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/openbsd/openbsd.factor b/basis/io/unix/files/openbsd/openbsd.factor
deleted file mode 100644 (file)
index e5e18b2..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types alien.strings alien.syntax
-combinators io.backend io.files io.unix.files kernel math
-sequences system unix unix.getfsstat.openbsd grouping
-unix.statfs.openbsd unix.statvfs.openbsd unix.types
-specialized-arrays.direct.uint arrays ;
-IN: io.unix.files.openbsd
-
-TUPLE: freebsd-file-system-info < unix-file-system-info
-io-size sync-writes sync-reads async-writes async-reads 
-owner ;
-
-M: openbsd new-file-system-info freebsd-file-system-info new ;
-
-M: openbsd file-system-statfs
-    "statfs" <c-object> tuck statfs io-error ;
-
-M: openbsd statfs>file-system-info ( file-system-info statfs -- file-system-info' )
-    {
-        [ statfs-f_flags >>flags ]
-        [ statfs-f_bsize >>block-size ]
-        [ statfs-f_iosize >>io-size ]
-        [ statfs-f_blocks >>blocks ]
-        [ statfs-f_bfree >>blocks-free ]
-        [ statfs-f_bavail >>blocks-available ]
-        [ statfs-f_files >>files ]
-        [ statfs-f_ffree >>files-free ]
-        [ statfs-f_favail >>files-available ]
-        [ statfs-f_syncwrites >>sync-writes ]
-        [ statfs-f_syncreads >>sync-reads ]
-        [ statfs-f_asyncwrites >>async-writes ]
-        [ statfs-f_asyncreads >>async-reads ]
-        [ statfs-f_fsid 2 <direct-uint-array> >array >>id ]
-        [ statfs-f_namemax >>name-max ]
-        [ statfs-f_owner >>owner ]
-        ! [ statfs-f_spare >>spare ]
-        [ statfs-f_fstypename alien>native-string >>type ]
-        [ statfs-f_mntonname alien>native-string >>mount-point ]
-        [ statfs-f_mntfromname alien>native-string >>device-name ]
-    } cleave ;
-
-M: openbsd file-system-statvfs ( normalized-path -- statvfs )
-    "statvfs" <c-object> tuck statvfs io-error ;
-
-M: openbsd statvfs>file-system-info ( file-system-info statvfs -- file-system-info' )
-    {
-        [ statvfs-f_frsize >>preferred-block-size ]
-    } cleave ;
-
-M: openbsd file-systems ( -- seq )
-    f 0 0 getfsstat dup io-error
-    "statfs" <c-array> dup dup length 0 getfsstat io-error 
-    "statfs" heap-size group 
-    [ statfs-f_mntonname alien>native-string file-system-info ] map ;
diff --git a/basis/io/unix/files/openbsd/tags.txt b/basis/io/unix/files/openbsd/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/summary.txt b/basis/io/unix/files/summary.txt
deleted file mode 100644 (file)
index 57527be..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Implementation of reading and writing files on Unix-like systems
diff --git a/basis/io/unix/files/tags.txt b/basis/io/unix/files/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/unique/tags.txt b/basis/io/unix/files/unique/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/files/unique/unique.factor b/basis/io/unix/files/unique/unique.factor
deleted file mode 100644 (file)
index 24dcdcb..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel io.ports io.unix.backend math.bitwise
-unix system io.files.unique ;
-IN: io.unix.files.unique
-
-: open-unique-flags ( -- flags )
-    { O_RDWR O_CREAT O_EXCL } flags ;
-
-M: unix touch-unique-file ( path -- )
-    open-unique-flags file-mode open-file close-file ;
-
-M: unix temporary-path ( -- path ) "/tmp" ;
diff --git a/basis/io/unix/freebsd/freebsd.factor b/basis/io/unix/freebsd/freebsd.factor
deleted file mode 100644 (file)
index 49fbc9a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-USING: io.unix.bsd io.backend system ;
-
-freebsd set-io-backend
diff --git a/basis/io/unix/freebsd/tags.txt b/basis/io/unix/freebsd/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/kqueue/authors.txt b/basis/io/unix/kqueue/authors.txt
deleted file mode 100755 (executable)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/kqueue/kqueue.factor b/basis/io/unix/kqueue/kqueue.factor
deleted file mode 100644 (file)
index be99d17..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types combinators io.unix.backend
-kernel math.bitwise sequences struct-arrays unix unix.kqueue
-unix.time assocs ;
-IN: io.unix.kqueue
-
-TUPLE: kqueue-mx < mx events ;
-
-: max-events ( -- n )
-    #! We read up to 256 events at a time. This is an arbitrary
-    #! constant...
-    256 ; inline
-
-: <kqueue-mx> ( -- mx )
-    kqueue-mx new-mx
-        kqueue dup io-error >>fd
-        max-events "kevent" <struct-array> >>events ;
-
-: make-kevent ( fd filter flags -- event )
-    "kevent" <c-object>
-    [ set-kevent-flags ] keep
-    [ set-kevent-filter ] keep
-    [ set-kevent-ident ] keep ;
-
-: register-kevent ( kevent mx -- )
-    fd>> swap 1 f 0 f kevent io-error ;
-
-M: kqueue-mx add-input-callback ( thread fd mx -- )
-    [ call-next-method ] [
-        [ EVFILT_READ { EV_ADD EV_ONESHOT } flags make-kevent ] dip
-        register-kevent
-    ] 2bi ;
-
-M: kqueue-mx add-output-callback ( thread fd mx -- )
-    [ call-next-method ] [
-        [ EVFILT_WRITE { EV_ADD EV_ONESHOT } flags make-kevent ] dip
-        register-kevent
-    ] 2bi ;
-
-M: kqueue-mx remove-input-callbacks ( fd mx -- seq )
-    2dup reads>> key? [
-        [ call-next-method ] [
-            [ EVFILT_READ EV_DELETE make-kevent ] dip
-            register-kevent
-        ] 2bi
-    ] [ 2drop f ] if ;
-
-M: kqueue-mx remove-output-callbacks ( fd mx -- seq )
-    2dup writes>> key? [
-        [
-            [ EVFILT_WRITE EV_DELETE make-kevent ] dip
-            register-kevent
-        ] [ call-next-method ] 2bi
-    ] [ 2drop f ] if ;
-
-: wait-kevent ( mx timespec -- n )
-    [
-        [ fd>> f 0 ]
-        [ events>> [ underlying>> ] [ length ] bi ] bi
-    ] dip kevent multiplexer-error ;
-
-: handle-kevent ( mx kevent -- )
-    [ kevent-ident swap ] [ kevent-filter ] bi {
-        { EVFILT_READ [ input-available ] }
-        { EVFILT_WRITE [ output-available ] }
-    } case ;
-
-: handle-kevents ( mx n -- )
-    [ dup events>> ] dip head-slice [ handle-kevent ] with each ;
-
-M: kqueue-mx wait-for-events ( us mx -- )
-    swap dup [ make-timespec ] when
-    dupd wait-kevent handle-kevents ;
diff --git a/basis/io/unix/kqueue/tags.txt b/basis/io/unix/kqueue/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/launcher/authors.txt b/basis/io/unix/launcher/authors.txt
deleted file mode 100755 (executable)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/launcher/launcher-tests.factor b/basis/io/unix/launcher/launcher-tests.factor
deleted file mode 100644 (file)
index 68ca821..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-IN: io.unix.launcher.tests
-USING: io.files tools.test io.launcher arrays io namespaces
-continuations math io.encodings.binary io.encodings.ascii
-accessors kernel sequences io.encodings.utf8 destructors
-io.streams.duplex locals concurrency.promises threads
-unix.process ;
-
-[ ] [
-    [ "launcher-test-1" temp-file delete-file ] ignore-errors
-] unit-test
-
-[ ] [
-    "touch"
-    "launcher-test-1" temp-file
-    2array
-    try-process
-] unit-test
-
-[ t ] [ "launcher-test-1" temp-file exists? ] unit-test
-
-[ ] [
-    [ "launcher-test-1" temp-file delete-file ] ignore-errors
-] unit-test
-
-[ ] [
-    <process>
-        "echo Hello" >>command
-        "launcher-test-1" temp-file >>stdout
-    try-process
-] unit-test
-
-[ "Hello\n" ] [
-    "cat"
-    "launcher-test-1" temp-file
-    2array
-    ascii <process-reader> contents
-] unit-test
-
-[ ] [
-    [ "launcher-test-1" temp-file delete-file ] ignore-errors
-] unit-test
-
-[ ] [
-    <process>
-        "cat" >>command
-        +closed+ >>stdin
-        "launcher-test-1" temp-file >>stdout
-    try-process
-] unit-test
-
-[ f ] [
-    "cat"
-    "launcher-test-1" temp-file
-    2array
-    ascii <process-reader> contents
-] unit-test
-
-[ ] [
-    2 [
-        "launcher-test-1" temp-file binary <file-appender> [
-            <process>
-                swap >>stdout
-                "echo Hello" >>command
-            try-process
-        ] with-disposal
-    ] times
-] unit-test
-
-[ "Hello\nHello\n" ] [
-    "cat"
-    "launcher-test-1" temp-file
-    2array
-    ascii <process-reader> contents
-] unit-test
-
-[ t ] [
-    <process>
-        "env" >>command
-        { { "A" "B" } } >>environment
-    ascii <process-reader> lines
-    "A=B" swap member?
-] unit-test
-
-[ { "A=B" } ] [
-    <process>
-        "env" >>command
-        { { "A" "B" } } >>environment
-        +replace-environment+ >>environment-mode
-    ascii <process-reader> lines
-] unit-test
-
-[ "hi\n" ] [
-    temp-directory [
-        [ "aloha" delete-file ] ignore-errors
-        <process>
-            { "echo" "hi" } >>command
-            "aloha" >>stdout
-        try-process
-    ] with-directory
-    temp-directory "aloha" append-path
-    utf8 file-contents
-] unit-test
-
-[ "append-test" temp-file delete-file ] ignore-errors
-
-[ "hi\nhi\n" ] [
-    2 [
-        <process>
-            "echo hi" >>command
-            "append-test" temp-file <appender> >>stdout
-        try-process
-    ] times
-    "append-test" temp-file utf8 file-contents
-] unit-test
-
-[ t ] [ "ls" utf8 <process-stream> contents >boolean ] unit-test
-
-[ "Hello world.\n" ] [
-    "cat" utf8 <process-stream> [
-        "Hello world.\n" write
-        output-stream get dispose
-        input-stream get contents
-    ] with-stream
-] unit-test
-
-! Killed processes were exiting with code 0 on FreeBSD
-[ f ] [
-    [let | p [ <promise> ]
-           s [ <promise> ] |
-       [
-           "sleep 1000" run-detached
-           [ p fulfill ] [ wait-for-process s fulfill ] bi
-       ] in-thread
-
-       p ?promise handle>> 9 kill drop
-       s ?promise 0 =
-    ]
-] unit-test
diff --git a/basis/io/unix/launcher/launcher.factor b/basis/io/unix/launcher/launcher.factor
deleted file mode 100644 (file)
index 729c154..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-! Copyright (C) 2007, 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel namespaces math system sequences
-continuations arrays assocs combinators alien.c-types strings
-threads accessors environment
-io io.backend io.launcher io.ports io.files
-io.files.private io.unix.files io.unix.backend
-io.unix.launcher.parser
-unix unix.process ;
-IN: io.unix.launcher
-
-! Search unix first
-USE: unix
-
-: get-arguments ( process -- seq )
-    command>> dup string? [ tokenize-command ] when ;
-
-: assoc>env ( assoc -- env )
-    [ "=" glue ] { } assoc>map ;
-
-: setup-priority ( process -- process )
-    dup priority>> [
-        H{
-            { +lowest-priority+ 20 }
-            { +low-priority+ 10 }
-            { +normal-priority+ 0 }
-            { +high-priority+ -10 }
-            { +highest-priority+ -20 }
-            { +realtime-priority+ -20 }
-        } at set-priority
-    ] when* ;
-
-: reset-fd ( fd -- )
-    [ F_SETFL 0 fcntl io-error ] [ F_SETFD 0 fcntl io-error ] bi ;
-
-: redirect-fd ( oldfd fd -- )
-    2dup = [ 2drop ] [ dup2 io-error ] if ;
-
-: redirect-file ( obj mode fd -- )
-    [ [ normalize-path ] dip file-mode open-file ] dip redirect-fd ;
-
-: redirect-file-append ( obj mode fd -- )
-    [ drop path>> normalize-path open-append ] dip redirect-fd ;
-
-: redirect-closed ( obj mode fd -- )
-    [ drop "/dev/null" ] 2dip redirect-file ;
-
-: redirect ( obj mode fd -- )
-    {
-        { [ pick not ] [ 3drop ] }
-        { [ pick string? ] [ redirect-file ] }
-        { [ pick appender? ] [ redirect-file-append ] }
-        { [ pick +closed+ eq? ] [ redirect-closed ] }
-        { [ pick fd? ] [ [ drop fd>> dup reset-fd ] dip redirect-fd ] }
-        [ [ underlying-handle ] 2dip redirect ]
-    } cond ;
-
-: ?closed ( obj -- obj' )
-    dup +closed+ eq? [ drop "/dev/null" ] when ;
-
-: setup-redirection ( process -- process )
-    dup stdin>> ?closed read-flags 0 redirect
-    dup stdout>> ?closed write-flags 1 redirect
-    dup stderr>> dup +stdout+ eq? [
-        drop 1 2 dup2 io-error
-    ] [
-        ?closed write-flags 2 redirect
-    ] if ;
-
-: setup-environment ( process -- process )
-    dup pass-environment? [
-        dup get-environment set-os-envs
-    ] when ;
-
-: spawn-process ( process -- * )
-    [ setup-priority ] [ 250 _exit ] recover
-    [ setup-redirection ] [ 251 _exit ] recover
-    [ current-directory get (normalize-path) cd ] [ 252 _exit ] recover
-    [ setup-environment ] [ 253 _exit ] recover
-    [ get-arguments exec-args-with-path ] [ 254 _exit ] recover
-    255 _exit ;
-
-M: unix current-process-handle ( -- handle ) getpid ;
-
-M: unix run-process* ( process -- pid )
-    [ spawn-process ] curry [ ] with-fork ;
-
-M: unix kill-process* ( pid -- )
-    SIGTERM kill io-error ;
-
-: find-process ( handle -- process )
-    processes get swap [ nip swap handle>> = ] curry
-    assoc-find 2drop ;
-
-TUPLE: signal n ;
-
-: code>status ( code -- obj )
-    dup WIFEXITED [ WEXITSTATUS ] [ WTERMSIG signal boa ] if ;
-
-M: unix wait-for-processes ( -- ? )
-    -1 0 <int> tuck WNOHANG waitpid
-    dup 0 <= [
-        2drop t
-    ] [
-        find-process dup
-        [ swap *int code>status notify-exit f ] [ 2drop f ] if
-    ] if ;
diff --git a/basis/io/unix/launcher/parser/parser-tests.factor b/basis/io/unix/launcher/parser/parser-tests.factor
deleted file mode 100644 (file)
index 63aadca..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-IN: io.unix.launcher.parser.tests
-USING: io.unix.launcher.parser tools.test ;
-
-[ "" tokenize-command ] must-fail
-[ "   " tokenize-command ] must-fail
-[ V{ "a" } ] [ "a" tokenize-command ] unit-test
-[ V{ "abc" } ] [ "abc" tokenize-command ] unit-test
-[ V{ "abc" } ] [ "abc   " tokenize-command ] unit-test
-[ V{ "abc" } ] [ "   abc" tokenize-command ] unit-test
-[ V{ "abc" "def" } ] [ "abc def" tokenize-command ] unit-test
-[ V{ "abc def" } ] [ "abc\\ def" tokenize-command ] unit-test
-[ V{ "abc\\" "def" } ] [ "abc\\\\ def" tokenize-command ] unit-test
-[ V{ "abc\\ def" } ] [ "'abc\\\\ def'" tokenize-command ] unit-test
-[ V{ "abc\\ def" } ] [ "  'abc\\\\ def'" tokenize-command ] unit-test
-[ V{ "abc\\ def" "hey" } ] [ "'abc\\\\ def' hey" tokenize-command ] unit-test
-[ V{ "abc def" "hey" } ] [ "'abc def' \"hey\"" tokenize-command ] unit-test
-[ "'abc def' \"hey" tokenize-command ] must-fail
-[ "'abc def" tokenize-command ] must-fail
-[ V{ "abc def" "h\"ey" } ] [ "'abc def' \"h\\\"ey\"  " tokenize-command ] unit-test
-
-[
-    V{
-        "Hello world.app/Contents/MacOS/hello-ui"
-        "-i=boot.macosx-ppc.image"
-        "-include= math compiler ui"
-        "-deploy-vocab=hello-ui"
-        "-output-image=Hello world.app/Contents/Resources/hello-ui.image"
-        "-no-stack-traces"
-        "-no-user-init"
-    }
-] [
-    "\"Hello world.app/Contents/MacOS/hello-ui\" -i=boot.macosx-ppc.image \"-include= math compiler ui\" -deploy-vocab=hello-ui \"-output-image=Hello world.app/Contents/Resources/hello-ui.image\" -no-stack-traces -no-user-init" tokenize-command
-] unit-test
diff --git a/basis/io/unix/launcher/parser/parser.factor b/basis/io/unix/launcher/parser/parser.factor
deleted file mode 100644 (file)
index 276ed45..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-! Copyright (C) 2008 Slava Pestov
-! See http://factorcode.org/license.txt for BSD license.
-USING: peg peg.parsers kernel sequences strings words ;
-IN: io.unix.launcher.parser
-
-! Our command line parser. Supported syntax:
-! foo bar baz -- simple tokens
-! foo\ bar -- escaping the space
-! 'foo bar' -- quotation
-! "foo bar" -- quotation
-: 'escaped-char' ( -- parser )
-    "\\" token any-char 2seq [ second ] action ;
-
-: 'quoted-char' ( delimiter -- parser' )
-    'escaped-char'
-    swap [ member? not ] curry satisfy
-    2choice ; inline
-
-: 'quoted' ( delimiter -- parser )
-    dup 'quoted-char' repeat0 swap dup surrounded-by ;
-
-: 'unquoted' ( -- parser ) " '\"" 'quoted-char' repeat1 ;
-
-: 'argument' ( -- parser )
-    "\"" 'quoted'
-    "'" 'quoted'
-    'unquoted' 3choice
-    [ >string ] action ;
-
-PEG: tokenize-command ( command -- ast/f )
-    'argument' " " token repeat1 list-of
-    " " token repeat0 tuck pack
-    just ;
diff --git a/basis/io/unix/launcher/parser/tags.txt b/basis/io/unix/launcher/parser/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/launcher/tags.txt b/basis/io/unix/launcher/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/linux/authors.txt b/basis/io/unix/linux/authors.txt
deleted file mode 100755 (executable)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/linux/linux.factor b/basis/io/unix/linux/linux.factor
deleted file mode 100644 (file)
index be5b83f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel io.backend io.monitors io.unix.backend
-io.unix.epoll io.unix.linux.monitors system namespaces ;
-IN: io.unix.linux
-
-M: linux init-io ( -- )
-    <epoll-mx> mx set-global ;
-
-linux set-io-backend
diff --git a/basis/io/unix/linux/monitors/monitors-tests.factor b/basis/io/unix/linux/monitors/monitors-tests.factor
deleted file mode 100644 (file)
index 42c5009..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-IN: io.unix.linux.monitors.tests
-USING: io.monitors tools.test io.files system sequences
-continuations namespaces concurrency.count-downs kernel io
-threads calendar prettyprint destructors io.timeouts ;
-
-! On Linux, a notification on the directory itself would report an invalid
-! path name
-[
-    [ ] [ "monitor-test-self" temp-file make-directories ] unit-test
-    
-    ! Non-recursive
-    [ ] [ "monitor-test-self" temp-file f <monitor> "m" set ] unit-test
-    [ ] [ 3 seconds "m" get set-timeout ] unit-test
-
-    [ ] [ "monitor-test-self" temp-file touch-file ] unit-test
-
-    [ t ] [
-        "m" get next-change drop
-        [ "" = ] [ "monitor-test-self" temp-file = ] bi or
-    ] unit-test
-
-    [ ] [ "m" get dispose ] unit-test
-    
-    ! Recursive
-    [ ] [ "monitor-test-self" temp-file t <monitor> "m" set ] unit-test
-    [ ] [ 3 seconds "m" get set-timeout ] unit-test
-
-    [ ] [ "monitor-test-self" temp-file touch-file ] unit-test
-
-    [ t ] [
-        "m" get next-change drop
-        [ "" = ] [ "monitor-test-self" temp-file = ] bi or
-    ] unit-test
-
-    [ ] [ "m" get dispose ] unit-test
-] with-monitors
diff --git a/basis/io/unix/linux/monitors/monitors.factor b/basis/io/unix/linux/monitors/monitors.factor
deleted file mode 100644 (file)
index f27d48c..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel io.backend io.monitors io.monitors.recursive
-io.files io.buffers io.monitors io.ports io.timeouts
-io.unix.backend io.unix.select io.encodings.utf8
-unix.linux.inotify assocs namespaces make threads continuations
-init math math.bitwise sets alien alien.strings alien.c-types
-vocabs.loader accessors system hashtables destructors unix ;
-IN: io.unix.linux.monitors
-
-SYMBOL: watches
-
-SYMBOL: inotify
-
-TUPLE: linux-monitor < monitor wd inotify watches disposed ;
-
-: <linux-monitor> ( wd path mailbox -- monitor )
-    linux-monitor new-monitor
-        inotify get >>inotify
-        watches get >>watches
-        swap >>wd ;
-
-: wd>monitor ( wd -- monitor ) watches get at ;
-
-: <inotify> ( -- port/f )
-    inotify_init dup 0 < [ drop f ] [ <fd> init-fd <input-port> ] if ;
-
-: inotify-fd ( -- fd ) inotify get handle>> handle-fd ;
-
-: check-existing ( wd -- )
-    watches get key? [
-        "Cannot open multiple monitors for the same file" throw
-    ] when ;
-
-: (add-watch) ( path mask -- wd )
-    inotify-fd -rot inotify_add_watch dup io-error dup check-existing ;
-
-: add-watch ( path mask mailbox -- monitor )
-    [ [ (normalize-path) ] dip [ (add-watch) ] [ drop ] 2bi ] dip
-    <linux-monitor> [ ] [ ] [ wd>> ] tri watches get set-at ;
-
-: check-inotify ( -- )
-    inotify get [
-        "Calling <monitor> outside with-monitors" throw
-    ] unless ;
-
-M: linux (monitor) ( path recursive? mailbox -- monitor )
-    swap [
-        <recursive-monitor>
-    ] [
-        check-inotify
-        IN_CHANGE_EVENTS swap add-watch
-    ] if ;
-
-M: linux-monitor dispose* ( monitor -- )
-    [ [ wd>> ] [ watches>> ] bi delete-at ]
-    [
-        dup inotify>> disposed>> [ drop ] [
-            [ inotify>> handle>> handle-fd ] [ wd>> ] bi
-            inotify_rm_watch io-error
-        ] if
-    ] bi ;
-
-: ignore-flags? ( mask -- ? )
-    {
-        IN_DELETE_SELF
-        IN_MOVE_SELF
-        IN_UNMOUNT
-        IN_Q_OVERFLOW
-        IN_IGNORED
-    } flags bitand 0 > ;
-
-: parse-action ( mask -- changed )
-    [
-        IN_CREATE +add-file+ ?flag
-        IN_DELETE +remove-file+ ?flag
-        IN_MODIFY +modify-file+ ?flag
-        IN_ATTRIB +modify-file+ ?flag
-        IN_MOVED_FROM +rename-file-old+ ?flag
-        IN_MOVED_TO +rename-file-new+ ?flag
-        drop
-    ] { } make prune ;
-
-: parse-event-name ( event -- name )
-    dup inotify-event-len zero?
-    [ drop "" ] [ inotify-event-name utf8 alien>string ] if ;
-
-: parse-file-notify ( buffer -- path changed )
-    dup inotify-event-mask ignore-flags? [
-        drop f f
-    ] [
-        [ parse-event-name ] [ inotify-event-mask parse-action ] bi
-    ] if ;
-
-: events-exhausted? ( i buffer -- ? )
-    fill>> >= ;
-
-: inotify-event@ ( i buffer -- alien )
-    ptr>> <displaced-alien> ;
-
-: next-event ( i buffer -- i buffer )
-    2dup inotify-event@
-    inotify-event-len "inotify-event" heap-size +
-    swap [ + ] dip ;
-
-: parse-file-notifications ( i buffer -- )
-    2dup events-exhausted? [ 2drop ] [
-        2dup inotify-event@ dup inotify-event-wd wd>monitor
-        [ parse-file-notify ] dip queue-change
-        next-event parse-file-notifications
-    ] if ;
-
-: inotify-read-loop ( port -- )
-    dup check-disposed
-    dup wait-to-read drop
-    0 over buffer>> parse-file-notifications
-    0 over buffer>> buffer-reset
-    inotify-read-loop ;
-
-: inotify-read-thread ( port -- )
-    [ inotify-read-loop ] curry ignore-errors ;
-
-M: linux init-monitors
-    H{ } clone watches set
-    <inotify> [
-        [ inotify set ]
-        [
-            [ inotify-read-thread ] curry
-            "Linux monitor thread" spawn drop
-        ] bi
-    ] [
-        "Linux kernel version is too old" throw
-    ] if* ;
-
-M: linux dispose-monitors
-    inotify get dispose ;
diff --git a/basis/io/unix/linux/monitors/tags.txt b/basis/io/unix/linux/monitors/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/linux/tags.txt b/basis/io/unix/linux/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/macosx/macosx.factor b/basis/io/unix/macosx/macosx.factor
deleted file mode 100644 (file)
index 388d266..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-IN: io.unix.macosx
-USING: io.unix.backend io.unix.bsd io.backend
-namespaces system ;
-
-macosx set-io-backend
diff --git a/basis/io/unix/macosx/monitors/monitors.factor b/basis/io/unix/macosx/monitors/monitors.factor
deleted file mode 100644 (file)
index cde1d63..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: io.backend io.monitors
-core-foundation.fsevents continuations kernel sequences
-namespaces arrays system locals accessors destructors fry ;
-IN: io.unix.macosx.monitors
-
-TUPLE: macosx-monitor < monitor handle ;
-
-: enqueue-notifications ( triples monitor -- )
-    '[ first { +modify-file+ } _ queue-change ] each ;
-
-M:: macosx (monitor) ( path recursive? mailbox -- monitor )
-    [let | path [ path normalize-path ] |
-        path mailbox macosx-monitor new-monitor
-        dup [ enqueue-notifications ] curry
-        path 1array 0 0 <event-stream> >>handle
-    ] ;
-
-M: macosx-monitor dispose
-    handle>> dispose ;
-
-macosx set-io-backend
diff --git a/basis/io/unix/macosx/monitors/tags.txt b/basis/io/unix/macosx/monitors/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/macosx/tags.txt b/basis/io/unix/macosx/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/mmap/authors.txt b/basis/io/unix/mmap/authors.txt
deleted file mode 100755 (executable)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/mmap/mmap.factor b/basis/io/unix/mmap/mmap.factor
deleted file mode 100644 (file)
index d5dcda9..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-! Copyright (C) 2007 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien io io.files kernel math math.bitwise system unix
-io.unix.backend io.ports io.mmap destructors locals accessors ;
-IN: io.unix.mmap
-
-: open-r/w ( path -- fd ) O_RDWR file-mode open-file ;
-
-:: mmap-open ( path length prot flags -- alien fd )
-    [
-        f length prot flags
-        path open-r/w |dispose
-        [ 0 mmap dup MAP_FAILED = [ (io-error) ] when ] keep
-    ] with-destructors ;
-
-M: unix (mapped-file)
-    { PROT_READ PROT_WRITE } flags
-    { MAP_FILE MAP_SHARED } flags
-    mmap-open ;
-
-M: unix close-mapped-file ( mmap -- )
-    [ [ address>> ] [ length>> ] bi munmap io-error ]
-    [ handle>> close-file ]
-    bi ;
diff --git a/basis/io/unix/mmap/tags.txt b/basis/io/unix/mmap/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/netbsd/netbsd.factor b/basis/io/unix/netbsd/netbsd.factor
deleted file mode 100644 (file)
index ed13478..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-USING: io.unix.bsd io.backend system ;
-
-netbsd set-io-backend
diff --git a/basis/io/unix/netbsd/tags.txt b/basis/io/unix/netbsd/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/openbsd/openbsd.factor b/basis/io/unix/openbsd/openbsd.factor
deleted file mode 100644 (file)
index dfc466f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-USING: io.unix.bsd io.backend system ;
-
-openbsd set-io-backend
diff --git a/basis/io/unix/openbsd/tags.txt b/basis/io/unix/openbsd/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/pipes/pipes-tests.factor b/basis/io/unix/pipes/pipes-tests.factor
deleted file mode 100644 (file)
index 6ea7404..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-USING: tools.test io.pipes io.unix.pipes io.encodings.utf8
-io.encodings io namespaces sequences ;
-IN: io.unix.pipes.tests
-
-[ { 0 0 } ] [ { "ls" "grep ." } run-pipeline ] unit-test
-
-[ { 0 f 0 } ] [
-    {
-        "ls"
-        [
-            input-stream [ utf8 <decoder> ] change
-            output-stream [ utf8 <encoder> ] change
-            input-stream get lines reverse [ print ] each f
-        ]
-        "grep ."
-    } run-pipeline
-] unit-test
diff --git a/basis/io/unix/pipes/pipes.factor b/basis/io/unix/pipes/pipes.factor
deleted file mode 100644 (file)
index a28738e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: system kernel unix math sequences qualified
-io.unix.backend io.ports specialized-arrays.int accessors ;
-IN: io.unix.pipes
-QUALIFIED: io.pipes
-
-M: unix io.pipes:(pipe) ( -- pair )
-    2 <int-array>
-    [ underlying>> pipe io-error ]
-    [ first2 [ <fd> init-fd ] bi@ io.pipes:pipe boa ] bi ;
diff --git a/basis/io/unix/pipes/tags.txt b/basis/io/unix/pipes/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/select/authors.txt b/basis/io/unix/select/authors.txt
deleted file mode 100755 (executable)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/select/select.factor b/basis/io/unix/select/select.factor
deleted file mode 100644 (file)
index a6b6100..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-! Copyright (C) 2004, 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types kernel io.ports io.unix.backend
-bit-arrays sequences assocs unix math namespaces
-accessors math.order locals unix.time fry ;
-IN: io.unix.select
-
-TUPLE: select-mx < mx read-fdset write-fdset ;
-
-! Factor's bit-arrays are an array of bytes, OS X expects
-! FD_SET to be an array of cells, so we have to account for
-! byte order differences on big endian platforms
-: munge ( i -- i' )
-    little-endian? [ BIN: 11000 bitxor ] unless ; inline
-
-: <select-mx> ( -- mx )
-    select-mx new-mx
-        FD_SETSIZE 8 * <bit-array> >>read-fdset
-        FD_SETSIZE 8 * <bit-array> >>write-fdset ;
-
-: clear-nth ( n seq -- ? )
-    [ nth ] [ [ f ] 2dip set-nth ] 2bi ;
-
-:: check-fd ( fd fdset mx quot -- )
-    fd munge fdset clear-nth [ fd mx quot call ] when ; inline
-
-: check-fdset ( fds fdset mx quot -- )
-    [ check-fd ] 3curry each ; inline
-
-: init-fdset ( fds fdset -- )
-    '[ t swap munge _ set-nth ] each ;
-
-: read-fdset/tasks ( mx -- seq fdset )
-    [ reads>> keys ] [ read-fdset>> ] bi ;
-
-: write-fdset/tasks ( mx -- seq fdset )
-    [ writes>> keys ] [ write-fdset>> ] bi ;
-
-: max-fd ( assoc -- n )
-    dup assoc-empty? [ drop 0 ] [ keys supremum ] if ;
-
-: num-fds ( mx -- n )
-    [ reads>> max-fd ] [ writes>> max-fd ] bi max 1+ ;
-
-: init-fdsets ( mx -- nfds read write except )
-    [ num-fds ]
-    [ read-fdset/tasks [ init-fdset ] [ underlying>> ] bi ]
-    [ write-fdset/tasks [ init-fdset ] [ underlying>> ] bi ] tri
-    f ;
-
-M:: select-mx wait-for-events ( us mx -- )
-    mx
-    [ init-fdsets us dup [ make-timeval ] when select multiplexer-error drop ]
-    [ [ read-fdset/tasks ] keep [ input-available ] check-fdset ]
-    [ [ write-fdset/tasks ] keep [ output-available ] check-fdset ]
-    tri ;
diff --git a/basis/io/unix/select/tags.txt b/basis/io/unix/select/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/sockets/authors.txt b/basis/io/unix/sockets/authors.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/unix/sockets/secure/debug/debug.factor b/basis/io/unix/sockets/secure/debug/debug.factor
deleted file mode 100644 (file)
index cd5353e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors io.sockets.secure kernel ;
-IN: io.unix.sockets.secure.debug
-
-: with-test-context ( quot -- )
-    <secure-config>
-        "resource:basis/openssl/test/server.pem" >>key-file
-        "resource:basis/openssl/test/dh1024.pem" >>dh-file
-        "password" >>password
-    swap with-secure-context ; inline
diff --git a/basis/io/unix/sockets/secure/secure-tests.factor b/basis/io/unix/sockets/secure/secure-tests.factor
deleted file mode 100644 (file)
index 0816dd2..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-IN: io.sockets.secure.tests
-USING: accessors kernel namespaces io io.sockets
-io.sockets.secure io.encodings.ascii io.streams.duplex
-io.unix.backend classes words destructors threads tools.test
-concurrency.promises byte-arrays locals calendar io.timeouts
-io.unix.sockets.secure.debug ;
-
-\ <secure-config> must-infer
-{ 1 0 } [ [ ] with-secure-context ] must-infer-as
-
-[ ] [ <promise> "port" set ] unit-test
-
-:: server-test ( quot -- )
-    [
-        [
-            "127.0.0.1" 0 <inet4> <secure> ascii <server> [
-                dup addr>> addrspec>> port>> "port" get fulfill
-                accept [
-                    quot call
-                ] curry with-stream
-            ] with-disposal
-        ] with-test-context
-    ] "SSL server test" spawn drop ;
-
-: client-test ( -- string )
-    <secure-config> [
-        "127.0.0.1" "port" get ?promise <inet4> <secure> ascii <client> drop contents
-    ] with-secure-context ;
-
-[ ] [ [ class name>> write ] server-test ] unit-test
-
-[ "secure" ] [ client-test ] unit-test
-
-! Now, see what happens if the server closes the connection prematurely
-[ ] [ <promise> "port" set ] unit-test
-
-[ ] [
-    [
-        drop
-        "hello" write flush
-        input-stream get stream>> handle>> f >>connected drop
-    ] server-test
-] unit-test
-
-[ client-test ] [ premature-close? ] must-fail-with
-
-! Now, try validating the certificate. This should fail because its
-! actually an invalid certificate
-[ ] [ <promise> "port" set ] unit-test
-
-[ ] [ [ drop "hi" write ] server-test ] unit-test
-
-[
-    <secure-config> [
-        "localhost" "port" get ?promise <inet> <secure> ascii
-        <client> drop dispose
-    ] with-secure-context
-] [ certificate-verify-error? ] must-fail-with
-
-! Client-side handshake timeout
-[ ] [ <promise> "port" set ] unit-test
-
-[ ] [
-    [
-        "127.0.0.1" 0 <inet4> ascii <server> [
-            dup addr>> port>> "port" get fulfill
-            accept drop 1 minutes sleep dispose
-        ] with-disposal
-    ] "Silly server" spawn drop
-] unit-test
-
-[
-    1 seconds secure-socket-timeout [
-        client-test
-    ] with-variable
-] [ io-timeout? ] must-fail-with
-
-! Server-side handshake timeout
-[ ] [ <promise> "port" set ] unit-test
-
-[ ] [
-    [
-        "127.0.0.1" "port" get ?promise
-        <inet4> ascii <client> drop 1 minutes sleep dispose
-    ] "Silly client" spawn drop
-] unit-test
-
-[
-    1 seconds secure-socket-timeout [
-        [
-            "127.0.0.1" 0 <inet4> <secure> ascii <server> [
-                dup addr>> addrspec>> port>> "port" get fulfill
-                accept drop dup stream-read1 drop dispose
-            ] with-disposal
-        ] with-test-context
-    ] with-variable
-] [ io-timeout? ] must-fail-with
-
-! Client socket shutdown timeout
-
-! Until I sort out two-stage handshaking, I can't do much here
-[
-    [ ] [ <promise> "port" set ] unit-test
-    
-    [ ] [
-        [
-            [
-                "127.0.0.1" 0 <inet4> <secure> ascii <server> [
-                    dup addr>> addrspec>> port>> "port" get fulfill
-                    accept drop 1 minutes sleep dispose
-                ] with-disposal
-            ] with-test-context
-        ] "Silly server" spawn drop
-    ] unit-test
-    
-    [
-        1 seconds secure-socket-timeout [
-            <secure-config> [
-                "127.0.0.1" "port" get ?promise <inet4> <secure>
-                ascii <client> drop dispose
-            ] with-secure-context
-        ] with-variable
-    ] [ io-timeout? ] must-fail-with
-    
-    ! Server socket shutdown timeout
-    [ ] [ <promise> "port" set ] unit-test
-    
-    [ ] [
-        [
-            [
-                "127.0.0.1" "port" get ?promise
-                <inet4> <secure> ascii <client> drop 1 minutes sleep dispose
-            ] with-test-context
-        ] "Silly client" spawn drop
-    ] unit-test
-    
-    [
-        1 seconds secure-socket-timeout [
-            [
-                "127.0.0.1" 0 <inet4> <secure> ascii <server> [
-                    dup addr>> addrspec>> port>> "port" get fulfill
-                    accept drop dispose
-                ] with-disposal
-            ] with-test-context
-        ] with-variable
-    ] [ io-timeout? ] must-fail-with
-] drop
diff --git a/basis/io/unix/sockets/secure/secure.factor b/basis/io/unix/sockets/secure/secure.factor
deleted file mode 100644 (file)
index 106b656..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors unix byte-arrays kernel sequences
-namespaces math math.order combinators init alien alien.c-types
-alien.strings libc continuations destructors openssl
-openssl.libcrypto openssl.libssl io io.files io.ports
-io.unix.backend io.unix.sockets io.encodings.ascii io.buffers
-io.sockets io.sockets.secure io.sockets.secure.openssl
-io.timeouts system summary fry ;
-IN: io.unix.sockets.secure
-
-M: ssl-handle handle-fd file>> handle-fd ;
-
-: syscall-error ( r -- * )
-    ERR_get_error dup zero? [
-        drop
-        {
-            { -1 [ err_no ECONNRESET = [ premature-close ] [ (io-error) ] if ] }
-            { 0 [ premature-close ] }
-        } case
-    ] [ nip (ssl-error) ] if ;
-
-: check-accept-response ( handle r -- event )
-    over handle>> over SSL_get_error
-    {
-        { SSL_ERROR_NONE [ 2drop f ] }
-        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
-        { SSL_ERROR_WANT_ACCEPT [ 2drop +input+ ] }
-        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
-        { SSL_ERROR_SYSCALL [ syscall-error ] }
-        { SSL_ERROR_ZERO_RETURN [ (ssl-error) ] }
-        { SSL_ERROR_SSL [ (ssl-error) ] }
-    } case ;
-
-: do-ssl-accept ( ssl-handle -- )
-    dup dup handle>> SSL_accept check-accept-response dup
-    [ [ dup file>> ] dip wait-for-fd do-ssl-accept ] [ 2drop ] if ;
-
-: maybe-handshake ( ssl-handle -- )
-    dup connected>> [ drop ] [
-        t >>connected
-        [ do-ssl-accept ] with-timeout
-    ] if ;
-
-: check-response ( port r -- port r n )
-    over handle>> handle>> over SSL_get_error ; inline
-
-! Input ports
-: check-read-response ( port r -- event )
-    check-response
-    {
-        { SSL_ERROR_NONE [ swap buffer>> n>buffer f ] }
-        { SSL_ERROR_ZERO_RETURN [ 2drop f ] }
-        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
-        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
-        { SSL_ERROR_SYSCALL [ syscall-error ] }
-        { SSL_ERROR_SSL [ (ssl-error) ] }
-    } case ;
-
-M: ssl-handle refill
-    dup maybe-handshake
-    handle>> ! ssl
-    over buffer>>
-    [ buffer-end ] ! buf
-    [ buffer-capacity ] bi ! len
-    SSL_read
-    check-read-response ;
-
-! Output ports
-: check-write-response ( port r -- event )
-    check-response
-    {
-        { SSL_ERROR_NONE [ swap buffer>> buffer-consume f ] }
-        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
-        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
-        { SSL_ERROR_SYSCALL [ syscall-error ] }
-        { SSL_ERROR_SSL [ (ssl-error) ] }
-    } case ;
-
-M: ssl-handle drain
-    dup maybe-handshake
-    handle>> ! ssl
-    over buffer>>
-    [ buffer@ ] ! buf
-    [ buffer-length ] bi ! len
-    SSL_write
-    check-write-response ;
-
-M: ssl-handle cancel-operation
-    file>> cancel-operation ;
-
-M: ssl-handle timeout
-    drop secure-socket-timeout get ;
-
-! Client sockets
-: <ssl-socket> ( fd -- ssl )
-    [ fd>> BIO_NOCLOSE BIO_new_socket dup ssl-error ] keep <ssl-handle>
-    [ handle>> swap dup SSL_set_bio ] keep ;
-
-M: secure ((client)) ( addrspec -- handle )
-    addrspec>> ((client)) <ssl-socket> ;
-
-M: secure parse-sockaddr addrspec>> parse-sockaddr <secure> ;
-
-M: secure (get-local-address) addrspec>> (get-local-address) ;
-
-: check-connect-response ( ssl-handle r -- event )
-    over handle>> over SSL_get_error
-    {
-        { SSL_ERROR_NONE [ 2drop f ] }
-        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
-        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
-        { SSL_ERROR_SYSCALL [ syscall-error ] }
-        { SSL_ERROR_SSL [ (ssl-error) ] }
-    } case ;
-
-: do-ssl-connect ( ssl-handle -- )
-    dup dup handle>> SSL_connect check-connect-response dup
-    [ dupd wait-for-fd do-ssl-connect ] [ 2drop ] if ;
-
-: resume-session ( ssl-handle ssl-session -- )
-    [ [ handle>> ] dip SSL_set_session ssl-error ]
-    [ drop do-ssl-connect ]
-    2bi ;
-
-: begin-session ( ssl-handle addrspec -- )
-    [ drop do-ssl-connect ]
-    [ [ handle>> SSL_get1_session ] dip save-session ]
-    2bi ;
-
-: secure-connection ( client-out addrspec -- )
-    [ handle>> ] dip
-    [
-        '[
-            _ dup get-session
-            [ resume-session ] [ begin-session ] ?if
-        ] with-timeout
-    ] [ drop t >>connected drop ] 2bi ;
-
-M: secure establish-connection ( client-out remote -- )
-    addrspec>> [ establish-connection ] [ secure-connection ] 2bi ;
-
-M: secure (server) addrspec>> (server) ;
-
-M: secure (accept)
-    [
-        addrspec>> (accept) [ |dispose <ssl-socket> ] dip
-    ] with-destructors ;
-
-: check-shutdown-response ( handle r -- event )
-    #! We don't do two-step shutdown here because I couldn't
-    #! figure out how to do it with non-blocking BIOs. Also, it
-    #! seems that SSL_shutdown always returns 0 -- this sounds
-    #! like a bug
-    over handle>> over SSL_get_error
-    {
-        { SSL_ERROR_NONE [ 2drop f ] }
-        { SSL_ERROR_WANT_READ [ 2drop +input+ ] }
-        { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
-        { SSL_ERROR_SYSCALL [ dup zero? [ 2drop f ] [ syscall-error ] if ] }
-        { SSL_ERROR_SSL [ (ssl-error) ] }
-    } case ;
-
-: (shutdown) ( handle -- )
-    dup dup handle>> SSL_shutdown check-shutdown-response
-    dup [ dupd wait-for-fd (shutdown) ] [ 2drop ] if ;
-
-M: ssl-handle shutdown
-    dup connected>> [
-        f >>connected [ (shutdown) ] with-timeout
-    ] [ drop ] if ;
-
-: check-buffer ( port -- port )
-    dup buffer>> buffer-empty? [ upgrade-buffers-full ] unless ;
-
-: input/output-ports ( -- input output )
-    input-stream output-stream
-    [ get underlying-port check-buffer ] bi@
-    2dup [ handle>> ] bi@ eq? [ upgrade-on-non-socket ] unless ;
-
-: make-input/output-secure ( input output -- )
-    dup handle>> fd? [ upgrade-on-non-socket ] unless
-    [ <ssl-socket> ] change-handle
-    handle>> >>handle drop ;
-
-: (send-secure-handshake) ( output -- )
-    remote-address get [ upgrade-on-non-socket ] unless*
-    secure-connection ;
-
-M: openssl send-secure-handshake
-    input/output-ports
-    [ make-input/output-secure ] keep
-    [ (send-secure-handshake) ] keep
-    remote-address get dup inet? [
-        host>> swap handle>> check-certificate
-    ] [ 2drop ] if ;
-
-M: openssl accept-secure-handshake
-    input/output-ports
-    make-input/output-secure ;
diff --git a/basis/io/unix/sockets/secure/tags.txt b/basis/io/unix/sockets/secure/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/sockets/sockets.factor b/basis/io/unix/sockets/sockets.factor
deleted file mode 100644 (file)
index 5fba7ba..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-! Copyright (C) 2004, 2008 Slava Pestov, Ivan Tikhonov. 
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types alien.strings generic kernel math
-namespaces threads sequences byte-arrays io.ports
-io.binary io.unix.backend io.streams.duplex
-io.backend io.ports io.files io.files.private
-io.encodings.utf8 math.parser continuations libc combinators
-system accessors qualified destructors unix locals init ;
-
-EXCLUDE: io => read write close ;
-EXCLUDE: io.sockets => accept ;
-
-IN: io.unix.sockets
-
-: socket-fd ( domain type -- fd )
-    0 socket dup io-error <fd> init-fd |dispose ;
-
-: set-socket-option ( fd level opt -- )
-    [ handle-fd ] 2dip 1 <int> "int" heap-size setsockopt io-error ;
-
-M: unix addrinfo-error ( n -- )
-    dup zero? [ drop ] [ gai_strerror throw ] if ;
-
-! Client sockets - TCP and Unix domain
-M: object (get-local-address) ( handle remote -- sockaddr )
-    [ handle-fd ] dip empty-sockaddr/size <int>
-    [ getsockname io-error ] 2keep drop ;
-
-M: object (get-remote-address) ( handle local -- sockaddr )
-    [ handle-fd ] dip empty-sockaddr/size <int>
-    [ getpeername io-error ] 2keep drop ;
-
-: init-client-socket ( fd -- )
-    SOL_SOCKET SO_OOBINLINE set-socket-option ;
-
-: wait-to-connect ( port -- )
-    dup handle>> handle-fd f 0 write
-    {
-        { [ 0 = ] [ drop ] }
-        { [ err_no EAGAIN = ] [ dup +output+ wait-for-port wait-to-connect ] }
-        { [ err_no EINTR = ] [ wait-to-connect ] }
-        [ (io-error) ]
-    } cond ;
-
-M: object establish-connection ( client-out remote -- )
-    [ drop ] [ [ handle>> handle-fd ] [ make-sockaddr/size ] bi* connect ] 2bi
-    {
-        { [ 0 = ] [ drop ] }
-        { [ err_no EINPROGRESS = ] [
-            [ +output+ wait-for-port ] [ wait-to-connect ] bi
-        ] }
-        [ (io-error) ]
-    } cond ;
-
-M: object ((client)) ( addrspec -- fd )
-    protocol-family SOCK_STREAM socket-fd dup init-client-socket ;
-
-! Server sockets - TCP and Unix domain
-: init-server-socket ( fd -- )
-    SOL_SOCKET SO_REUSEADDR set-socket-option ;
-
-: server-socket-fd ( addrspec type -- fd )
-    [ dup protocol-family ] dip socket-fd
-    dup init-server-socket
-    dup handle-fd rot make-sockaddr/size bind io-error ;
-
-M: object (server) ( addrspec -- handle )
-    [
-        SOCK_STREAM server-socket-fd
-        dup handle-fd 128 listen io-error
-    ] with-destructors ;
-
-: do-accept ( server addrspec -- fd sockaddr )
-    [ handle>> handle-fd ] [ empty-sockaddr/size <int> ] bi*
-    [ accept ] 2keep drop ; inline
-
-M: object (accept) ( server addrspec -- fd sockaddr )
-    2dup do-accept
-    {
-        { [ over 0 >= ] [ [ 2nip <fd> init-fd ] dip ] }
-        { [ err_no EINTR = ] [ 2drop (accept) ] }
-        { [ err_no EAGAIN = ] [
-            2drop
-            [ drop +input+ wait-for-port ]
-            [ (accept) ]
-            2bi
-        ] }
-        [ (io-error) ]
-    } cond ;
-
-! Datagram sockets - UDP and Unix domain
-M: unix (datagram)
-    [ SOCK_DGRAM server-socket-fd ] with-destructors ;
-
-SYMBOL: receive-buffer
-
-: packet-size 65536 ; inline
-
-[ packet-size malloc receive-buffer set-global ] "io.unix.sockets" add-init-hook
-
-:: do-receive ( port -- packet sockaddr )
-    port addr>> empty-sockaddr/size [| sockaddr len |
-        port handle>> handle-fd ! s
-        receive-buffer get-global ! buf
-        packet-size ! nbytes
-        0 ! flags
-        sockaddr ! from
-        len <int> ! fromlen
-        recvfrom dup 0 >= [
-            receive-buffer get-global swap memory>byte-array sockaddr
-        ] [
-            drop f f
-        ] if
-    ] call ;
-
-M: unix (receive) ( datagram -- packet sockaddr )
-    dup do-receive dup [ [ drop ] 2dip ] [
-        2drop [ +input+ wait-for-port ] [ (receive) ] bi
-    ] if ;
-
-:: do-send ( packet sockaddr len socket datagram -- )
-    socket handle-fd packet dup length 0 sockaddr len sendto
-    0 < [
-        err_no EINTR = [
-            packet sockaddr len socket datagram do-send
-        ] [
-            err_no EAGAIN = [
-                datagram +output+ wait-for-port
-                packet sockaddr len socket datagram do-send
-            ] [
-                (io-error)
-            ] if
-        ] if
-    ] when ;
-
-M: unix (send) ( packet addrspec datagram -- )
-    [ make-sockaddr/size ] [ [ handle>> ] keep ] bi* do-send ;
-
-! Unix domain sockets
-M: local protocol-family drop PF_UNIX ;
-
-M: local sockaddr-size drop "sockaddr-un" heap-size ;
-
-M: local empty-sockaddr drop "sockaddr-un" <c-object> ;
-
-M: local make-sockaddr
-    path>> (normalize-path)
-    dup length 1 + max-un-path > [ "Path too long" throw ] when
-    "sockaddr-un" <c-object>
-    AF_UNIX over set-sockaddr-un-family
-    dup sockaddr-un-path rot utf8 string>alien dup length memcpy ;
-
-M: local parse-sockaddr
-    drop
-    sockaddr-un-path utf8 alien>string <local> ;
diff --git a/basis/io/unix/sockets/summary.txt b/basis/io/unix/sockets/summary.txt
deleted file mode 100644 (file)
index 22342ec..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Implementation of TCP/IP and UDP/IP sockets on Unix-like systems
diff --git a/basis/io/unix/sockets/tags.txt b/basis/io/unix/sockets/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/summary.txt b/basis/io/unix/summary.txt
deleted file mode 100644 (file)
index 8f66d88..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Non-blocking I/O and sockets on Unix-like systems
diff --git a/basis/io/unix/tags.txt b/basis/io/unix/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/unix/unix-tests.factor b/basis/io/unix/unix-tests.factor
deleted file mode 100644 (file)
index df61420..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-USING: io.files io.sockets io kernel threads
-namespaces tools.test continuations strings byte-arrays
-sequences prettyprint system io.encodings.binary io.encodings.ascii
-io.streams.duplex destructors make ;
-IN: io.unix.tests
-
-! Unix domain stream sockets
-: socket-server "unix-domain-socket-test" temp-file ;
-
-[
-    [ socket-server delete-file ] ignore-errors
-
-    socket-server <local>
-    ascii <server> [
-        accept drop [
-            "Hello world" print flush
-            readln "XYZ" = "FOO" "BAR" ? print flush
-        ] with-stream
-    ] with-disposal
-
-    socket-server delete-file
-] "Test" spawn drop
-
-yield
-
-[ { "Hello world" "FOO" } ] [
-    [
-        socket-server <local> ascii [
-            readln ,
-            "XYZ" print flush
-            readln ,
-        ] with-client
-    ] { } make
-] unit-test
-
-: datagram-server "unix-domain-datagram-test" temp-file ;
-: datagram-client "unix-domain-datagram-test-2" temp-file ;
-
-! Unix domain datagram sockets
-[ datagram-server delete-file ] ignore-errors
-[ datagram-client delete-file ] ignore-errors
-
-[
-    [
-        datagram-server <local> <datagram> "d" set
-
-        "Receive 1" print
-
-        "d" get receive [ reverse ] dip
-        
-        "Send 1" print
-        dup .
-
-        "d" get send
-
-        "Receive 2" print
-
-        "d" get receive [ " world" append ] dip
-        
-        "Send 1" print
-        dup .
-
-         "d" get send
-
-        "d" get dispose
-
-        "Done" print
-
-        datagram-server delete-file
-    ] with-scope
-] "Test" spawn drop
-
-yield
-
-[ datagram-client delete-file ] ignore-errors
-
-datagram-client <local> <datagram>
-"d" set
-
-[ ] [
-    "hello" >byte-array
-    datagram-server <local>
-    "d" get send
-] unit-test
-
-[ "olleh" t ] [
-    "d" get receive
-    datagram-server <local> =
-    [ >string ] dip
-] unit-test
-
-[ ] [
-    "hello" >byte-array
-    datagram-server <local>
-    "d" get send
-] unit-test
-
-[ "hello world" t ] [
-    "d" get receive
-    datagram-server <local> =
-    [ >string ] dip
-] unit-test
-
-[ ] [ "d" get dispose ] unit-test
-
-! Test error behavior
-: another-datagram "unix-domain-datagram-test-3" temp-file ;
-
-[ another-datagram delete-file ] ignore-errors
-
-datagram-client delete-file
-
-[ ] [ datagram-client <local> <datagram> "d" set ] unit-test
-
-[ B{ 1 2 3 } another-datagram <local> "d" get send ] must-fail
-
-[ ] [ "d" get dispose ] unit-test
-
-! See what happens on send/receive after close
-
-[ "d" get receive ] must-fail
-
-[ B{ 1 2 } datagram-server <local> "d" get send ] must-fail
-
-! Invalid parameter tests
-
-[
-    image binary [ input-stream get accept ] with-file-reader
-] must-fail
-
-[
-    image binary [ input-stream get receive ] with-file-reader
-] must-fail
-
-[
-    image binary [
-        B{ 1 2 } datagram-server <local>
-        input-stream get send
-    ] with-file-reader
-] must-fail
diff --git a/basis/io/unix/unix.factor b/basis/io/unix/unix.factor
deleted file mode 100644 (file)
index 93b5fa6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-USING: accessors system words sequences vocabs.loader
-io.unix.backend io.unix.files ;
-
-"io.unix." os name>> append require
diff --git a/basis/io/windows/authors.txt b/basis/io/windows/authors.txt
deleted file mode 100644 (file)
index 781acc2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Doug Coleman
-Mackenzie Straight
diff --git a/basis/io/windows/files/files.factor b/basis/io/windows/files/files.factor
deleted file mode 100755 (executable)
index 664727d..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types io.binary io.backend io.files io.buffers
-io.encodings.utf16n io.ports io.windows kernel math splitting
-fry alien.strings windows windows.kernel32 windows.time calendar
-combinators math.functions sequences namespaces make words
-symbols system destructors accessors math.bitwise continuations
-windows.errors arrays byte-arrays generalizations ;
-IN: io.windows.files
-
-: open-file ( path access-mode create-mode flags -- handle )
-    [
-        [ share-mode default-security-attributes ] 2dip
-        CreateFile-flags f CreateFile opened-file
-    ] with-destructors ;
-
-: open-pipe-r/w ( path -- win32-file )
-    { GENERIC_READ GENERIC_WRITE } flags
-    OPEN_EXISTING 0 open-file ;
-
-: open-read ( path -- win32-file )
-    GENERIC_READ OPEN_EXISTING 0 open-file 0 >>ptr ;
-
-: open-write ( path -- win32-file )
-    GENERIC_WRITE CREATE_ALWAYS 0 open-file 0 >>ptr ;
-
-: (open-append) ( path -- win32-file )
-    GENERIC_WRITE OPEN_ALWAYS 0 open-file ;
-
-: open-existing ( path -- win32-file )
-    { GENERIC_READ GENERIC_WRITE } flags
-    share-mode
-    f
-    OPEN_EXISTING
-    FILE_FLAG_BACKUP_SEMANTICS
-    f CreateFileW dup win32-error=0/f <win32-file> ;
-
-: maybe-create-file ( path -- win32-file ? )
-    #! return true if file was just created
-    { GENERIC_READ GENERIC_WRITE } flags
-    share-mode
-    f
-    OPEN_ALWAYS
-    0 CreateFile-flags
-    f CreateFileW dup win32-error=0/f <win32-file>
-    GetLastError ERROR_ALREADY_EXISTS = not ;
-
-: set-file-pointer ( handle length method -- )
-    [ dupd d>w/w <uint> ] dip SetFilePointer
-    INVALID_SET_FILE_POINTER = [
-        CloseHandle "SetFilePointer failed" throw
-    ] when drop ;
-
-HOOK: open-append os ( path -- win32-file )
-
-TUPLE: FileArgs
-    hFile lpBuffer nNumberOfBytesToRead
-    lpNumberOfBytesRet lpOverlapped ;
-
-C: <FileArgs> FileArgs
-
-: make-FileArgs ( port -- <FileArgs> )
-    {
-        [ handle>> check-disposed ]
-        [ handle>> handle>> ]
-        [ buffer>> ]
-        [ buffer>> buffer-length ]
-        [ drop "DWORD" <c-object> ]
-        [ FileArgs-overlapped ]
-    } cleave <FileArgs> ;
-
-: setup-read ( <FileArgs> -- hFile lpBuffer nNumberOfBytesToRead lpNumberOfBytesRead lpOverlapped )
-    {
-        [ hFile>> ]
-        [ lpBuffer>> buffer-end ]
-        [ lpBuffer>> buffer-capacity ]
-        [ lpNumberOfBytesRet>> ]
-        [ lpOverlapped>> ]
-    } cleave ;
-
-: setup-write ( <FileArgs> -- hFile lpBuffer nNumberOfBytesToWrite lpNumberOfBytesWritten lpOverlapped )
-    {
-        [ hFile>> ]
-        [ lpBuffer>> buffer@ ]
-        [ lpBuffer>> buffer-length ]
-        [ lpNumberOfBytesRet>> ]
-        [ lpOverlapped>> ]
-    } cleave ;
-
-M: windows (file-reader) ( path -- stream )
-    open-read <input-port> ;
-
-M: windows (file-writer) ( path -- stream )
-    open-write <output-port> ;
-
-M: windows (file-appender) ( path -- stream )
-    open-append <output-port> ;
-
-M: windows move-file ( from to -- )
-    [ normalize-path ] bi@ MoveFile win32-error=0/f ;
-
-M: windows delete-file ( path -- )
-    normalize-path DeleteFile win32-error=0/f ;
-
-M: windows copy-file ( from to -- )
-    dup parent-directory make-directories
-    [ normalize-path ] bi@ 0 CopyFile win32-error=0/f ;
-
-M: windows make-directory ( path -- )
-    normalize-path
-    f CreateDirectory win32-error=0/f ;
-
-M: windows delete-directory ( path -- )
-    normalize-path
-    RemoveDirectory win32-error=0/f ;
-
-: find-first-file ( path -- WIN32_FIND_DATA handle )
-    "WIN32_FIND_DATA" <c-object> tuck
-    FindFirstFile
-    [ INVALID_HANDLE_VALUE = [ win32-error-string throw ] when ] keep ;
-
-: find-next-file ( path -- WIN32_FIND_DATA/f )
-    "WIN32_FIND_DATA" <c-object> tuck
-    FindNextFile 0 = [
-        GetLastError ERROR_NO_MORE_FILES = [
-            win32-error
-        ] unless drop f
-    ] when ;
-
-M: windows (directory-entries) ( path -- seq )
-    "\\" ?tail drop "\\*" append
-    find-first-file [ >directory-entry ] dip
-    [
-        '[
-            [ _ find-next-file dup ]
-            [ >directory-entry ]
-            [ drop ] produce
-            over name>> "." = [ nip ] [ swap prefix ] if
-        ]
-    ] [ '[ _ FindClose win32-error=0/f ] ] bi [ ] cleanup ;
-
-SYMBOLS: +read-only+ +hidden+ +system+
-+archive+ +device+ +normal+ +temporary+
-+sparse-file+ +reparse-point+ +compressed+ +offline+
-+not-content-indexed+ +encrypted+ ;
-
-TUPLE: windows-file-info < file-info attributes ;
-
-: win32-file-attribute ( n attr symbol -- )
-    rot mask? [ , ] [ drop ] if ;
-
-: win32-file-attributes ( n -- seq )
-    [
-        {
-            [ +read-only+ FILE_ATTRIBUTE_READONLY win32-file-attribute ]
-            [ +hidden+ FILE_ATTRIBUTE_HIDDEN win32-file-attribute ]
-            [ +system+ FILE_ATTRIBUTE_SYSTEM win32-file-attribute ]
-            [ +directory+ FILE_ATTRIBUTE_DIRECTORY win32-file-attribute ]
-            [ +archive+ FILE_ATTRIBUTE_ARCHIVE win32-file-attribute ]
-            [ +device+ FILE_ATTRIBUTE_DEVICE win32-file-attribute ]
-            [ +normal+ FILE_ATTRIBUTE_NORMAL win32-file-attribute ]
-            [ +temporary+ FILE_ATTRIBUTE_TEMPORARY win32-file-attribute ]
-            [ +sparse-file+ FILE_ATTRIBUTE_SPARSE_FILE win32-file-attribute ]
-            [ +reparse-point+ FILE_ATTRIBUTE_REPARSE_POINT win32-file-attribute ]
-            [ +compressed+ FILE_ATTRIBUTE_COMPRESSED win32-file-attribute ]
-            [ +offline+ FILE_ATTRIBUTE_OFFLINE win32-file-attribute ]
-            [ +not-content-indexed+ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED win32-file-attribute ]
-            [ +encrypted+ FILE_ATTRIBUTE_ENCRYPTED win32-file-attribute ]
-        } cleave
-    ] { } make ;
-
-: win32-file-type ( n -- symbol )
-    FILE_ATTRIBUTE_DIRECTORY mask? +directory+ +regular-file+ ? ;
-
-TUPLE: windows-directory-entry < directory-entry attributes ;
-
-M: windows >directory-entry ( byte-array -- directory-entry )
-    [ WIN32_FIND_DATA-cFileName utf16n alien>string ]
-    [ WIN32_FIND_DATA-dwFileAttributes win32-file-type ]
-    [ WIN32_FIND_DATA-dwFileAttributes win32-file-attributes ]
-    tri
-    dupd remove windows-directory-entry boa ;
-
-: WIN32_FIND_DATA>file-info ( WIN32_FIND_DATA -- file-info )
-    [ \ windows-file-info new ] dip
-    {
-        [ WIN32_FIND_DATA-dwFileAttributes win32-file-type >>type ]
-        [ WIN32_FIND_DATA-dwFileAttributes win32-file-attributes >>attributes ]
-        [
-            [ WIN32_FIND_DATA-nFileSizeLow ]
-            [ WIN32_FIND_DATA-nFileSizeHigh ] bi >64bit >>size
-        ]
-        [ WIN32_FIND_DATA-dwFileAttributes >>permissions ]
-        [ WIN32_FIND_DATA-ftCreationTime FILETIME>timestamp >>created ]
-        [ WIN32_FIND_DATA-ftLastWriteTime FILETIME>timestamp >>modified ]
-        [ WIN32_FIND_DATA-ftLastAccessTime FILETIME>timestamp >>accessed ]
-    } cleave ;
-
-: find-first-file-stat ( path -- WIN32_FIND_DATA )
-    "WIN32_FIND_DATA" <c-object> [
-        FindFirstFile
-        [ INVALID_HANDLE_VALUE = [ win32-error ] when ] keep
-        FindClose win32-error=0/f
-    ] keep ;
-
-: BY_HANDLE_FILE_INFORMATION>file-info ( HANDLE_FILE_INFORMATION -- file-info )
-    [ \ windows-file-info new ] dip
-    {
-        [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes win32-file-type >>type ]
-        [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes win32-file-attributes >>attributes ]
-        [
-            [ BY_HANDLE_FILE_INFORMATION-nFileSizeLow ]
-            [ BY_HANDLE_FILE_INFORMATION-nFileSizeHigh ] bi >64bit >>size
-        ]
-        [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes >>permissions ]
-        [
-            BY_HANDLE_FILE_INFORMATION-ftCreationTime
-            FILETIME>timestamp >>created
-        ]
-        [
-            BY_HANDLE_FILE_INFORMATION-ftLastWriteTime
-            FILETIME>timestamp >>modified
-        ]
-        [
-            BY_HANDLE_FILE_INFORMATION-ftLastAccessTime
-            FILETIME>timestamp >>accessed
-        ]
-        ! [ BY_HANDLE_FILE_INFORMATION-nNumberOfLinks ]
-        ! [
-          ! [ BY_HANDLE_FILE_INFORMATION-nFileIndexLow ]
-          ! [ BY_HANDLE_FILE_INFORMATION-nFileIndexHigh ] bi >64bit
-        ! ]
-    } cleave ;
-
-: get-file-information ( handle -- BY_HANDLE_FILE_INFORMATION )
-    [
-        "BY_HANDLE_FILE_INFORMATION" <c-object>
-        [ GetFileInformationByHandle win32-error=0/f ] keep
-    ] keep CloseHandle win32-error=0/f ;
-
-: get-file-information-stat ( path -- BY_HANDLE_FILE_INFORMATION )
-    dup
-    GENERIC_READ FILE_SHARE_READ f
-    OPEN_EXISTING FILE_FLAG_BACKUP_SEMANTICS f
-    CreateFileW dup INVALID_HANDLE_VALUE = [
-        drop find-first-file-stat WIN32_FIND_DATA>file-info
-    ] [
-        nip
-        get-file-information BY_HANDLE_FILE_INFORMATION>file-info
-    ] if ;
-
-M: winnt file-info ( path -- info )
-    normalize-path get-file-information-stat ;
-
-M: winnt link-info ( path -- info )
-    file-info ;
-
-HOOK: root-directory os ( string -- string' )
-
-: volume-information ( normalized-path -- volume-name volume-serial max-component flags type )
-    MAX_PATH 1+ [ <byte-array> ] keep
-    "DWORD" <c-object>
-    "DWORD" <c-object>
-    "DWORD" <c-object>
-    MAX_PATH 1+ [ <byte-array> ] keep
-    [ GetVolumeInformation win32-error=0/f ] 7 nkeep
-    drop 5 nrot drop
-    [ utf16n alien>string ] 4 ndip
-    utf16n alien>string ;
-
-: file-system-space ( normalized-path -- available-space total-space free-space )
-    "ULARGE_INTEGER" <c-object>
-    "ULARGE_INTEGER" <c-object>
-    "ULARGE_INTEGER" <c-object>
-    [ GetDiskFreeSpaceEx win32-error=0/f ] 3keep ;
-
-: calculate-file-system-info ( file-system-info -- file-system-info' )
-    {
-        [ dup [ total-space>> ] [ free-space>> ] bi - >>used-space drop ]
-        [ ]
-    } cleave ;
-
-TUPLE: win32-file-system-info < file-system-info max-component flags device-serial ;
-
-M: winnt file-system-info ( path -- file-system-info )
-    normalize-path root-directory
-    dup [ volume-information ] [ file-system-space ] bi
-    \ win32-file-system-info new
-        swap *ulonglong >>free-space
-        swap *ulonglong >>total-space
-        swap *ulonglong >>available-space
-        swap >>type
-        swap *uint >>flags
-        swap *uint >>max-component
-        swap *uint >>device-serial
-        swap >>device-name
-        swap >>mount-point
-    calculate-file-system-info ;
-
-: volume>paths ( string -- array )
-    16384 "ushort" <c-array> tuck dup length
-    0 <uint> dup [ GetVolumePathNamesForVolumeName 0 = ] dip swap [
-        win32-error-string throw
-    ] [
-        *uint "ushort" heap-size * head
-        utf16n alien>string CHAR: \0 split
-    ] if ;
-
-: find-first-volume ( -- string handle )
-    MAX_PATH 1+ [ <byte-array> ] keep
-    dupd
-    FindFirstVolume dup win32-error=0/f
-    [ utf16n alien>string ] dip ;
-
-: find-next-volume ( handle -- string/f )
-    MAX_PATH 1+ [ <byte-array> tuck ] keep
-    FindNextVolume 0 = [
-        GetLastError ERROR_NO_MORE_FILES =
-        [ drop f ] [ win32-error-string throw ] if
-    ] [
-        utf16n alien>string
-    ] if ;
-
-: find-volumes ( -- array )
-    find-first-volume
-    [
-        '[
-            [ _ find-next-volume dup ]
-            [ ]
-            [ drop ] produce
-            swap prefix
-        ]
-    ] [ '[ _ FindVolumeClose win32-error=0/f ] ] bi [ ] cleanup ;
-
-M: winnt file-systems ( -- array )
-    find-volumes [ volume>paths ] map
-    concat [
-        [ file-system-info ]
-        [ drop \ file-system-info new swap >>mount-point ] recover
-    ] map ;
-
-: file-times ( path -- timestamp timestamp timestamp )
-    [
-        normalize-path open-existing &dispose handle>>
-        "FILETIME" <c-object>
-        "FILETIME" <c-object>
-        "FILETIME" <c-object>
-        [ GetFileTime win32-error=0/f ] 3keep
-        [ FILETIME>timestamp >local-time ] tri@
-    ] with-destructors ;
-
-: (set-file-times) ( handle timestamp/f timestamp/f timestamp/f -- )
-    [ timestamp>FILETIME ] tri@
-    SetFileTime win32-error=0/f ;
-
-: set-file-times ( path timestamp/f timestamp/f timestamp/f -- )
-    #! timestamp order: creation access write
-    [
-        [
-            normalize-path open-existing &dispose handle>>
-        ] 3dip (set-file-times)
-    ] with-destructors ;
-
-: set-file-create-time ( path timestamp -- )
-    f f set-file-times ;
-
-: set-file-access-time ( path timestamp -- )
-    [ f ] dip f set-file-times ;
-
-: set-file-write-time ( path timestamp -- )
-    [ f f ] dip set-file-times ;
-
-M: winnt touch-file ( path -- )
-    [
-        normalize-path
-        maybe-create-file [ &dispose ] dip
-        [ drop ] [ handle>> f now dup (set-file-times) ] if
-    ] with-destructors ;
diff --git a/basis/io/windows/files/tags.txt b/basis/io/windows/files/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/files/unique/tags.txt b/basis/io/windows/files/unique/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/files/unique/unique.factor b/basis/io/windows/files/unique/unique.factor
deleted file mode 100644 (file)
index ab99bf2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-USING: kernel system windows.kernel32 io.windows
-io.windows.files io.ports windows destructors environment
-io.files.unique ;
-IN: io.windows.files.unique
-
-M: windows touch-unique-file ( path -- )
-    GENERIC_WRITE CREATE_NEW 0 open-file dispose ;
-
-M: windows temporary-path ( -- path )
-    "TEMP" os-env ;
diff --git a/basis/io/windows/launcher/authors.txt b/basis/io/windows/launcher/authors.txt
deleted file mode 100755 (executable)
index 5674120..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Doug Coleman
-Slava Pestov
diff --git a/basis/io/windows/launcher/launcher-tests.factor b/basis/io/windows/launcher/launcher-tests.factor
deleted file mode 100644 (file)
index 1dba8bd..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-IN: io.windows.launcher.tests\r
-USING: tools.test io.windows.launcher ;\r
-\r
-[ "hello world" ] [ { "hello" "world" } join-arguments ] unit-test\r
-\r
-[ "bob \"mac arthur\"" ] [ { "bob" "mac arthur" } join-arguments ] unit-test\r
-\r
-[ "bob mac\\\\arthur" ] [ { "bob" "mac\\\\arthur" } join-arguments ] unit-test\r
-\r
-[ "bob \"mac arthur\\\\\"" ] [ { "bob" "mac arthur\\" } join-arguments ] unit-test\r
diff --git a/basis/io/windows/launcher/launcher.factor b/basis/io/windows/launcher/launcher.factor
deleted file mode 100644 (file)
index fd31ca9..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-! Copyright (C) 2007, 2008 Doug Coleman, Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types arrays continuations io
-io.windows io.windows.nt.pipes libc io.ports
-windows.types math windows.kernel32
-namespaces make io.launcher kernel sequences windows.errors
-splitting system threads init strings combinators
-io.backend accessors concurrency.flags io.files assocs
-io.files.private windows destructors specialized-arrays.ushort
-specialized-arrays.alien ;
-IN: io.windows.launcher
-
-TUPLE: CreateProcess-args
-       lpApplicationName
-       lpCommandLine
-       lpProcessAttributes
-       lpThreadAttributes
-       bInheritHandles
-       dwCreateFlags
-       lpEnvironment
-       lpCurrentDirectory
-       lpStartupInfo
-       lpProcessInformation ;
-
-: default-CreateProcess-args ( -- obj )
-    CreateProcess-args new
-    "STARTUPINFO" <c-object>
-    "STARTUPINFO" heap-size over set-STARTUPINFO-cb >>lpStartupInfo
-    "PROCESS_INFORMATION" <c-object> >>lpProcessInformation
-    TRUE >>bInheritHandles
-    0 >>dwCreateFlags ;
-
-: call-CreateProcess ( CreateProcess-args -- )
-    {
-        [ lpApplicationName>> ]
-        [ lpCommandLine>> ]
-        [ lpProcessAttributes>> ]
-        [ lpThreadAttributes>> ]
-        [ bInheritHandles>> ]
-        [ dwCreateFlags>> ]
-        [ lpEnvironment>> ]
-        [ lpCurrentDirectory>> ]
-        [ lpStartupInfo>> ]
-        [ lpProcessInformation>> ]
-    } cleave
-    CreateProcess win32-error=0/f ;
-
-: count-trailing-backslashes ( str n -- str n )
-    [ "\\" ?tail ] dip swap [
-        1+ count-trailing-backslashes
-    ] when ;
-
-: fix-trailing-backslashes ( str -- str' )
-    0 count-trailing-backslashes
-    2 * CHAR: \\ <repetition> append ;
-
-: escape-argument ( str -- newstr )
-    CHAR: \s over member? [
-        fix-trailing-backslashes "\"" dup surround
-    ] when ;
-
-: join-arguments ( args -- cmd-line )
-    [ escape-argument ] map " " join ;
-
-: lookup-priority ( process -- n )
-    priority>> {
-        { +lowest-priority+ [ IDLE_PRIORITY_CLASS ] }
-        { +low-priority+ [ BELOW_NORMAL_PRIORITY_CLASS ] }
-        { +normal-priority+ [ NORMAL_PRIORITY_CLASS ] }
-        { +high-priority+ [ ABOVE_NORMAL_PRIORITY_CLASS ] }
-        { +highest-priority+ [ HIGH_PRIORITY_CLASS ] }
-        { +realtime-priority+ [ REALTIME_PRIORITY_CLASS ] }
-        [ drop f ]
-    } case ;
-
-: app-name/cmd-line ( process -- app-name cmd-line )
-    command>> dup string? [
-        " " split1
-    ] [
-        unclip swap join-arguments
-    ] if ;
-
-: cmd-line ( process -- cmd-line )
-    command>> dup string? [ join-arguments ] unless ;
-
-: fill-lpApplicationName ( process args -- process args )
-    over app-name/cmd-line
-    [ >>lpApplicationName ] [ >>lpCommandLine ] bi* ;
-
-: fill-lpCommandLine ( process args -- process args )
-    over cmd-line >>lpCommandLine ;
-
-: fill-dwCreateFlags ( process args -- process args )
-    0
-    pick pass-environment? [ CREATE_UNICODE_ENVIRONMENT bitor ] when
-    pick detached>> os winnt? and [ DETACHED_PROCESS bitor ] when
-    pick lookup-priority [ bitor ] when*
-    >>dwCreateFlags ;
-
-: fill-lpEnvironment ( process args -- process args )
-    over pass-environment? [
-        [
-            over get-environment
-            [ swap % "=" % % "\0" % ] assoc-each
-            "\0" %
-        ] ushort-array{ } make underlying>>
-        >>lpEnvironment
-    ] when ;
-
-: fill-startup-info ( process args -- process args )
-    STARTF_USESTDHANDLES over lpStartupInfo>> set-STARTUPINFO-dwFlags ;
-
-HOOK: fill-redirection io-backend ( process args -- )
-
-M: wince fill-redirection 2drop ;
-
-: make-CreateProcess-args ( process -- args )
-    default-CreateProcess-args
-    os wince? [ fill-lpApplicationName ] [ fill-lpCommandLine ] if
-    fill-dwCreateFlags
-    fill-lpEnvironment
-    fill-startup-info
-    nip ;
-
-M: windows current-process-handle ( -- handle )
-    GetCurrentProcessId ;
-
-M: windows run-process* ( process -- handle )
-    [
-        current-directory get (normalize-path) cd
-
-        dup make-CreateProcess-args
-        tuck fill-redirection
-        dup call-CreateProcess
-        lpProcessInformation>>
-    ] with-destructors ;
-
-M: windows kill-process* ( handle -- )
-    PROCESS_INFORMATION-hProcess
-    255 TerminateProcess win32-error=0/f ;
-
-: dispose-process ( process-information -- )
-    #! From MSDN: "Handles in PROCESS_INFORMATION must be closed
-    #! with CloseHandle when they are no longer needed."
-    dup PROCESS_INFORMATION-hProcess [ CloseHandle drop ] when*
-    PROCESS_INFORMATION-hThread [ CloseHandle drop ] when* ;
-
-: exit-code ( process -- n )
-    PROCESS_INFORMATION-hProcess
-    0 <ulong> [ GetExitCodeProcess ] keep *ulong
-    swap win32-error=0/f ;
-
-: process-exited ( process -- )
-    dup handle>> exit-code
-    over handle>> dispose-process
-    notify-exit ;
-
-M: windows wait-for-processes ( -- ? )
-    processes get keys dup
-    [ handle>> PROCESS_INFORMATION-hProcess ] void*-array{ } map-as
-    [ length ] [ underlying>> ] bi 0 0
-    WaitForMultipleObjects
-    dup HEX: ffffffff = [ win32-error ] when
-    dup WAIT_TIMEOUT = [ 2drop t ] [ swap nth process-exited f ] if ;
diff --git a/basis/io/windows/launcher/tags.txt b/basis/io/windows/launcher/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/mmap/authors.txt b/basis/io/windows/mmap/authors.txt
deleted file mode 100755 (executable)
index 7c1b2f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
diff --git a/basis/io/windows/mmap/mmap.factor b/basis/io/windows/mmap/mmap.factor
deleted file mode 100644 (file)
index e5b0d10..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-USING: alien alien.c-types arrays destructors generic io.mmap
-io.ports io.windows io.windows.files io.windows.privileges
-kernel libc math math.bitwise namespaces quotations sequences
-windows windows.advapi32 windows.kernel32 io.backend system
-accessors locals ;
-IN: io.windows.mmap
-
-: create-file-mapping ( hFile lpAttributes flProtect dwMaximumSizeHigh dwMaximumSizeLow lpName -- HANDLE )
-    CreateFileMapping [ win32-error=0/f ] keep <win32-handle> ;
-
-: map-view-of-file ( hFileMappingObject dwDesiredAccess dwFileOffsetHigh dwFileOffsetLow dwNumberOfBytesToMap -- HANDLE )
-    MapViewOfFile [ win32-error=0/f ] keep ;
-
-:: mmap-open ( path length access-mode create-mode protect access -- handle handle address )
-    [let | lo [ length HEX: ffffffff bitand ]
-           hi [ length -32 shift HEX: ffffffff bitand ] |
-        { "SeCreateGlobalPrivilege" "SeLockMemoryPrivilege" } [
-            path access-mode create-mode 0 open-file |dispose
-            dup handle>> f protect hi lo f create-file-mapping |dispose
-            dup handle>> access 0 0 0 map-view-of-file
-        ] with-privileges
-    ] ;
-
-TUPLE: win32-mapped-file file mapping ;
-
-M: win32-mapped-file dispose
-    [ file>> dispose ] [ mapping>> dispose ] bi ;
-
-C: <win32-mapped-file> win32-mapped-file
-
-M: windows (mapped-file)
-    [
-        { GENERIC_WRITE GENERIC_READ } flags
-        OPEN_ALWAYS
-        { PAGE_READWRITE SEC_COMMIT } flags
-        FILE_MAP_ALL_ACCESS mmap-open
-        -rot <win32-mapped-file>
-    ] with-destructors ;
-
-M: windows close-mapped-file ( mapped-file -- )
-    [
-        [ handle>> &dispose drop ]
-        [ address>> UnmapViewOfFile win32-error=0/f ] bi
-    ] with-destructors ;
diff --git a/basis/io/windows/mmap/tags.txt b/basis/io/windows/mmap/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/nt/authors.txt b/basis/io/windows/nt/authors.txt
deleted file mode 100644 (file)
index 781acc2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Doug Coleman
-Mackenzie Straight
diff --git a/basis/io/windows/nt/backend/authors.txt b/basis/io/windows/nt/backend/authors.txt
deleted file mode 100755 (executable)
index 026f4cd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Doug Coleman
-Slava Pestov
-Mackenzie Straight
diff --git a/basis/io/windows/nt/backend/backend.factor b/basis/io/windows/nt/backend/backend.factor
deleted file mode 100644 (file)
index 8035bd6..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-USING: alien alien.c-types arrays assocs combinators
-continuations destructors io io.backend io.ports io.timeouts
-io.windows io.windows.files io.files io.buffers io.streams.c
-libc kernel math namespaces sequences threads windows
-windows.errors windows.kernel32 strings splitting qualified
-ascii system accessors locals ;
-QUALIFIED: windows.winsock
-IN: io.windows.nt.backend
-
-! Global variable with assoc mapping overlapped to threads
-SYMBOL: pending-overlapped
-
-TUPLE: io-callback port thread ;
-
-C: <io-callback> io-callback
-
-: (make-overlapped) ( -- overlapped-ext )
-    "OVERLAPPED" malloc-object &free ;
-
-: make-overlapped ( port -- overlapped-ext )
-    [ (make-overlapped) ] dip
-    handle>> ptr>> [ over set-OVERLAPPED-offset ] when* ;
-
-: <completion-port> ( handle existing -- handle )
-     f 1 CreateIoCompletionPort dup win32-error=0/f ;
-
-SYMBOL: master-completion-port
-
-: <master-completion-port> ( -- handle )
-    INVALID_HANDLE_VALUE f <completion-port> ;
-
-M: winnt add-completion ( win32-handle -- )
-    handle>> master-completion-port get-global <completion-port> drop ;
-
-: eof? ( error -- ? )
-    [ ERROR_HANDLE_EOF = ] [ ERROR_BROKEN_PIPE = ] bi or ;
-
-: twiddle-thumbs ( overlapped port -- bytes-transferred )
-    [
-        drop
-        [ pending-overlapped get-global set-at ] curry "I/O" suspend
-        {
-            { [ dup integer? ] [ ] }
-            { [ dup array? ] [
-                first dup eof?
-                [ drop 0 ] [ (win32-error-string) throw ] if
-            ] }
-        } cond
-    ] with-timeout ;
-
-:: wait-for-overlapped ( us -- bytes-transferred overlapped error? )
-    master-completion-port get-global
-    0 <int> [ ! bytes
-        f <void*> ! key
-        f <void*> [ ! overlapped
-            us [ 1000 /i ] [ INFINITE ] if* ! timeout
-            GetQueuedCompletionStatus zero?
-        ] keep *void*
-    ] keep *int spin ;
-
-: resume-callback ( result overlapped -- )
-    pending-overlapped get-global delete-at* drop resume-with ;
-
-: handle-overlapped ( us -- ? )
-    wait-for-overlapped [
-        dup [
-            [ drop GetLastError 1array ] dip resume-callback t
-        ] [ 2drop f ] if
-    ] [ resume-callback t ] if ;
-
-M: win32-handle cancel-operation
-    [ check-disposed ] [ handle>> CancelIo drop ] bi ;
-
-M: winnt io-multiplex ( us -- )
-    handle-overlapped [ 0 io-multiplex ] when ;
-
-M: winnt init-io ( -- )
-    <master-completion-port> master-completion-port set-global
-    H{ } clone pending-overlapped set-global
-    windows.winsock:init-winsock ;
-
-: file-error? ( n -- eof? )
-    zero? [
-        GetLastError {
-            { [ dup expected-io-error? ] [ drop f ] }
-            { [ dup eof? ] [ drop t ] }
-            [ (win32-error-string) throw ]
-        } cond
-    ] [ f ] if ;
-
-: wait-for-file ( FileArgs n port -- n )
-    swap file-error?
-    [ 2drop 0 ] [ [ lpOverlapped>> ] dip twiddle-thumbs ] if ;
-
-: update-file-ptr ( n port -- )
-    handle>> dup ptr>> [ rot + >>ptr drop ] [ 2drop ] if* ;
-
-: finish-write ( n port -- )
-    [ update-file-ptr ] [ buffer>> buffer-consume ] 2bi ;
-
-M: winnt (wait-to-write)
-    [
-        [ make-FileArgs dup setup-write WriteFile ]
-        [ wait-for-file ]
-        [ finish-write ]
-        tri
-    ] with-destructors ;
-
-: finish-read ( n port -- )
-    [ update-file-ptr ] [ buffer>> n>buffer ] 2bi ;
-
-M: winnt (wait-to-read) ( port -- )
-    [
-        [ make-FileArgs dup setup-read ReadFile ]
-        [ wait-for-file ]
-        [ finish-read ]
-        tri
-    ] with-destructors ;
-
-M: winnt (init-stdio) init-c-stdio ;
diff --git a/basis/io/windows/nt/backend/tags.txt b/basis/io/windows/nt/backend/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/nt/files/authors.txt b/basis/io/windows/nt/files/authors.txt
deleted file mode 100755 (executable)
index 026f4cd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Doug Coleman
-Slava Pestov
-Mackenzie Straight
diff --git a/basis/io/windows/nt/files/files-tests.factor b/basis/io/windows/nt/files/files-tests.factor
deleted file mode 100644 (file)
index 6620dd6..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-USING: io.files kernel tools.test io.backend
-io.windows.nt.files splitting sequences ;
-IN: io.windows.nt.files.tests
-
-[ f ] [ "\\foo" absolute-path? ] unit-test
-[ t ] [ "\\\\?\\c:\\foo" absolute-path? ] unit-test
-[ t ] [ "\\\\?\\c:\\" absolute-path? ] unit-test
-[ t ] [ "\\\\?\\c:" absolute-path? ] unit-test
-[ t ] [ "c:\\foo" absolute-path? ] unit-test
-[ t ] [ "c:" absolute-path? ] unit-test
-[ t ] [ "c:\\" absolute-path? ] unit-test
-[ f ] [ "/cygdrive/c/builds" absolute-path? ] unit-test
-
-[ "c:\\foo\\" ] [ "c:\\foo\\bar" parent-directory ] unit-test
-[ "c:\\" ] [ "c:\\foo\\" parent-directory ] unit-test
-[ "c:\\" ] [ "c:\\foo" parent-directory ] unit-test
-! { "c:" "c:\\" "c:/" } [ directory ] each -- all do the same thing
-[ "c:\\" ] [ "c:\\" parent-directory ] unit-test
-[ "Z:\\" ] [ "Z:\\" parent-directory ] unit-test
-[ "c:" ] [ "c:" parent-directory ] unit-test
-[ "Z:" ] [ "Z:" parent-directory ] unit-test
-
-[ f ] [ "" root-directory? ] unit-test
-[ t ] [ "\\" root-directory? ] unit-test
-[ t ] [ "\\\\" root-directory? ] unit-test
-[ t ] [ "/" root-directory? ] unit-test
-[ t ] [ "//" root-directory? ] unit-test
-[ t ] [ "c:\\" trim-right-separators root-directory? ] unit-test
-[ t ] [ "Z:\\" trim-right-separators root-directory? ] unit-test
-[ f ] [ "c:\\foo" root-directory? ] unit-test
-[ f ] [ "." root-directory? ] unit-test
-[ f ] [ ".." root-directory? ] unit-test
-[ t ] [ "\\\\?\\c:\\" root-directory? ] unit-test
-[ t ] [ "\\\\?\\c:" root-directory? ] unit-test
-[ f ] [ "\\\\?\\c:\\bar" root-directory? ] unit-test
-
-[ "\\foo\\bar" ] [ "/foo/bar" normalize-path ":" split1 nip ] unit-test
-
-[ "\\\\?\\C:\\builds\\factor\\log.txt" ] [
-    "C:\\builds\\factor\\12345\\"
-    "..\\log.txt" append-path normalize-path
-] unit-test
-
-[ "\\\\?\\C:\\builds\\" ] [
-    "C:\\builds\\factor\\12345\\"
-    "..\\.." append-path normalize-path
-] unit-test
-
-[ "\\\\?\\C:\\builds\\" ] [
-    "C:\\builds\\factor\\12345\\"
-    "..\\.." append-path normalize-path
-] unit-test
-
-[ "c:\\blah" ] [ "c:\\foo\\bar" "\\blah" append-path ] unit-test
-[ t ] [ "" resource-path 2 tail exists? ] unit-test
diff --git a/basis/io/windows/nt/files/files.factor b/basis/io/windows/nt/files/files.factor
deleted file mode 100755 (executable)
index 892a5c4..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-USING: continuations destructors io.buffers io.files io.backend
-io.timeouts io.ports io.files.private io.windows
-io.windows.files io.windows.nt.backend io.encodings.utf16n
-windows windows.kernel32 kernel libc math threads system
-environment alien.c-types alien.arrays alien.strings sequences
-combinators combinators.short-circuit ascii splitting alien
-strings assocs namespaces make accessors tr ;
-IN: io.windows.nt.files
-
-M: winnt cwd
-    MAX_UNICODE_PATH dup "ushort" <c-array>
-    [ GetCurrentDirectory win32-error=0/f ] keep
-    utf16n alien>string ;
-
-M: winnt cd
-    SetCurrentDirectory win32-error=0/f ;
-
-: unicode-prefix ( -- seq )
-    "\\\\?\\" ; inline
-
-M: winnt root-directory? ( path -- ? )
-    {
-        { [ dup empty? ] [ drop f ] }
-        { [ dup [ path-separator? ] all? ] [ drop t ] }
-        { [ dup trim-right-separators { [ length 2 = ]
-          [ second CHAR: : = ] } 1&& ] [ drop t ] }
-        { [ dup unicode-prefix head? ]
-          [ trim-right-separators length unicode-prefix length 2 + = ] }
-        [ drop f ]
-    } cond ;
-
-ERROR: not-absolute-path ;
-
-M: winnt root-directory ( string -- string' )
-    unicode-prefix ?head drop
-    dup {
-        [ length 2 >= ]
-        [ second CHAR: : = ]
-        [ first Letter? ]
-    } 1&& [ 2 head "\\" append ] [ not-absolute-path ] if ;
-
-: prepend-prefix ( string -- string' )
-    dup unicode-prefix head? [
-        unicode-prefix prepend
-    ] unless ;
-
-TR: normalize-separators "/" "\\" ;
-
-M: winnt normalize-path ( string -- string' )
-    (normalize-path)
-    normalize-separators
-    prepend-prefix ;
-
-M: winnt CreateFile-flags ( DWORD -- DWORD )
-    FILE_FLAG_OVERLAPPED bitor ;
-
-M: winnt FileArgs-overlapped ( port -- overlapped )
-    make-overlapped ;
-
-M: winnt open-append
-    [ dup file-info size>> ] [ drop 0 ] recover
-    [ (open-append) ] dip >>ptr ;
-
-M: winnt home "USERPROFILE" os-env ;
diff --git a/basis/io/windows/nt/files/tags.txt b/basis/io/windows/nt/files/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/nt/launcher/authors.txt b/basis/io/windows/nt/launcher/authors.txt
deleted file mode 100755 (executable)
index 026f4cd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Doug Coleman
-Slava Pestov
-Mackenzie Straight
diff --git a/basis/io/windows/nt/launcher/launcher-tests.factor b/basis/io/windows/nt/launcher/launcher-tests.factor
deleted file mode 100644 (file)
index cbae2f5..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-USING: io.launcher tools.test calendar accessors environment
-namespaces kernel system arrays io io.files io.encodings.ascii
-sequences parser assocs hashtables math continuations eval ;
-IN: io.windows.launcher.nt.tests
-
-[ ] [
-    <process>
-        "notepad" >>command
-        1/2 seconds >>timeout
-    "notepad" set
-] unit-test
-
-[ f ] [ "notepad" get process-running? ] unit-test
-
-[ f ] [ "notepad" get process-started? ] unit-test
-
-[ ] [ "notepad" [ run-detached ] change ] unit-test
-
-[ "notepad" get wait-for-process ] must-fail
-
-[ t ] [ "notepad" get killed>> ] unit-test
-
-[ f ] [ "notepad" get process-running? ] unit-test
-
-[ ] [
-    <process>
-        vm "-quiet" "-run=hello-world" 3array >>command
-        "out.txt" temp-file >>stdout
-    try-process
-] unit-test
-
-[ "Hello world" ] [
-    "out.txt" temp-file ascii file-lines first
-] unit-test
-
-[ ] [
-    <process>
-        vm "-run=listener" 2array >>command
-        +closed+ >>stdin
-    try-process
-] unit-test
-
-[ ] [
-    "resource:basis/io/windows/nt/launcher/test" [
-        <process>
-            vm "-script" "stderr.factor" 3array >>command
-            "out.txt" temp-file >>stdout
-            "err.txt" temp-file >>stderr
-        try-process
-    ] with-directory
-] unit-test
-
-[ "output" ] [
-    "out.txt" temp-file ascii file-lines first
-] unit-test
-
-[ "error" ] [
-    "err.txt" temp-file ascii file-lines first
-] unit-test
-
-[ ] [
-    "resource:basis/io/windows/nt/launcher/test" [
-        <process>
-            vm "-script" "stderr.factor" 3array >>command
-            "out.txt" temp-file >>stdout
-            +stdout+ >>stderr
-        try-process
-    ] with-directory
-] unit-test
-
-[ "outputerror" ] [
-    "out.txt" temp-file ascii file-lines first
-] unit-test
-
-[ "output" ] [
-    "resource:basis/io/windows/nt/launcher/test" [
-        <process>
-            vm "-script" "stderr.factor" 3array >>command
-            "err2.txt" temp-file >>stderr
-        ascii <process-reader> lines first
-    ] with-directory
-] unit-test
-
-[ "error" ] [
-    "err2.txt" temp-file ascii file-lines first
-] unit-test
-
-[ t ] [
-    "resource:basis/io/windows/nt/launcher/test" [
-        <process>
-            vm "-script" "env.factor" 3array >>command
-        ascii <process-reader> contents
-    ] with-directory eval
-
-    os-envs =
-] unit-test
-
-[ t ] [
-    "resource:basis/io/windows/nt/launcher/test" [
-        <process>
-            vm "-script" "env.factor" 3array >>command
-            +replace-environment+ >>environment-mode
-            os-envs >>environment
-        ascii <process-reader> contents
-    ] with-directory eval
-    
-    os-envs =
-] unit-test
-
-[ "B" ] [
-    "resource:basis/io/windows/nt/launcher/test" [
-        <process>
-            vm "-script" "env.factor" 3array >>command
-            { { "A" "B" } } >>environment
-        ascii <process-reader> contents
-    ] with-directory eval
-
-    "A" swap at
-] unit-test
-
-[ f ] [
-    "resource:basis/io/windows/nt/launcher/test" [
-        <process>
-            vm "-script" "env.factor" 3array >>command
-            { { "USERPROFILE" "XXX" } } >>environment
-            +prepend-environment+ >>environment-mode
-        ascii <process-reader> contents
-    ] with-directory eval
-
-    "USERPROFILE" swap at "XXX" =
-] unit-test
-
-2 [
-    [ ] [
-        <process>
-            "cmd.exe /c dir" >>command
-            "dir.txt" temp-file >>stdout
-        try-process
-    ] unit-test
-
-    [ ] [ "dir.txt" temp-file delete-file ] unit-test
-] times
-
-[ "append-test" temp-file delete-file ] ignore-errors
-
-[ "Hello appender\r\nHello appender\r\n" ] [
-    2 [
-        "resource:basis/io/windows/nt/launcher/test" [
-            <process>
-                vm "-script" "append.factor" 3array >>command
-                "append-test" temp-file <appender> >>stdout
-            try-process
-        ] with-directory
-    ] times
-   
-    "append-test" temp-file ascii file-contents
-] unit-test
diff --git a/basis/io/windows/nt/launcher/launcher.factor b/basis/io/windows/nt/launcher/launcher.factor
deleted file mode 100644 (file)
index de4fb99..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-! Copyright (C) 2007, 2008 Doug Coleman, Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types arrays continuations destructors io
-io.windows libc io.ports io.pipes windows.types math
-windows.kernel32 windows namespaces make io.launcher kernel
-sequences windows.errors assocs splitting system strings
-io.windows.launcher io.windows.files io.backend io.files
-io.files.private combinators shuffle accessors locals ;
-IN: io.windows.nt.launcher
-
-: duplicate-handle ( handle -- handle' )
-    GetCurrentProcess ! source process
-    swap ! handle
-    GetCurrentProcess ! target process
-    f <void*> [ ! target handle
-        DUPLICATE_SAME_ACCESS ! desired access
-        TRUE ! inherit handle
-        DUPLICATE_CLOSE_SOURCE ! options
-        DuplicateHandle win32-error=0/f
-    ] keep *void* ;
-
-! /dev/null simulation
-: null-input ( -- pipe )
-    (pipe) [ in>> handle>> ] [ out>> dispose ] bi ;
-
-: null-output ( -- pipe )
-    (pipe) [ in>> dispose ] [ out>> handle>> ] bi ;
-
-: null-pipe ( mode -- pipe )
-    {
-        { GENERIC_READ [ null-input ] }
-        { GENERIC_WRITE [ null-output ] }
-    } case ;
-
-! The below code is based on the example given in
-! http://msdn2.microsoft.com/en-us/library/ms682499.aspx
-
-: redirect-default ( obj access-mode create-mode -- handle )
-    3drop f ;
-
-: redirect-closed ( obj access-mode create-mode -- handle )
-    drop nip null-pipe ;
-
-:: redirect-file ( path access-mode create-mode -- handle )
-    path normalize-path
-    access-mode
-    share-mode
-    default-security-attributes
-    create-mode
-    FILE_ATTRIBUTE_NORMAL ! flags and attributes
-    f ! template file
-    CreateFile dup invalid-handle? <win32-file> &dispose handle>> ;
-
-: redirect-append ( path access-mode create-mode -- handle )
-    [ path>> ] 2dip
-    drop OPEN_ALWAYS
-    redirect-file
-    dup 0 FILE_END set-file-pointer ;
-
-: redirect-handle ( handle access-mode create-mode -- handle )
-    2drop handle>> duplicate-handle ;
-
-: redirect-stream ( stream access-mode create-mode -- handle )
-    [ underlying-handle handle>> ] 2dip redirect-handle ;
-
-: redirect ( obj access-mode create-mode -- handle )
-    {
-        { [ pick not ] [ redirect-default ] }
-        { [ pick +closed+ eq? ] [ redirect-closed ] }
-        { [ pick string? ] [ redirect-file ] }
-        { [ pick appender? ] [ redirect-append ] }
-        { [ pick win32-file? ] [ redirect-handle ] }
-        [ redirect-stream ]
-    } cond
-    dup [ dup t set-inherit ] when ;
-
-: redirect-stdout ( process args -- handle )
-    drop
-    stdout>>
-    GENERIC_WRITE
-    CREATE_ALWAYS
-    redirect
-    STD_OUTPUT_HANDLE GetStdHandle or ;
-
-: redirect-stderr ( process args -- handle )
-    over stderr>> +stdout+ eq? [
-        nip
-        lpStartupInfo>> STARTUPINFO-hStdOutput
-    ] [
-        drop
-        stderr>>
-        GENERIC_WRITE
-        CREATE_ALWAYS
-        redirect
-        STD_ERROR_HANDLE GetStdHandle or
-    ] if ;
-
-: redirect-stdin ( process args -- handle )
-    drop
-    stdin>>
-    GENERIC_READ
-    OPEN_EXISTING
-    redirect
-    STD_INPUT_HANDLE GetStdHandle or ;
-
-M: winnt fill-redirection ( process args -- )
-    [ 2dup redirect-stdout ] keep lpStartupInfo>> set-STARTUPINFO-hStdOutput
-    [ 2dup redirect-stderr ] keep lpStartupInfo>> set-STARTUPINFO-hStdError
-    [ 2dup redirect-stdin  ] keep lpStartupInfo>> set-STARTUPINFO-hStdInput
-    2drop ;
diff --git a/basis/io/windows/nt/launcher/tags.txt b/basis/io/windows/nt/launcher/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/nt/launcher/test/append.factor b/basis/io/windows/nt/launcher/test/append.factor
deleted file mode 100644 (file)
index 4c1de0c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-USE: io\r
-"Hello appender" print\r
diff --git a/basis/io/windows/nt/launcher/test/env.factor b/basis/io/windows/nt/launcher/test/env.factor
deleted file mode 100644 (file)
index 503ca7d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-USE: system
-USE: prettyprint
-USE: environment
-os-envs .
diff --git a/basis/io/windows/nt/launcher/test/stderr.factor b/basis/io/windows/nt/launcher/test/stderr.factor
deleted file mode 100644 (file)
index f22f50e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-USE: io\r
-USE: namespaces\r
-\r
-"output" write flush\r
-"error" error-stream get stream-write error-stream get stream-flush\r
diff --git a/basis/io/windows/nt/monitors/authors.txt b/basis/io/windows/nt/monitors/authors.txt
deleted file mode 100755 (executable)
index 7c1b2f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
diff --git a/basis/io/windows/nt/monitors/monitors-tests.factor b/basis/io/windows/nt/monitors/monitors-tests.factor
deleted file mode 100644 (file)
index ef36bae..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-IN: io.windows.nt.monitors.tests\r
-USING: io.windows.nt.monitors tools.test ;\r
-\r
-\ fill-queue-thread must-infer\r
diff --git a/basis/io/windows/nt/monitors/monitors.factor b/basis/io/windows/nt/monitors/monitors.factor
deleted file mode 100755 (executable)
index a2b7c4f..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-! Copyright (C) 2008 Doug Coleman, Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types alien.strings libc destructors locals
-kernel math assocs namespaces make continuations sequences
-hashtables sorting arrays combinators math.bitwise strings
-system accessors threads splitting io.backend io.windows
-io.windows.nt.backend io.windows.nt.files io.monitors io.ports
-io.buffers io.files io.timeouts io.encodings.string
-io.encodings.utf16n io windows windows.kernel32 windows.types ;
-IN: io.windows.nt.monitors
-
-: open-directory ( path -- handle )
-    normalize-path
-    FILE_LIST_DIRECTORY
-    share-mode
-    f
-    OPEN_EXISTING
-    { FILE_FLAG_BACKUP_SEMANTICS FILE_FLAG_OVERLAPPED } flags
-    f
-    CreateFile opened-file ;
-
-TUPLE: win32-monitor-port < input-port recursive ;
-
-TUPLE: win32-monitor < monitor port ;
-
-: begin-reading-changes ( port -- overlapped )
-    {
-        [ handle>> handle>> ]
-        [ buffer>> ptr>> ]
-        [ buffer>> size>> ]
-        [ recursive>> 1 0 ? ]
-    } cleave
-    FILE_NOTIFY_CHANGE_ALL
-    0 <uint>
-    (make-overlapped)
-    [ f ReadDirectoryChangesW win32-error=0/f ] keep ;
-
-: read-changes ( port -- bytes-transferred )
-    [
-        [ begin-reading-changes ] [ twiddle-thumbs ] bi
-    ] with-destructors ;
-
-: parse-action ( action -- changed )
-    {
-        { FILE_ACTION_ADDED [ +add-file+ ] }
-        { FILE_ACTION_REMOVED [ +remove-file+ ] }
-        { FILE_ACTION_MODIFIED [ +modify-file+ ] }
-        { FILE_ACTION_RENAMED_OLD_NAME [ +rename-file+ ] }
-        { FILE_ACTION_RENAMED_NEW_NAME [ +rename-file+ ] }
-        [ drop +modify-file+ ]
-    } case 1array ;
-
-: memory>u16-string ( alien len -- string )
-    memory>byte-array utf16n decode ;
-
-: parse-notify-record ( buffer -- path changed )
-    [
-        [ FILE_NOTIFY_INFORMATION-FileName ]
-        [ FILE_NOTIFY_INFORMATION-FileNameLength ]
-        bi memory>u16-string
-    ]
-    [ FILE_NOTIFY_INFORMATION-Action parse-action ] bi ;
-
-: (file-notify-records) ( buffer -- buffer )
-    dup ,
-    dup FILE_NOTIFY_INFORMATION-NextEntryOffset zero? [
-        [ FILE_NOTIFY_INFORMATION-NextEntryOffset ] keep <displaced-alien>
-        (file-notify-records)
-    ] unless ;
-
-: file-notify-records ( buffer -- seq )
-    [ (file-notify-records) drop ] { } make ;
-
-:: parse-notify-records ( monitor buffer -- )
-    buffer file-notify-records [
-        parse-notify-record
-        [ monitor path>> prepend-path normalize-path ] dip
-        monitor queue-change
-    ] each ;
-
-: fill-queue ( monitor -- )
-    dup port>> dup check-disposed
-    [ buffer>> ptr>> ] [ read-changes zero? ] bi
-    [ 2dup parse-notify-records ] unless
-    2drop ;
-
-: (fill-queue-thread) ( monitor -- )
-    dup fill-queue (fill-queue-thread) ;
-
-: fill-queue-thread ( monitor -- )
-    [ dup fill-queue (fill-queue-thread) ]
-    [ dup already-disposed? [ 2drop ] [ rethrow ] if ] recover ;
-
-M:: winnt (monitor) ( path recursive? mailbox -- monitor )
-    [
-        path normalize-path mailbox win32-monitor new-monitor
-            path open-directory \ win32-monitor-port <buffered-port>
-                recursive? >>recursive
-            >>port
-        dup [ fill-queue-thread ] curry
-        "Windows monitor thread" spawn drop
-    ] with-destructors ;
-
-M: win32-monitor dispose
-    port>> dispose ;
diff --git a/basis/io/windows/nt/monitors/tags.txt b/basis/io/windows/nt/monitors/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/nt/nt.factor b/basis/io/windows/nt/nt.factor
deleted file mode 100644 (file)
index efde4f4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-! Copyright (C) 2004, 2008 Mackenzie Straight, Doug Coleman,
-! Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: vocabs.loader io.windows io.windows.nt.backend
-io.windows.nt.files io.windows.files io.backend system ;
-
-winnt set-io-backend
diff --git a/basis/io/windows/nt/pipes/authors.txt b/basis/io/windows/nt/pipes/authors.txt
deleted file mode 100755 (executable)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/basis/io/windows/nt/pipes/pipes.factor b/basis/io/windows/nt/pipes/pipes.factor
deleted file mode 100644 (file)
index d498875..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-! Copyright (C) 2007, 2008 Doug Coleman, Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types arrays destructors io io.windows libc
-windows.types math.bitwise windows.kernel32 windows namespaces
-make kernel sequences windows.errors assocs math.parser system
-random combinators accessors io.pipes io.ports ;
-IN: io.windows.nt.pipes
-
-! This code is based on
-! http://twistedmatrix.com/trac/browser/trunk/twisted/internet/iocpreactor/process.py
-
-: create-named-pipe ( name -- handle )
-    { PIPE_ACCESS_INBOUND FILE_FLAG_OVERLAPPED } flags
-    PIPE_TYPE_BYTE
-    1
-    4096
-    4096
-    0
-    default-security-attributes
-    CreateNamedPipe opened-file ;
-
-: open-other-end ( name -- handle )
-    GENERIC_WRITE
-    { FILE_SHARE_READ FILE_SHARE_WRITE } flags
-    default-security-attributes
-    OPEN_EXISTING
-    FILE_FLAG_OVERLAPPED
-    f
-    CreateFile opened-file ;
-
-: unique-pipe-name ( -- string )
-    [
-        "\\\\.\\pipe\\factor-" %
-        pipe counter #
-        "-" %
-        32 random-bits #
-        "-" %
-        micros #
-    ] "" make ;
-
-M: winnt (pipe) ( -- pipe )
-    [
-        unique-pipe-name
-        [ create-named-pipe ] [ open-other-end ] bi
-        pipe boa
-    ] with-destructors ;
diff --git a/basis/io/windows/nt/pipes/tags.txt b/basis/io/windows/nt/pipes/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/nt/privileges/privileges.factor b/basis/io/windows/nt/privileges/privileges.factor
deleted file mode 100755 (executable)
index 264f337..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-USING: alien alien.c-types alien.syntax arrays continuations\r
-destructors generic io.mmap io.ports io.windows io.windows.files\r
-kernel libc math math.bitwise namespaces quotations sequences windows\r
-windows.advapi32 windows.kernel32 io.backend system accessors\r
-io.windows.privileges ;\r
-IN: io.windows.nt.privileges\r
-\r
-TYPEDEF: TOKEN_PRIVILEGES* PTOKEN_PRIVILEGES\r
-\r
-! Security tokens\r
-!  http://msdn.microsoft.com/msdnmag/issues/05/03/TokenPrivileges/\r
-\r
-: (open-process-token) ( handle -- handle )\r
-    { TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY } flags "PHANDLE" <c-object>\r
-    [ OpenProcessToken win32-error=0/f ] keep *void* ;\r
-\r
-: open-process-token ( -- handle )\r
-    #! remember to CloseHandle\r
-    GetCurrentProcess (open-process-token) ;\r
-\r
-: with-process-token ( quot -- )\r
-    #! quot: ( token-handle -- token-handle )\r
-    [ open-process-token ] dip\r
-    [ keep ] curry\r
-    [ CloseHandle drop ] [ ] cleanup ; inline\r
-\r
-: lookup-privilege ( string -- luid )\r
-    [ f ] dip "LUID" <c-object>\r
-    [ LookupPrivilegeValue win32-error=0/f ] keep ;\r
-\r
-: make-token-privileges ( name ? -- obj )\r
-    "TOKEN_PRIVILEGES" <c-object>\r
-    1 [ over set-TOKEN_PRIVILEGES-PrivilegeCount ] keep\r
-    "LUID_AND_ATTRIBUTES" malloc-array &free\r
-    over set-TOKEN_PRIVILEGES-Privileges\r
-\r
-    swap [\r
-        SE_PRIVILEGE_ENABLED over TOKEN_PRIVILEGES-Privileges\r
-        set-LUID_AND_ATTRIBUTES-Attributes\r
-    ] when\r
-\r
-    [ lookup-privilege ] dip\r
-    [\r
-        TOKEN_PRIVILEGES-Privileges\r
-        set-LUID_AND_ATTRIBUTES-Luid\r
-    ] keep ;\r
-\r
-M: winnt set-privilege ( name ? -- )\r
-    [\r
-        -rot 0 -rot make-token-privileges\r
-        dup length f f AdjustTokenPrivileges win32-error=0/f\r
-    ] with-process-token ;\r
diff --git a/basis/io/windows/nt/privileges/tags.txt b/basis/io/windows/nt/privileges/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/nt/sockets/authors.txt b/basis/io/windows/nt/sockets/authors.txt
deleted file mode 100755 (executable)
index 026f4cd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Doug Coleman
-Slava Pestov
-Mackenzie Straight
diff --git a/basis/io/windows/nt/sockets/sockets.factor b/basis/io/windows/nt/sockets/sockets.factor
deleted file mode 100644 (file)
index ecd9ea9..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-USING: alien alien.accessors alien.c-types byte-arrays
-continuations destructors io.ports io.timeouts io.sockets
-io.sockets io namespaces io.streams.duplex io.windows
-io.windows.sockets io.windows.nt.backend windows.winsock kernel
-libc math sequences threads system combinators accessors ;
-IN: io.windows.nt.sockets
-
-: malloc-int ( object -- object )
-    "int" heap-size malloc tuck 0 set-alien-signed-4 ; inline
-
-M: winnt WSASocket-flags ( -- DWORD )
-    WSA_FLAG_OVERLAPPED ;
-
-: get-ConnectEx-ptr ( socket -- void* )
-    SIO_GET_EXTENSION_FUNCTION_POINTER
-    WSAID_CONNECTEX
-    "GUID" heap-size
-    "void*" <c-object>
-    [
-        "void*" heap-size
-        "DWORD" <c-object>
-        f
-        f
-        WSAIoctl SOCKET_ERROR = [
-            winsock-error-string throw
-        ] when
-    ] keep *void* ;
-
-TUPLE: ConnectEx-args port
-    s name namelen lpSendBuffer dwSendDataLength
-    lpdwBytesSent lpOverlapped ptr ;
-
-: wait-for-socket ( args -- n )
-    [ lpOverlapped>> ] [ port>> ] bi twiddle-thumbs ; inline
-
-: <ConnectEx-args> ( sockaddr size -- ConnectEx )
-    ConnectEx-args new
-        swap >>namelen
-        swap >>name
-        f >>lpSendBuffer
-        0 >>dwSendDataLength
-        f >>lpdwBytesSent
-        (make-overlapped) >>lpOverlapped ; inline
-
-: call-ConnectEx ( ConnectEx -- )
-    {
-        [ s>> ]
-        [ name>> ]
-        [ namelen>> ]
-        [ lpSendBuffer>> ]
-        [ dwSendDataLength>> ]
-        [ lpdwBytesSent>> ]
-        [ lpOverlapped>> ]
-        [ ptr>> ]
-    } cleave
-    "int"
-    { "SOCKET" "sockaddr_in*" "int" "PVOID" "DWORD" "LPDWORD" "void*" }
-    "stdcall" alien-indirect drop
-    winsock-error-string [ throw ] when* ; inline
-
-M: object establish-connection ( client-out remote -- )
-    make-sockaddr/size <ConnectEx-args>
-        swap >>port
-        dup port>> handle>> handle>> >>s
-        dup s>> get-ConnectEx-ptr >>ptr
-        dup call-ConnectEx
-        wait-for-socket drop ;
-
-TUPLE: AcceptEx-args port
-    sListenSocket sAcceptSocket lpOutputBuffer dwReceiveDataLength
-    dwLocalAddressLength dwRemoteAddressLength lpdwBytesReceived lpOverlapped ;
-
-: init-accept-buffer ( addr AcceptEx -- )
-    swap sockaddr-size 16 +
-        [ >>dwLocalAddressLength ] [ >>dwRemoteAddressLength ] bi
-        dup dwLocalAddressLength>> 2 * malloc &free >>lpOutputBuffer
-        drop ; inline
-
-: <AcceptEx-args> ( server addr -- AcceptEx )
-    AcceptEx-args new
-        2dup init-accept-buffer
-        swap SOCK_STREAM open-socket |dispose handle>> >>sAcceptSocket
-        over handle>> handle>> >>sListenSocket
-        swap >>port
-        0 >>dwReceiveDataLength
-        f >>lpdwBytesReceived
-        (make-overlapped) >>lpOverlapped ; inline
-
-: call-AcceptEx ( AcceptEx -- )
-    {
-        [ sListenSocket>> ]
-        [ sAcceptSocket>> ]
-        [ lpOutputBuffer>> ]
-        [ dwReceiveDataLength>> ]
-        [ dwLocalAddressLength>> ]
-        [ dwRemoteAddressLength>> ]
-        [ lpdwBytesReceived>> ]
-        [ lpOverlapped>> ]
-    } cleave AcceptEx drop
-    winsock-error-string [ throw ] when* ; inline
-
-: extract-remote-address ( AcceptEx -- sockaddr )
-    {
-        [ lpOutputBuffer>> ]
-        [ dwReceiveDataLength>> ]
-        [ dwLocalAddressLength>> ]
-        [ dwRemoteAddressLength>> ]
-    } cleave
-    f <void*>
-    0 <int>
-    f <void*>
-    [ 0 <int> GetAcceptExSockaddrs ] keep *void* ; inline
-
-M: object (accept) ( server addr -- handle sockaddr )
-    [
-        <AcceptEx-args>
-        {
-            [ call-AcceptEx ]
-            [ wait-for-socket drop ]
-            [ sAcceptSocket>> <win32-socket> ]
-            [ extract-remote-address ]
-        } cleave
-    ] with-destructors ;
-
-TUPLE: WSARecvFrom-args port
-       s lpBuffers dwBufferCount lpNumberOfBytesRecvd
-       lpFlags lpFrom lpFromLen lpOverlapped lpCompletionRoutine ;
-
-: make-receive-buffer ( -- WSABUF )
-    "WSABUF" malloc-object &free
-    default-buffer-size get over set-WSABUF-len
-    default-buffer-size get malloc &free over set-WSABUF-buf ; inline
-
-: <WSARecvFrom-args> ( datagram -- WSARecvFrom )
-    WSARecvFrom-args new
-        swap >>port
-        dup port>> handle>> handle>> >>s
-        dup port>> addr>> sockaddr-size
-            [ malloc &free >>lpFrom ]
-            [ malloc-int &free >>lpFromLen ] bi
-        make-receive-buffer >>lpBuffers
-        1 >>dwBufferCount
-        0 malloc-int &free >>lpFlags
-        0 malloc-int &free >>lpNumberOfBytesRecvd
-        (make-overlapped) >>lpOverlapped ; inline
-
-: call-WSARecvFrom ( WSARecvFrom -- )
-    {
-        [ s>> ]
-        [ lpBuffers>> ]
-        [ dwBufferCount>> ]
-        [ lpNumberOfBytesRecvd>> ]
-        [ lpFlags>> ]
-        [ lpFrom>> ]
-        [ lpFromLen>> ]
-        [ lpOverlapped>> ]
-        [ lpCompletionRoutine>> ]
-    } cleave WSARecvFrom socket-error* ; inline
-
-: parse-WSARecvFrom ( n WSARecvFrom -- packet sockaddr )
-    [ lpBuffers>> WSABUF-buf swap memory>byte-array ]
-    [ [ lpFrom>> ] [ lpFromLen>> *int ] bi memory>byte-array ] bi ; inline
-
-M: winnt (receive) ( datagram -- packet addrspec )
-    [
-        <WSARecvFrom-args>
-        [ call-WSARecvFrom ]
-        [ wait-for-socket ]
-        [ parse-WSARecvFrom ]
-        tri
-    ] with-destructors ;
-
-TUPLE: WSASendTo-args port
-       s lpBuffers dwBufferCount lpNumberOfBytesSent
-       dwFlags lpTo iToLen lpOverlapped lpCompletionRoutine ;
-
-: make-send-buffer ( packet -- WSABUF )
-    "WSABUF" malloc-object &free
-    [ [ malloc-byte-array &free ] dip set-WSABUF-buf ]
-    [ [ length ] dip set-WSABUF-len ]
-    [ nip ]
-    2tri ; inline
-
-: <WSASendTo-args> ( packet addrspec datagram -- WSASendTo )
-    WSASendTo-args new
-        swap >>port
-        dup port>> handle>> handle>> >>s
-        swap make-sockaddr/size
-            [ malloc-byte-array &free ] dip
-            [ >>lpTo ] [ >>iToLen ] bi*
-        swap make-send-buffer >>lpBuffers
-        1 >>dwBufferCount
-        0 >>dwFlags
-        0 <uint> >>lpNumberOfBytesSent
-        (make-overlapped) >>lpOverlapped ; inline
-
-: call-WSASendTo ( WSASendTo -- )
-    {
-        [ s>> ]
-        [ lpBuffers>> ]
-        [ dwBufferCount>> ]
-        [ lpNumberOfBytesSent>> ]
-        [ dwFlags>> ]
-        [ lpTo>> ]
-        [ iToLen>> ]
-        [ lpOverlapped>> ]
-        [ lpCompletionRoutine>> ]
-    } cleave WSASendTo socket-error* ; inline
-
-M: winnt (send) ( packet addrspec datagram -- )
-    [
-        <WSASendTo-args>
-        [ call-WSASendTo ]
-        [ wait-for-socket drop ]
-        bi
-    ] with-destructors ;
diff --git a/basis/io/windows/nt/sockets/tags.txt b/basis/io/windows/nt/sockets/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/nt/summary.txt b/basis/io/windows/nt/summary.txt
deleted file mode 100644 (file)
index 0e1b3e2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Microsoft Windows XP/Vista native I/O implementation
diff --git a/basis/io/windows/nt/tags.txt b/basis/io/windows/nt/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/privileges/privileges.factor b/basis/io/windows/privileges/privileges.factor
deleted file mode 100644 (file)
index e169bdf..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-USING: io.backend kernel continuations sequences\r
-system vocabs.loader combinators ;\r
-IN: io.windows.privileges\r
-\r
-HOOK: set-privilege io-backend ( name ? -- ) inline\r
-\r
-: with-privileges ( seq quot -- )\r
-    over [ [ t set-privilege ] each ] curry compose\r
-    swap [ [ f set-privilege ] each ] curry [ ] cleanup ; inline\r
-\r
-{\r
-    { [ os winnt? ] [ "io.windows.nt.privileges" require ] }\r
-    { [ os wince? ] [ "io.windows.ce.privileges" require ] }\r
-} cond\r
diff --git a/basis/io/windows/privileges/tags.txt b/basis/io/windows/privileges/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/sockets/sockets.factor b/basis/io/windows/sockets/sockets.factor
deleted file mode 100644 (file)
index 809af60..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-USING: kernel accessors io.sockets io.windows io.backend\r
-windows.winsock system destructors alien.c-types ;\r
-IN: io.windows.sockets\r
-\r
-HOOK: WSASocket-flags io-backend ( -- DWORD )\r
-\r
-TUPLE: win32-socket < win32-file ;\r
-\r
-: <win32-socket> ( handle -- win32-socket )\r
-    win32-socket new-win32-handle ;\r
-\r
-M: win32-socket dispose ( stream -- )\r
-    handle>> closesocket drop ;\r
-\r
-: unspecific-sockaddr/size ( addrspec -- sockaddr len )\r
-    [ empty-sockaddr/size ] [ protocol-family ] bi\r
-    pick set-sockaddr-in-family ;\r
-\r
-: opened-socket ( handle -- win32-socket )\r
-    <win32-socket> |dispose dup add-completion ;\r
-\r
-: open-socket ( addrspec type -- win32-socket )\r
-    [ protocol-family ] dip\r
-    0 f 0 WSASocket-flags WSASocket\r
-    dup socket-error\r
-    opened-socket ;\r
-\r
-M: object (get-local-address) ( socket addrspec -- sockaddr )\r
-    [ handle>> ] dip empty-sockaddr/size <int>\r
-    [ getsockname socket-error ] 2keep drop ;\r
-\r
-M: object (get-remote-address) ( socket addrspec -- sockaddr )\r
-    [ handle>> ] dip empty-sockaddr/size <int>\r
-    [ getpeername socket-error ] 2keep drop ;\r
-\r
-: bind-socket ( win32-socket sockaddr len -- )\r
-    [ handle>> ] 2dip bind socket-error ;\r
-\r
-M: object ((client)) ( addrspec -- handle )\r
-    [ SOCK_STREAM open-socket ] keep\r
-    [ unspecific-sockaddr/size bind-socket ] [ drop ] 2bi ;\r
-\r
-: server-socket ( addrspec type -- fd )\r
-    [ open-socket ] [ drop ] 2bi\r
-    [ make-sockaddr/size bind-socket ] [ drop ] 2bi ;\r
-\r
-! http://support.microsoft.com/kb/127144\r
-! NOTE: Possibly tweak this because of SYN flood attacks\r
-: listen-backlog ( -- n ) HEX: 7fffffff ; inline\r
-\r
-M: object (server) ( addrspec -- handle )\r
-    [\r
-        SOCK_STREAM server-socket\r
-        dup handle>> listen-backlog listen winsock-return-check\r
-    ] with-destructors ;\r
-\r
-M: windows (datagram) ( addrspec -- handle )\r
-    [ SOCK_DGRAM server-socket ] with-destructors ;\r
-\r
-M: windows addrinfo-error ( n -- )\r
-    winsock-return-check ;\r
diff --git a/basis/io/windows/sockets/tags.txt b/basis/io/windows/sockets/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/summary.txt b/basis/io/windows/summary.txt
deleted file mode 100644 (file)
index 2a2d544..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Microsoft Windows native I/O implementation
diff --git a/basis/io/windows/tags.txt b/basis/io/windows/tags.txt
deleted file mode 100755 (executable)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/io/windows/windows.factor b/basis/io/windows/windows.factor
deleted file mode 100755 (executable)
index 94304ed..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-! Copyright (C) 2004, 2008 Mackenzie Straight, Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types arrays destructors io io.backend
-io.buffers io.files io.ports io.binary io.timeouts
-windows.errors strings kernel math namespaces sequences windows
-windows.kernel32 windows.shell32 windows.types windows.winsock
-splitting continuations math.bitwise system accessors ;
-IN: io.windows
-
-: set-inherit ( handle ? -- )
-    [ HANDLE_FLAG_INHERIT ] dip
-    >BOOLEAN SetHandleInformation win32-error=0/f ;
-
-TUPLE: win32-handle handle disposed ;
-
-: new-win32-handle ( handle class -- win32-handle )
-    new swap [ >>handle ] [ f set-inherit ] bi ;
-
-: <win32-handle> ( handle -- win32-handle )
-    win32-handle new-win32-handle ;
-
-M: win32-handle dispose* ( handle -- )
-    handle>> CloseHandle drop ;
-
-TUPLE: win32-file < win32-handle ptr ;
-
-: <win32-file> ( handle -- win32-file )
-    win32-file new-win32-handle ;
-
-M: win32-file dispose
-    dup disposed>> [ drop ] [
-        [ cancel-operation ] [ call-next-method ] bi
-    ] if ;
-
-HOOK: CreateFile-flags io-backend ( DWORD -- DWORD )
-HOOK: FileArgs-overlapped io-backend ( port -- overlapped/f )
-HOOK: add-completion io-backend ( port -- )
-
-: opened-file ( handle -- win32-file )
-    dup invalid-handle?
-    <win32-file> |dispose
-    dup add-completion ;
-
-: share-mode ( -- fixnum )
-    {
-        FILE_SHARE_READ
-        FILE_SHARE_WRITE
-        FILE_SHARE_DELETE
-    } flags ; foldable
-
-: default-security-attributes ( -- obj )
-    "SECURITY_ATTRIBUTES" <c-object>
-    "SECURITY_ATTRIBUTES" heap-size
-    over set-SECURITY_ATTRIBUTES-nLength ;
index b92eeb12502ac8f6c0962581418ad0e750145488..ebbb0f3786ca496fe012076a1e0d389af417c468 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
-USING: lcs html.elements kernel qualified ;
+USING: lcs html.elements kernel ;
 FROM: accessors => item>> ;
 FROM: io => write ;
 FROM: sequences => each if-empty ;
index 759e923a34b8eae56f203e9e68705864198dbff5..8c67590697a603698d9a9ac48736efce9204ca57 100644 (file)
@@ -5,7 +5,7 @@ IN: lcs
 \r
 <PRIVATE\r
 : levenshtein-step ( insert delete change same? -- next )\r
-    0 1 ? + >r [ 1+ ] bi@ r> min min ;\r
+    0 1 ? + [ [ 1+ ] bi@ ] dip min min ;\r
 \r
 : lcs-step ( insert delete change same? -- next )\r
     1 -1./0. ? + max max ; ! -1./0. is -inf (float)\r
index e681bac3145061290e42d2f3ca7c3e2d57494c00..61aa3239245824e73b0735f4defc59a8981ffe03 100644 (file)
@@ -1,6 +1,6 @@
 USING: io io.streams.string io.streams.duplex listener
 tools.test parser math namespaces continuations vocabs kernel
-compiler.units eval ;
+compiler.units eval vocabs.parser ;
 IN: listener.tests
 
 : hello "Hi" print ; parsing
index f60403055e563cbad7ee910f30e0a447b972c963..88a90b72e21f92bd3c45456a8adca6e886ee347b 100644 (file)
@@ -4,7 +4,7 @@ USING: arrays hashtables io kernel math math.parser memory
 namespaces parser lexer sequences strings io.styles
 vectors words generic system combinators continuations debugger
 definitions compiler.units accessors colors prettyprint fry
-sets ;
+sets vocabs.parser ;
 IN: listener
 
 GENERIC: stream-read-quot ( stream -- quot/f )
index ece5c1d20021617643364ccacc569c77fc8ccc9e..1c1f288797924b5428463c32733c5ff0814ee100 100644 (file)
@@ -3,6 +3,6 @@
 USING: slots.private ;
 IN: locals.backend
 
-: local-value 2 slot ; inline
+: local-value ( box -- value ) 2 slot ; inline
 
-: set-local-value 2 set-slot ; inline
+: set-local-value ( value box -- ) 2 set-slot ; inline
index b5c201a5d9887860052c952f05178babca06e715..e7f0b74194b7f17a21cbdce34401fa4bbb33027f 100644 (file)
@@ -2,7 +2,7 @@ USING: locals math sequences tools.test hashtables words kernel
 namespaces arrays strings prettyprint io.streams.string parser
 accessors generic eval combinators combinators.short-circuit
 combinators.short-circuit.smart math.order math.functions
-definitions compiler.units fry lexer ;
+definitions compiler.units fry lexer words.symbol ;
 IN: locals.tests
 
 :: foo ( a b -- a a ) a a ;
index e6ab6c003c700d8a572561cfe5dbd99e95e026e0..c5b34556bcf9bce20faa3005729667fefb8fe4ca 100644 (file)
@@ -3,7 +3,7 @@
 USING: accessors arrays combinators effects.parser
 generic.parser kernel lexer locals.errors
 locals.rewrite.closures locals.types make namespaces parser
-quotations sequences splitting words ;
+quotations sequences splitting words vocabs.parser ;
 IN: locals.parser
 
 : make-local ( name -- word )
index bd322bfff32f102ececdca7b2bb0dafe5c1921d6..33e0f4d3b330d2b7ed8bf45952c2b2ec52402ef7 100644 (file)
@@ -30,7 +30,10 @@ M: local-writer localize
     read-local-quot [ set-local-value ] append ;
 
 M: def localize
-    local>> [ prefix ] [ local-reader? [ 1array >r ] [ >r ] ? ] bi ;
+    local>>
+    [ prefix ]
+    [ local-reader? [ 1array load-local ] [ load-local ] ? ]
+    bi ;
 
 M: object localize 1quotation ;
 
index 05b1e2345e687160e5a5a37a68cae8098e4d7369..835fa6e421818b5dc36c58cbef94d758b6166be1 100644 (file)
@@ -101,7 +101,7 @@ M: hashtable rewrite-sugar* rewrite-element ;
 M: wrapper rewrite-sugar* rewrite-element ;
 
 M: word rewrite-sugar*
-    dup { >r r> load-locals get-local drop-locals } memq?
+    dup { load-locals get-local drop-locals } memq?
     [ >r/r>-in-lambda-error ] [ call-next-method ] if ;
 
 M: object rewrite-sugar* , ;
index 7c1db5b7c0ca85cbddc3db4b7c830e47466e5c50..91baae631f507dfdeea5f92fac3c954e3d1762cd 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.\r
 USING: logging.analysis logging.server logging smtp kernel\r
 io.files io.streams.string namespaces make alarms assocs\r
-io.encodings.utf8 accessors calendar sequences qualified ;\r
+io.encodings.utf8 accessors calendar sequences ;\r
 QUALIFIED: io.sockets\r
 IN: logging.insomniac\r
 \r
index 47de8805598411d4423597c7b38089b5ad5f6c65..fb6b32899078dfc67d8736bf516a1c3859241390 100644 (file)
@@ -4,7 +4,7 @@ USING: logging.server sequences namespaces concurrency.messaging
 words kernel arrays shuffle tools.annotations\r
 prettyprint.config prettyprint debugger io.streams.string\r
 splitting continuations effects generalizations parser strings\r
-quotations fry symbols accessors ;\r
+quotations fry accessors ;\r
 IN: logging\r
 \r
 SYMBOLS: DEBUG NOTICE WARNING ERROR CRITICAL ;\r
index 1872bb0af2045b8646b6186d360d2cbb4319df7a..68f8d74571eb9d016e5133db6baa737a29957c66 100644 (file)
@@ -1,10 +1,10 @@
 ! Copyright (C) 2008 Slava Pestov.\r
 ! See http://factorcode.org/license.txt for BSD license.\r
-USING: namespaces kernel io calendar sequences io.files\r
-io.sockets continuations destructors prettyprint assocs\r
-math.parser words debugger math combinators\r
-concurrency.messaging threads arrays init math.ranges strings\r
-calendar.format io.encodings.utf8 ;\r
+USING: namespaces kernel io io.files io.pathnames io.directories\r
+io.sockets io.encodings.utf8\r
+calendar calendar.format sequences continuations destructors\r
+prettyprint assocs math.parser words debugger math combinators\r
+concurrency.messaging threads arrays init math.ranges strings ;\r
 IN: logging.server\r
 \r
 : log-root ( -- string )\r
index 7d393dadc9a2bab92567ec252275d2009915e97c..fee06686b8ffe68f39d60b6a71e425716ccedfd9 100644 (file)
@@ -47,7 +47,7 @@ MACRO: match-cond ( assoc -- )
     [ "Fall-through in match-cond" throw ]
     [
         first2
-        >r [ dupd match ] curry r>
+        [ [ dupd match ] curry ] dip
         [ bind ] curry rot
         [ ?if ] 2curry append
     ] reduce ;
old mode 100644 (file)
new mode 100755 (executable)
index 89a21b6..2c03164
@@ -66,7 +66,10 @@ DEFER: byte-bit-count
 \ byte-bit-count
 256 [
     0 swap [ [ 1+ ] when ] each-bit
-] B{ } map-as '[ HEX: ff bitand _ nth-unsafe ] define-inline
+] B{ } map-as '[ HEX: ff bitand _ nth-unsafe ]
+(( byte -- table )) define-declared
+
+\ byte-bit-count make-inline
 
 >>
 
diff --git a/basis/math/blas/cblas/authors.txt b/basis/math/blas/cblas/authors.txt
new file mode 100644 (file)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/basis/math/blas/cblas/cblas.factor b/basis/math/blas/cblas/cblas.factor
new file mode 100644 (file)
index 0000000..4c0a88f
--- /dev/null
@@ -0,0 +1,559 @@
+USING: alien alien.c-types alien.syntax kernel system combinators ;
+IN: math.blas.cblas
+
+<< "cblas" {
+    { [ os macosx? ] [ "libblas.dylib" "cdecl" add-library ] }
+    { [ os windows? ] [ "blas.dll" "cdecl" add-library ] }
+    { [ os openbsd? ] [ "libcblas.so" "cdecl" add-library ] }
+    { [ os freebsd? ] [ "libcblas.so" "cdecl" add-library ] }
+    [ "libblas.so" "cdecl" add-library ]
+} cond >>
+
+LIBRARY: cblas
+
+TYPEDEF: int CBLAS_ORDER
+: CblasRowMajor 101 ; inline
+: CblasColMajor 102 ; inline
+
+TYPEDEF: int CBLAS_TRANSPOSE
+: CblasNoTrans   111 ; inline
+: CblasTrans     112 ; inline
+: CblasConjTrans 113 ; inline
+
+TYPEDEF: int CBLAS_UPLO
+: CblasUpper 121 ; inline
+: CblasLower 122 ; inline
+
+TYPEDEF: int CBLAS_DIAG
+: CblasNonUnit 131 ; inline
+: CblasUnit    132 ; inline
+
+TYPEDEF: int CBLAS_SIDE
+: CblasLeft  141 ; inline
+: CblasRight 142 ; inline
+
+TYPEDEF: int CBLAS_INDEX
+
+C-STRUCT: float-complex
+    { "float" "real" }
+    { "float" "imag" } ;
+C-STRUCT: double-complex
+    { "double" "real" }
+    { "double" "imag" } ;
+
+! Level 1 BLAS (scalar-vector and vector-vector)
+
+FUNCTION: float  cblas_sdsdot
+    ( int N, float    alpha, float*   X, int incX, float*   Y, int incY ) ;
+FUNCTION: double cblas_dsdot
+    ( int N,                 float*   X, int incX, float*   Y, int incY ) ;
+FUNCTION: float  cblas_sdot
+    ( int N,                 float*   X, int incX, float*   Y, int incY ) ;
+FUNCTION: double cblas_ddot
+    ( int N,                 double*  X, int incX, double*  Y, int incY ) ;
+
+FUNCTION: void   cblas_cdotu_sub
+    ( int N,                 void*    X, int incX, void*    Y, int incY, void*    dotu ) ;
+FUNCTION: void   cblas_cdotc_sub
+    ( int N,                 void*    X, int incX, void*    Y, int incY, void*    dotc ) ;
+
+FUNCTION: void   cblas_zdotu_sub
+    ( int N,                 void*    X, int incX, void*    Y, int incY, void*    dotu ) ;
+FUNCTION: void   cblas_zdotc_sub
+    ( int N,                 void*    X, int incX, void*    Y, int incY, void*    dotc ) ;
+
+FUNCTION: float  cblas_snrm2
+    ( int N,                 float*   X, int incX ) ;
+FUNCTION: float  cblas_sasum
+    ( int N,                 float*   X, int incX ) ;
+
+FUNCTION: double cblas_dnrm2
+    ( int N,                 double*  X, int incX ) ;
+FUNCTION: double cblas_dasum
+    ( int N,                 double*  X, int incX ) ;
+
+FUNCTION: float  cblas_scnrm2
+    ( int N,                 void*    X, int incX ) ;
+FUNCTION: float  cblas_scasum
+    ( int N,                 void*    X, int incX ) ;
+
+FUNCTION: double cblas_dznrm2
+    ( int N,                 void*    X, int incX ) ;
+FUNCTION: double cblas_dzasum
+    ( int N,                 void*    X, int incX ) ;
+
+FUNCTION: CBLAS_INDEX cblas_isamax
+    ( int N,                 float*   X, int incX ) ;
+FUNCTION: CBLAS_INDEX cblas_idamax
+    ( int N,                 double*  X, int incX ) ;
+FUNCTION: CBLAS_INDEX cblas_icamax
+    ( int N,                 void*    X, int incX ) ;
+FUNCTION: CBLAS_INDEX cblas_izamax
+    ( int N,                 void*    X, int incX ) ;
+
+FUNCTION: void cblas_sswap
+    ( int N,                 float*   X, int incX, float*   Y, int incY ) ;
+FUNCTION: void cblas_scopy
+    ( int N,                 float*   X, int incX, float*   Y, int incY ) ;
+FUNCTION: void cblas_saxpy
+    ( int N, float    alpha, float*   X, int incX, float*   Y, int incY ) ;
+
+FUNCTION: void cblas_dswap
+    ( int N,                 double*  X, int incX, double*  Y, int incY ) ;
+FUNCTION: void cblas_dcopy
+    ( int N,                 double*  X, int incX, double*  Y, int incY ) ;
+FUNCTION: void cblas_daxpy
+    ( int N, double   alpha, double*  X, int incX, double*  Y, int incY ) ;
+
+FUNCTION: void cblas_cswap
+    ( int N,                 void*    X, int incX, void*    Y, int incY ) ;
+FUNCTION: void cblas_ccopy
+    ( int N,                 void*    X, int incX, void*    Y, int incY ) ;
+FUNCTION: void cblas_caxpy
+    ( int N, void*    alpha, void*    X, int incX, void*    Y, int incY ) ;
+
+FUNCTION: void cblas_zswap
+    ( int N,                 void*    X, int incX, void*    Y, int incY ) ;
+FUNCTION: void cblas_zcopy
+    ( int N,                 void*    X, int incX, void*    Y, int incY ) ;
+FUNCTION: void cblas_zaxpy
+    ( int N, void*    alpha, void*    X, int incX, void*    Y, int incY ) ;
+
+FUNCTION: void cblas_sscal
+    ( int N, float    alpha, float*   X, int incX ) ;
+FUNCTION: void cblas_dscal
+    ( int N, double   alpha, double*  X, int incX ) ;
+FUNCTION: void cblas_cscal
+    ( int N, void*    alpha, void*    X, int incX ) ;
+FUNCTION: void cblas_zscal
+    ( int N, void*    alpha, void*    X, int incX ) ;
+FUNCTION: void cblas_csscal
+    ( int N, float    alpha, void*    X, int incX ) ;
+FUNCTION: void cblas_zdscal
+    ( int N, double   alpha, void*    X, int incX ) ;
+
+FUNCTION: void cblas_srotg
+    ( float* a, float* b, float* c, float* s ) ;
+FUNCTION: void cblas_srotmg
+    ( float* d1, float* d2, float* b1, float b2, float* P ) ;
+FUNCTION: void cblas_srot
+    ( int N, float* X, int incX, float* Y, int incY, float c, float s ) ;
+FUNCTION: void cblas_srotm
+    ( int N, float* X, int incX, float* Y, int incY, float* P ) ;
+
+FUNCTION: void cblas_drotg
+    ( double* a, double* b, double* c, double* s ) ;
+FUNCTION: void cblas_drotmg
+    ( double* d1, double* d2, double* b1, double b2, double* P ) ;
+FUNCTION: void cblas_drot
+    ( int N, double* X, int incX, double* Y, int incY, double c, double s ) ;
+FUNCTION: void cblas_drotm
+    ( int N, double* X, int incX, double* Y, int incY, double* P ) ;
+! Level 2 BLAS (matrix-vector)
+
+FUNCTION: void cblas_sgemv ( CBLAS_ORDER Order,
+                 CBLAS_TRANSPOSE TransA, int M, int N,
+                 float alpha, float* A, int lda,
+                 float* X, int incX, float beta,
+                 float* Y, int incY ) ;
+FUNCTION: void cblas_sgbmv ( CBLAS_ORDER Order,
+                 CBLAS_TRANSPOSE TransA, int M, int N,
+                 int KL, int KU, float alpha,
+                 float* A, int lda, float* X,
+                 int incX, float beta, float* Y, int incY ) ;
+FUNCTION: void cblas_strmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, float* A, int lda,
+                 float* X, int incX ) ;
+FUNCTION: void cblas_stbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, int K, float* A, int lda,
+                 float* X, int incX ) ;
+FUNCTION: void cblas_stpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, float* Ap, float* X, int incX ) ;
+FUNCTION: void cblas_strsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, float* A, int lda, float* X,
+                 int incX ) ;
+FUNCTION: void cblas_stbsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, int K, float* A, int lda,
+                 float* X, int incX ) ;
+FUNCTION: void cblas_stpsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, float* Ap, float* X, int incX ) ;
+
+FUNCTION: void cblas_dgemv ( CBLAS_ORDER Order,
+                 CBLAS_TRANSPOSE TransA, int M, int N,
+                 double alpha, double* A, int lda,
+                 double* X, int incX, double beta,
+                 double* Y, int incY ) ;
+FUNCTION: void cblas_dgbmv ( CBLAS_ORDER Order,
+                 CBLAS_TRANSPOSE TransA, int M, int N,
+                 int KL, int KU, double alpha,
+                 double* A, int lda, double* X,
+                 int incX, double beta, double* Y, int incY ) ;
+FUNCTION: void cblas_dtrmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, double* A, int lda,
+                 double* X, int incX ) ;
+FUNCTION: void cblas_dtbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, int K, double* A, int lda,
+                 double* X, int incX ) ;
+FUNCTION: void cblas_dtpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, double* Ap, double* X, int incX ) ;
+FUNCTION: void cblas_dtrsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, double* A, int lda, double* X,
+                 int incX ) ;
+FUNCTION: void cblas_dtbsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, int K, double* A, int lda,
+                 double* X, int incX ) ;
+FUNCTION: void cblas_dtpsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, double* Ap, double* X, int incX ) ;
+
+FUNCTION: void cblas_cgemv ( CBLAS_ORDER Order,
+                 CBLAS_TRANSPOSE TransA, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* X, int incX, void* beta,
+                 void* Y, int incY ) ;
+FUNCTION: void cblas_cgbmv ( CBLAS_ORDER Order,
+                 CBLAS_TRANSPOSE TransA, int M, int N,
+                 int KL, int KU, void* alpha,
+                 void* A, int lda, void* X,
+                 int incX, void* beta, void* Y, int incY ) ;
+FUNCTION: void cblas_ctrmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, void* A, int lda,
+                 void* X, int incX ) ;
+FUNCTION: void cblas_ctbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, int K, void* A, int lda,
+                 void* X, int incX ) ;
+FUNCTION: void cblas_ctpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, void* Ap, void* X, int incX ) ;
+FUNCTION: void cblas_ctrsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, void* A, int lda, void* X,
+                 int incX ) ;
+FUNCTION: void cblas_ctbsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, int K, void* A, int lda,
+                 void* X, int incX ) ;
+FUNCTION: void cblas_ctpsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, void* Ap, void* X, int incX ) ;
+
+FUNCTION: void cblas_zgemv ( CBLAS_ORDER Order,
+                 CBLAS_TRANSPOSE TransA, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* X, int incX, void* beta,
+                 void* Y, int incY ) ;
+FUNCTION: void cblas_zgbmv ( CBLAS_ORDER Order,
+                 CBLAS_TRANSPOSE TransA, int M, int N,
+                 int KL, int KU, void* alpha,
+                 void* A, int lda, void* X,
+                 int incX, void* beta, void* Y, int incY ) ;
+FUNCTION: void cblas_ztrmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, void* A, int lda,
+                 void* X, int incX ) ;
+FUNCTION: void cblas_ztbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, int K, void* A, int lda,
+                 void* X, int incX ) ;
+FUNCTION: void cblas_ztpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, void* Ap, void* X, int incX ) ;
+FUNCTION: void cblas_ztrsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, void* A, int lda, void* X,
+                 int incX ) ;
+FUNCTION: void cblas_ztbsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, int K, void* A, int lda,
+                 void* X, int incX ) ;
+FUNCTION: void cblas_ztpsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
+                 int N, void* Ap, void* X, int incX ) ;
+
+
+FUNCTION: void cblas_ssymv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, float alpha, float* A,
+                 int lda, float* X, int incX,
+                 float beta, float* Y, int incY ) ;
+FUNCTION: void cblas_ssbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, int K, float alpha, float* A,
+                 int lda, float* X, int incX,
+                 float beta, float* Y, int incY ) ;
+FUNCTION: void cblas_sspmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, float alpha, float* Ap,
+                 float* X, int incX,
+                 float beta, float* Y, int incY ) ;
+FUNCTION: void cblas_sger ( CBLAS_ORDER Order, int M, int N,
+                float alpha, float* X, int incX,
+                float* Y, int incY, float* A, int lda ) ;
+FUNCTION: void cblas_ssyr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, float alpha, float* X,
+                int incX, float* A, int lda ) ;
+FUNCTION: void cblas_sspr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, float alpha, float* X,
+                int incX, float* Ap ) ;
+FUNCTION: void cblas_ssyr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, float alpha, float* X,
+                int incX, float* Y, int incY, float* A,
+                int lda ) ;
+FUNCTION: void cblas_sspr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, float alpha, float* X,
+                int incX, float* Y, int incY, float* A ) ;
+
+FUNCTION: void cblas_dsymv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, double alpha, double* A,
+                 int lda, double* X, int incX,
+                 double beta, double* Y, int incY ) ;
+FUNCTION: void cblas_dsbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, int K, double alpha, double* A,
+                 int lda, double* X, int incX,
+                 double beta, double* Y, int incY ) ;
+FUNCTION: void cblas_dspmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, double alpha, double* Ap,
+                 double* X, int incX,
+                 double beta, double* Y, int incY ) ;
+FUNCTION: void cblas_dger ( CBLAS_ORDER Order, int M, int N,
+                double alpha, double* X, int incX,
+                double* Y, int incY, double* A, int lda ) ;
+FUNCTION: void cblas_dsyr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, double alpha, double* X,
+                int incX, double* A, int lda ) ;
+FUNCTION: void cblas_dspr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, double alpha, double* X,
+                int incX, double* Ap ) ;
+FUNCTION: void cblas_dsyr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, double alpha, double* X,
+                int incX, double* Y, int incY, double* A,
+                int lda ) ;
+FUNCTION: void cblas_dspr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, double alpha, double* X,
+                int incX, double* Y, int incY, double* A ) ;
+
+
+FUNCTION: void cblas_chemv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, void* alpha, void* A,
+                 int lda, void* X, int incX,
+                 void* beta, void* Y, int incY ) ;
+FUNCTION: void cblas_chbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, int K, void* alpha, void* A,
+                 int lda, void* X, int incX,
+                 void* beta, void* Y, int incY ) ;
+FUNCTION: void cblas_chpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, void* alpha, void* Ap,
+                 void* X, int incX,
+                 void* beta, void* Y, int incY ) ;
+FUNCTION: void cblas_cgeru ( CBLAS_ORDER Order, int M, int N,
+                 void* alpha, void* X, int incX,
+                 void* Y, int incY, void* A, int lda ) ;
+FUNCTION: void cblas_cgerc ( CBLAS_ORDER Order, int M, int N,
+                 void* alpha, void* X, int incX,
+                 void* Y, int incY, void* A, int lda ) ;
+FUNCTION: void cblas_cher ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, float alpha, void* X, int incX,
+                void* A, int lda ) ;
+FUNCTION: void cblas_chpr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, float alpha, void* X,
+                int incX, void* A ) ;
+FUNCTION: void cblas_cher2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo, int N,
+                void* alpha, void* X, int incX,
+                void* Y, int incY, void* A, int lda ) ;
+FUNCTION: void cblas_chpr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo, int N,
+                void* alpha, void* X, int incX,
+                void* Y, int incY, void* Ap ) ;
+
+FUNCTION: void cblas_zhemv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, void* alpha, void* A,
+                 int lda, void* X, int incX,
+                 void* beta, void* Y, int incY ) ;
+FUNCTION: void cblas_zhbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, int K, void* alpha, void* A,
+                 int lda, void* X, int incX,
+                 void* beta, void* Y, int incY ) ;
+FUNCTION: void cblas_zhpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 int N, void* alpha, void* Ap,
+                 void* X, int incX,
+                 void* beta, void* Y, int incY ) ;
+FUNCTION: void cblas_zgeru ( CBLAS_ORDER Order, int M, int N,
+                 void* alpha, void* X, int incX,
+                 void* Y, int incY, void* A, int lda ) ;
+FUNCTION: void cblas_zgerc ( CBLAS_ORDER Order, int M, int N,
+                 void* alpha, void* X, int incX,
+                 void* Y, int incY, void* A, int lda ) ;
+FUNCTION: void cblas_zher ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, double alpha, void* X, int incX,
+                void* A, int lda ) ;
+FUNCTION: void cblas_zhpr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                int N, double alpha, void* X,
+                int incX, void* A ) ;
+FUNCTION: void cblas_zher2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo, int N,
+                void* alpha, void* X, int incX,
+                void* Y, int incY, void* A, int lda ) ;
+FUNCTION: void cblas_zhpr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo, int N,
+                void* alpha, void* X, int incX,
+                void* Y, int incY, void* Ap ) ;
+
+! Level 3 BLAS (matrix-matrix) 
+
+FUNCTION: void cblas_sgemm ( CBLAS_ORDER Order, CBLAS_TRANSPOSE TransA,
+                 CBLAS_TRANSPOSE TransB, int M, int N,
+                 int K, float alpha, float* A,
+                 int lda, float* B, int ldb,
+                 float beta, float* C, int ldc ) ;
+FUNCTION: void cblas_ssymm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, int M, int N,
+                 float alpha, float* A, int lda,
+                 float* B, int ldb, float beta,
+                 float* C, int ldc ) ;
+FUNCTION: void cblas_ssyrk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE Trans, int N, int K,
+                 float alpha, float* A, int lda,
+                 float beta, float* C, int ldc ) ;
+FUNCTION: void cblas_ssyr2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                  CBLAS_TRANSPOSE Trans, int N, int K,
+                  float alpha, float* A, int lda,
+                  float* B, int ldb, float beta,
+                  float* C, int ldc ) ;
+FUNCTION: void cblas_strmm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
+                 CBLAS_DIAG Diag, int M, int N,
+                 float alpha, float* A, int lda,
+                 float* B, int ldb ) ;
+FUNCTION: void cblas_strsm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
+                 CBLAS_DIAG Diag, int M, int N,
+                 float alpha, float* A, int lda,
+                 float* B, int ldb ) ;
+
+FUNCTION: void cblas_dgemm ( CBLAS_ORDER Order, CBLAS_TRANSPOSE TransA,
+                 CBLAS_TRANSPOSE TransB, int M, int N,
+                 int K, double alpha, double* A,
+                 int lda, double* B, int ldb,
+                 double beta, double* C, int ldc ) ;
+FUNCTION: void cblas_dsymm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, int M, int N,
+                 double alpha, double* A, int lda,
+                 double* B, int ldb, double beta,
+                 double* C, int ldc ) ;
+FUNCTION: void cblas_dsyrk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE Trans, int N, int K,
+                 double alpha, double* A, int lda,
+                 double beta, double* C, int ldc ) ;
+FUNCTION: void cblas_dsyr2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                  CBLAS_TRANSPOSE Trans, int N, int K,
+                  double alpha, double* A, int lda,
+                  double* B, int ldb, double beta,
+                  double* C, int ldc ) ;
+FUNCTION: void cblas_dtrmm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
+                 CBLAS_DIAG Diag, int M, int N,
+                 double alpha, double* A, int lda,
+                 double* B, int ldb ) ;
+FUNCTION: void cblas_dtrsm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
+                 CBLAS_DIAG Diag, int M, int N,
+                 double alpha, double* A, int lda,
+                 double* B, int ldb ) ;
+
+FUNCTION: void cblas_cgemm ( CBLAS_ORDER Order, CBLAS_TRANSPOSE TransA,
+                 CBLAS_TRANSPOSE TransB, int M, int N,
+                 int K, void* alpha, void* A,
+                 int lda, void* B, int ldb,
+                 void* beta, void* C, int ldc ) ;
+FUNCTION: void cblas_csymm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* B, int ldb, void* beta,
+                 void* C, int ldc ) ;
+FUNCTION: void cblas_csyrk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE Trans, int N, int K,
+                 void* alpha, void* A, int lda,
+                 void* beta, void* C, int ldc ) ;
+FUNCTION: void cblas_csyr2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                  CBLAS_TRANSPOSE Trans, int N, int K,
+                  void* alpha, void* A, int lda,
+                  void* B, int ldb, void* beta,
+                  void* C, int ldc ) ;
+FUNCTION: void cblas_ctrmm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
+                 CBLAS_DIAG Diag, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* B, int ldb ) ;
+FUNCTION: void cblas_ctrsm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
+                 CBLAS_DIAG Diag, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* B, int ldb ) ;
+
+FUNCTION: void cblas_zgemm ( CBLAS_ORDER Order, CBLAS_TRANSPOSE TransA,
+                 CBLAS_TRANSPOSE TransB, int M, int N,
+                 int K, void* alpha, void* A,
+                 int lda, void* B, int ldb,
+                 void* beta, void* C, int ldc ) ;
+FUNCTION: void cblas_zsymm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* B, int ldb, void* beta,
+                 void* C, int ldc ) ;
+FUNCTION: void cblas_zsyrk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE Trans, int N, int K,
+                 void* alpha, void* A, int lda,
+                 void* beta, void* C, int ldc ) ;
+FUNCTION: void cblas_zsyr2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                  CBLAS_TRANSPOSE Trans, int N, int K,
+                  void* alpha, void* A, int lda,
+                  void* B, int ldb, void* beta,
+                  void* C, int ldc ) ;
+FUNCTION: void cblas_ztrmm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
+                 CBLAS_DIAG Diag, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* B, int ldb ) ;
+FUNCTION: void cblas_ztrsm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
+                 CBLAS_DIAG Diag, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* B, int ldb ) ;
+
+FUNCTION: void cblas_chemm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* B, int ldb, void* beta,
+                 void* C, int ldc ) ;
+FUNCTION: void cblas_cherk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE Trans, int N, int K,
+                 float alpha, void* A, int lda,
+                 float beta, void* C, int ldc ) ;
+FUNCTION: void cblas_cher2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                  CBLAS_TRANSPOSE Trans, int N, int K,
+                  void* alpha, void* A, int lda,
+                  void* B, int ldb, float beta,
+                  void* C, int ldc ) ;
+FUNCTION: void cblas_zhemm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
+                 CBLAS_UPLO Uplo, int M, int N,
+                 void* alpha, void* A, int lda,
+                 void* B, int ldb, void* beta,
+                 void* C, int ldc ) ;
+FUNCTION: void cblas_zherk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                 CBLAS_TRANSPOSE Trans, int N, int K,
+                 double alpha, void* A, int lda,
+                 double beta, void* C, int ldc ) ;
+FUNCTION: void cblas_zher2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
+                  CBLAS_TRANSPOSE Trans, int N, int K,
+                  void* alpha, void* A, int lda,
+                  void* B, int ldb, double beta,
+                  void* C, int ldc ) ;
+
diff --git a/basis/math/blas/cblas/summary.txt b/basis/math/blas/cblas/summary.txt
new file mode 100644 (file)
index 0000000..c72e78e
--- /dev/null
@@ -0,0 +1 @@
+Low-level bindings to the C Basic Linear Algebra Subroutines (BLAS) library
diff --git a/basis/math/blas/cblas/tags.txt b/basis/math/blas/cblas/tags.txt
new file mode 100644 (file)
index 0000000..5118958
--- /dev/null
@@ -0,0 +1,3 @@
+math
+bindings
+unportable
diff --git a/basis/math/blas/matrices/authors.txt b/basis/math/blas/matrices/authors.txt
new file mode 100644 (file)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/basis/math/blas/matrices/matrices-docs.factor b/basis/math/blas/matrices/matrices-docs.factor
new file mode 100644 (file)
index 0000000..01e0997
--- /dev/null
@@ -0,0 +1,245 @@
+USING: alien byte-arrays help.markup help.syntax math math.blas.vectors sequences strings ;
+IN: math.blas.matrices
+
+ARTICLE: "math.blas-summary" "Basic Linear Algebra Subroutines (BLAS) interface"
+"Factor provides an interface to high-performance vector and matrix math routines available in the system's BLAS library. A set of specialized types are provided for handling packed, unboxed vector data:"
+{ $subsection "math.blas-types" }
+"Scalar-vector and vector-vector operations are available in the " { $vocab-link "math.blas.vectors" } " vocabulary:"
+{ $subsection "math.blas.vectors" }
+"Vector-matrix and matrix-matrix operations are available in the " { $vocab-link "math.blas.matrices" } " vocabulary:"
+{ $subsection "math.blas.matrices" }
+"The low-level BLAS C interface can be accessed directly through the " { $vocab-link "math.blas.cblas" } " vocabulary." ;
+
+ARTICLE: "math.blas-types" "BLAS interface types"
+"BLAS vectors come in single- and double-precision, real and complex flavors:"
+{ $subsection float-blas-vector }
+{ $subsection double-blas-vector }
+{ $subsection float-complex-blas-vector }
+{ $subsection double-complex-blas-vector }
+"These vector types all follow the " { $link sequence } " protocol. In addition, there are corresponding types for matrix data:"
+{ $subsection float-blas-matrix }
+{ $subsection double-blas-matrix }
+{ $subsection float-complex-blas-matrix }
+{ $subsection double-complex-blas-matrix } 
+"Syntax words are provided for constructing literal vectors and matrices in the " { $vocab-link "math.blas.syntax" } " vocabulary:"
+{ $subsection "math.blas.syntax" }
+"There are BOA constructors for all vector and matrix types, which provide the most flexibility in specifying memory layout:"
+{ $subsection <float-blas-vector> }
+{ $subsection <double-blas-vector> }
+{ $subsection <float-complex-blas-vector> }
+{ $subsection <double-complex-blas-vector> }
+{ $subsection <float-blas-matrix> }
+{ $subsection <double-blas-matrix> }
+{ $subsection <float-complex-blas-matrix> }
+{ $subsection <double-complex-blas-matrix> }
+"For the simple case of creating a dense, zero-filled vector or matrix, simple empty object constructors are provided:"
+{ $subsection <empty-vector> }
+{ $subsection <empty-matrix> }
+"BLAS vectors and matrices can also be constructed from other Factor sequences:"
+{ $subsection >float-blas-vector }
+{ $subsection >double-blas-vector }
+{ $subsection >float-complex-blas-vector }
+{ $subsection >double-complex-blas-vector }
+{ $subsection >float-blas-matrix }
+{ $subsection >double-blas-matrix }
+{ $subsection >float-complex-blas-matrix }
+{ $subsection >double-complex-blas-matrix } ;
+
+ARTICLE: "math.blas.matrices" "BLAS interface matrix operations"
+"Transposing and slicing matrices:"
+{ $subsection Mtranspose }
+{ $subsection Mrows }
+{ $subsection Mcols }
+{ $subsection Msub }
+"Matrix-vector products:"
+{ $subsection n*M.V+n*V! }
+{ $subsection n*M.V+n*V }
+{ $subsection n*M.V }
+{ $subsection M.V }
+"Vector outer products:"
+{ $subsection n*V(*)V+M! }
+{ $subsection n*V(*)Vconj+M! }
+{ $subsection n*V(*)V+M }
+{ $subsection n*V(*)Vconj+M }
+{ $subsection n*V(*)V }
+{ $subsection n*V(*)Vconj }
+{ $subsection V(*) }
+{ $subsection V(*)conj }
+"Matrix products:"
+{ $subsection n*M.M+n*M! }
+{ $subsection n*M.M+n*M }
+{ $subsection n*M.M }
+{ $subsection M. }
+"Scalar-matrix products:"
+{ $subsection n*M! }
+{ $subsection n*M }
+{ $subsection M*n }
+{ $subsection M/n } ;
+
+ABOUT: "math.blas.matrices"
+
+HELP: blas-matrix-base
+{ $class-description "The base class for all BLAS matrix types. Objects of this type should not be created directly; instead, instantiate one of the typed subclasses:"
+{ $list
+    { { $link float-blas-matrix } }
+    { { $link double-blas-matrix } }
+    { { $link float-complex-blas-matrix } }
+    { { $link double-complex-blas-matrix } }
+}
+"All of these subclasses share the same tuple layout:"
+{ $list
+    { { $snippet "underlying" } " contains an alien pointer referencing or byte-array containing a packed, column-major array of float, double, float complex, or double complex values;" }
+    { { $snippet "ld" } " indicates the distance, in elements, between matrix columns;" }
+    { { $snippet "rows" } " and " { $snippet "cols" } " indicate the number of significant rows and columns in the matrix;" }
+    { "and " { $snippet "transpose" } ", if set to a true value, indicates that the matrix should be treated as transposed relative to its in-memory representation." }
+} } ;
+
+{ blas-vector-base blas-matrix-base } related-words
+
+HELP: float-blas-matrix
+{ $class-description "A matrix of single-precision floating-point values. For details on the tuple layout, see " { $link blas-matrix-base } "." } ;
+HELP: double-blas-matrix
+{ $class-description "A matrix of double-precision floating-point values. For details on the tuple layout, see " { $link blas-matrix-base } "." } ;
+HELP: float-complex-blas-matrix
+{ $class-description "A matrix of single-precision floating-point complex values. Complex values are stored in memory as two consecutive float values, real part then imaginary part. For details on the tuple layout, see " { $link blas-matrix-base } "." } ;
+HELP: double-complex-blas-matrix
+{ $class-description "A matrix of double-precision floating-point complex values. Complex values are stored in memory as two consecutive float values, real part then imaginary part. For details on the tuple layout, see " { $link blas-matrix-base } "." } ;
+
+{
+    float-blas-matrix double-blas-matrix float-complex-blas-matrix double-complex-blas-matrix
+    float-blas-vector double-blas-vector float-complex-blas-vector double-complex-blas-vector
+} related-words
+
+HELP: Mwidth
+{ $values { "matrix" blas-matrix-base } { "width" integer } }
+{ $description "Returns the number of columns in " { $snippet "matrix" } "." } ;
+
+HELP: Mheight
+{ $values { "matrix" blas-matrix-base } { "height" integer } }
+{ $description "Returns the number of rows in " { $snippet "matrix" } "." } ;
+
+{ Mwidth Mheight } related-words
+
+HELP: n*M.V+n*V!
+{ $values { "alpha" number } { "A" blas-matrix-base } { "x" blas-vector-base } { "beta" number } { "y" blas-vector-base } { "y=alpha*A.x+b*y" blas-vector-base } }
+{ $description "Calculate the matrix-vector product " { $snippet "αAx + βy" } ", and overwrite the current contents of " { $snippet "y" } " with the result. The width of " { $snippet "A" } " must match the length of " { $snippet "x" } ", and the height must match the length of " { $snippet "y" } ". Corresponds to the xGEMV routines in BLAS." }
+{ $side-effects "y" } ;
+
+HELP: n*V(*)V+M!
+{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "A" blas-matrix-base } { "A=alpha*x(*)y+A" blas-matrix-base } }
+{ $description "Calculate the outer product " { $snippet "αx⊗y + A" } " and overwrite the current contents of A with the result. The width of " { $snippet "A" } " must match the length of " { $snippet "y" } ", and its height must match the length of " { $snippet "x" } ". Corresponds to the xGER and xGERU routines in BLAS." }
+{ $side-effects "A" } ;
+
+HELP: n*V(*)Vconj+M!
+{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "A" blas-matrix-base } { "A=alpha*x(*)yconj+A" blas-matrix-base } }
+{ $description "Calculate the conjugate outer product " { $snippet "αx⊗y̅ + A" } " and overwrite the current contents of A with the result. The width of " { $snippet "A" } " must match the length of " { $snippet "y" } ", and its height must match the length of " { $snippet "x" } ". Corresponds to the xGERC routines in BLAS." }
+{ $side-effects "A" } ;
+
+HELP: n*M.M+n*M!
+{ $values { "alpha" number } { "A" blas-matrix-base } { "B" blas-matrix-base } { "beta" number } { "C" blas-matrix-base } { "C=alpha*A.B+beta*C" blas-matrix-base } }
+{ $description "Calculate the matrix product " { $snippet "αAB + βC" } " and overwrite the current contents of C with the result. The width of " { $snippet "A" } " and the height of " { $snippet "B" } " must match, as must the heights of " { $snippet "A" } " and " { $snippet "C" } ", and the widths of " { $snippet "B" } " and " { $snippet "C" } ". Corresponds to the xGEMM routines in BLAS." }
+{ $side-effects "C" } ;
+
+HELP: <empty-matrix>
+{ $values { "rows" integer } { "cols" integer } { "exemplar" blas-vector-base blas-matrix-base } { "matrix" blas-matrix-base } }
+{ $description "Create a matrix of all zeros with the given dimensions and the same element type as " { $snippet "exemplar" } "." } ;
+
+{ <zero-vector> <empty-vector> <empty-matrix> } related-words
+
+HELP: n*M.V+n*V
+{ $values { "alpha" number } { "A" blas-matrix-base } { "x" blas-vector-base } { "beta" number } { "y" blas-vector-base } { "alpha*A.x+b*y" blas-vector-base } }
+{ $description "Calculate the matrix-vector product " { $snippet "αAx + βy" } " and return a freshly allocated vector containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "x" } ", and the height must match the length of " { $snippet "y" } ". The returned vector will have the same length as " { $snippet "y" } ". Corresponds to the xGEMV routines in BLAS." } ;
+
+HELP: n*V(*)V+M
+{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "A" blas-matrix-base } { "alpha*x(*)y+A" blas-matrix-base } }
+{ $description "Calculate the outer product " { $snippet "αx⊗y + A" } " and return a freshly allocated matrix containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "y" } ", and its height must match the length of " { $snippet "x" } ". The returned matrix will have the same dimensions as " { $snippet "A" } ". Corresponds to the xGER and xGERU routines in BLAS." } ;
+
+HELP: n*V(*)Vconj+M
+{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "A" blas-matrix-base } { "alpha*x(*)yconj+A" blas-matrix-base } }
+{ $description "Calculate the conjugate outer product " { $snippet "αx⊗y̅ + A" } " and return a freshly allocated matrix containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "y" } ", and its height must match the length of " { $snippet "x" } ". The returned matrix will have the same dimensions as " { $snippet "A" } ". Corresponds to the xGERC routines in BLAS." } ;
+
+HELP: n*M.M+n*M
+{ $values { "alpha" number } { "A" blas-matrix-base } { "B" blas-matrix-base } { "beta" number } { "C" blas-matrix-base } { "alpha*A.B+beta*C" blas-matrix-base } }
+{ $description "Calculate the matrix product " { $snippet "αAB + βC" } " and overwrite the current contents of C with the result. The width of " { $snippet "A" } " and the height of " { $snippet "B" } " must match, as must the heights of " { $snippet "A" } " and " { $snippet "C" } ", and the widths of " { $snippet "B" } " and " { $snippet "C" } ". Corresponds to the xGEMM routines in BLAS." } ;
+
+HELP: n*M.V
+{ $values { "alpha" number } { "A" blas-matrix-base } { "x" blas-vector-base } { "alpha*A.x" blas-vector-base } }
+{ $description "Calculate the matrix-vector product " { $snippet "αAx" } " and return a freshly allocated vector containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "x" } ". The length of the returned vector will match the height of " { $snippet "A" } ". Corresponds to the xGEMV routines in BLAS." } ;
+
+HELP: M.V
+{ $values { "A" blas-matrix-base } { "x" blas-vector-base } { "A.x" blas-vector-base } }
+{ $description "Calculate the matrix-vector product " { $snippet "Ax" } " and return a freshly allocated vector containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "x" } ". The length of the returned vector will match the height of " { $snippet "A" } ". Corresponds to the xGEMV routines in BLAS." } ;
+
+{ n*M.V+n*V! n*M.V+n*V n*M.V M.V } related-words
+
+HELP: n*V(*)V
+{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "alpha*x(*)y" blas-matrix-base } }
+{ $description "Calculate the outer product " { $snippet "αx⊗y" } " and return a freshly allocated matrix containing the result. The returned matrix's height will match the length of " { $snippet "x" } ", and its width will match the length of " { $snippet "y" } ". Corresponds to the xGER and xGERU routines in BLAS." } ;
+
+HELP: n*V(*)Vconj
+{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "alpha*x(*)yconj" blas-matrix-base } }
+{ $description "Calculate the outer product " { $snippet "αx⊗y̅" } " and return a freshly allocated matrix containing the result. The returned matrix's height will match the length of " { $snippet "x" } ", and its width will match the length of " { $snippet "y" } ". Corresponds to the xGERC routines in BLAS." } ;
+
+HELP: V(*)
+{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x(*)y" blas-matrix-base } }
+{ $description "Calculate the outer product " { $snippet "x⊗y" } " and return a freshly allocated matrix containing the result. The returned matrix's height will match the length of " { $snippet "x" } ", and its width will match the length of " { $snippet "y" } ". Corresponds to the xGER and xGERU routines in BLAS." } ;
+
+HELP: V(*)conj
+{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x(*)yconj" blas-matrix-base } }
+{ $description "Calculate the conjugate outer product " { $snippet "x⊗y̅" } " and return a freshly allocated matrix containing the result. The returned matrix's height will match the length of " { $snippet "x" } ", and its width will match the length of " { $snippet "y" } ". Corresponds to the xGERC routines in BLAS." } ;
+
+{ n*V(*)V+M! n*V(*)Vconj+M! n*V(*)V+M n*V(*)Vconj+M n*V(*)V n*V(*)Vconj V(*) V(*)conj V. V.conj } related-words
+
+HELP: n*M.M
+{ $values { "alpha" number } { "A" blas-matrix-base } { "B" blas-matrix-base } { "alpha*A.B" blas-matrix-base } }
+{ $description "Calculate the matrix product " { $snippet "αAB" } " and return a freshly allocated matrix containing the result. The width of " { $snippet "A" } " and the height of " { $snippet "B" } " must match. The returned matrix's height will be the same as " { $snippet "A" } "'s, and its width will match " { $snippet "B" } "'s. Corresponds to the xGEMM routines in BLAS." } ;
+
+HELP: M.
+{ $values { "A" blas-matrix-base } { "B" blas-matrix-base } { "A.B" blas-matrix-base } }
+{ $description "Calculate the matrix product " { $snippet "AB" } " and return a freshly allocated matrix containing the result. The width of " { $snippet "A" } " and the height of " { $snippet "B" } " must match. The returned matrix's height will be the same as " { $snippet "A" } "'s, and its width will match " { $snippet "B" } "'s. Corresponds to the xGEMM routines in BLAS." } ;
+
+{ n*M.M+n*M! n*M.M+n*M n*M.M M. } related-words
+
+HELP: Msub
+{ $values { "matrix" blas-matrix-base } { "row" integer } { "col" integer } { "height" integer } { "width" integer } { "sub" blas-matrix-base } }
+{ $description "Select a rectangular submatrix of " { $snippet "matrix" } " with the given dimensions. The returned submatrix will share the parent matrix's storage." } ;
+
+HELP: Mrows
+{ $values { "A" blas-matrix-base } { "rows" sequence } }
+{ $description "Return a sequence of BLAS vectors representing the rows of " { $snippet "matrix" } ". Each vector will share the parent matrix's storage." } ;
+
+HELP: Mcols
+{ $values { "A" blas-matrix-base } { "cols" sequence } }
+{ $description "Return a sequence of BLAS vectors representing the columns of " { $snippet "matrix" } ". Each vector will share the parent matrix's storage." } ;
+
+HELP: n*M!
+{ $values { "n" number } { "A" blas-matrix-base } { "A=n*A" blas-matrix-base } }
+{ $description "Calculate the scalar-matrix product " { $snippet "nA" } " and overwrite the current contents of A with the result." }
+{ $side-effects "A" } ;
+
+HELP: n*M
+{ $values { "n" number } { "A" blas-matrix-base } { "n*A" blas-matrix-base } }
+{ $description "Calculate the scalar-matrix product " { $snippet "nA" } " and return a freshly allocated matrix with the same dimensions as " { $snippet "A" } " containing the result." } ;
+
+HELP: M*n
+{ $values { "A" blas-matrix-base } { "n" number } { "A*n" blas-matrix-base } }
+{ $description "Calculate the scalar-matrix product " { $snippet "nA" } " and return a freshly allocated matrix with the same dimensions as " { $snippet "A" } " containing the result." } ;
+
+HELP: M/n
+{ $values { "A" blas-matrix-base } { "n" number } { "A/n" blas-matrix-base } }
+{ $description "Calculate the scalar-matrix product " { $snippet "(1/n)A" } " and return a freshly allocated matrix with the same dimensions as " { $snippet "A" } " containing the result." } ;
+
+{ n*M! n*M M*n M/n } related-words
+
+HELP: Mtranspose
+{ $values { "matrix" blas-matrix-base } { "matrix^T" blas-matrix-base } }
+{ $description "Returns the transpose of " { $snippet "matrix" } ". The returned matrix shares storage with the original matrix." } ;
+
+HELP: element-type
+{ $values { "v" blas-vector-base blas-matrix-base } { "type" string } }
+{ $description "Return the C type of the elements in the given BLAS vector or matrix." } ;
+
+HELP: <empty-vector>
+{ $values { "length" "The length of the new vector" } { "exemplar" blas-vector-base blas-matrix-base } { "vector" blas-vector-base } }
+{ $description "Return a vector of zeros with the given " { $snippet "length" } " and the same element type as " { $snippet "v" } "." } ;
+
diff --git a/basis/math/blas/matrices/matrices-tests.factor b/basis/math/blas/matrices/matrices-tests.factor
new file mode 100644 (file)
index 0000000..dabf3c3
--- /dev/null
@@ -0,0 +1,710 @@
+USING: kernel math.blas.matrices math.blas.vectors math.blas.syntax
+sequences tools.test ;
+IN: math.blas.matrices.tests
+
+! clone
+
+[ smatrix{
+    { 1.0 2.0 3.0 }
+    { 4.0 5.0 6.0 }
+    { 7.0 8.0 9.0 }
+} ] [
+    smatrix{
+        { 1.0 2.0 3.0 }
+        { 4.0 5.0 6.0 }
+        { 7.0 8.0 9.0 }
+    } clone
+] unit-test
+[ f ] [
+    smatrix{
+        { 1.0 2.0 3.0 }
+        { 4.0 5.0 6.0 }
+        { 7.0 8.0 9.0 }
+    } dup clone eq?
+] unit-test
+
+[ dmatrix{
+    { 1.0 2.0 3.0 }
+    { 4.0 5.0 6.0 }
+    { 7.0 8.0 9.0 }
+} ] [
+    dmatrix{
+        { 1.0 2.0 3.0 }
+        { 4.0 5.0 6.0 }
+        { 7.0 8.0 9.0 }
+    } clone
+] unit-test
+[ f ] [
+    dmatrix{
+        { 1.0 2.0 3.0 }
+        { 4.0 5.0 6.0 }
+        { 7.0 8.0 9.0 }
+    } dup clone eq?
+] unit-test
+
+[ cmatrix{
+    { C{ 1.0 1.0 } 2.0          3.0          }
+    { 4.0          C{ 5.0 2.0 } 6.0          }
+    { 7.0          8.0          C{ 9.0 3.0 } }
+} ] [
+    cmatrix{
+        { C{ 1.0 1.0 } 2.0          3.0          }
+        { 4.0          C{ 5.0 2.0 } 6.0          }
+        { 7.0          8.0          C{ 9.0 3.0 } }
+    } clone
+] unit-test
+[ f ] [
+    cmatrix{
+        { C{ 1.0 1.0 } 2.0          3.0          }
+        { 4.0          C{ 5.0 2.0 } 6.0          }
+        { 7.0          8.0          C{ 9.0 3.0 } }
+    } dup clone eq?
+] unit-test
+
+[ zmatrix{
+    { C{ 1.0 1.0 } 2.0          3.0          }
+    { 4.0          C{ 5.0 2.0 } 6.0          }
+    { 7.0          8.0          C{ 9.0 3.0 } }
+} ] [
+    zmatrix{
+        { C{ 1.0 1.0 } 2.0          3.0          }
+        { 4.0          C{ 5.0 2.0 } 6.0          }
+        { 7.0          8.0          C{ 9.0 3.0 } }
+    } clone
+] unit-test
+[ f ] [
+    zmatrix{
+        { C{ 1.0 1.0 } 2.0          3.0          }
+        { 4.0          C{ 5.0 2.0 } 6.0          }
+        { 7.0          8.0          C{ 9.0 3.0 } }
+    } dup clone eq?
+] unit-test
+
+! M.V
+
+[ svector{ 3.0 1.0 6.0 } ] [
+    smatrix{
+        {  0.0 1.0 0.0 1.0 }
+        { -1.0 0.0 0.0 2.0 }
+        {  0.0 0.0 1.0 3.0 }
+    }
+    svector{ 1.0 2.0 3.0 1.0 }
+    M.V
+] unit-test 
+[ svector{ -2.0 1.0 3.0 14.0 } ] [
+    smatrix{
+        {  0.0 1.0 0.0 1.0 }
+        { -1.0 0.0 0.0 2.0 }
+        {  0.0 0.0 1.0 3.0 }
+    } Mtranspose
+    svector{ 1.0 2.0 3.0 }
+    M.V
+] unit-test 
+
+[ dvector{ 3.0 1.0 6.0 } ] [
+    dmatrix{
+        {  0.0 1.0 0.0 1.0 }
+        { -1.0 0.0 0.0 2.0 }
+        {  0.0 0.0 1.0 3.0 }
+    }
+    dvector{ 1.0 2.0 3.0 1.0 }
+    M.V
+] unit-test 
+[ dvector{ -2.0 1.0 3.0 14.0 } ] [
+    dmatrix{
+        {  0.0 1.0 0.0 1.0 }
+        { -1.0 0.0 0.0 2.0 }
+        {  0.0 0.0 1.0 3.0 }
+    } Mtranspose
+    dvector{ 1.0 2.0 3.0 }
+    M.V
+] unit-test 
+
+[ cvector{ 3.0 C{ 1.0 2.0 } 6.0 } ] [
+    cmatrix{
+        {  0.0 1.0          0.0 1.0 }
+        { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
+        {  0.0 0.0          1.0 3.0 }
+    }
+    cvector{ 1.0 2.0 3.0 1.0 }
+    M.V
+] unit-test 
+[ cvector{ -2.0 C{ 1.0 2.0 } 3.0 14.0 } ] [
+    cmatrix{
+        {  0.0 1.0          0.0 1.0 }
+        { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
+        {  0.0 0.0          1.0 3.0 }
+    } Mtranspose
+    cvector{ 1.0 2.0 3.0 }
+    M.V
+] unit-test 
+
+[ zvector{ 3.0 C{ 1.0 2.0 } 6.0 } ] [
+    zmatrix{
+        {  0.0 1.0          0.0 1.0 }
+        { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
+        {  0.0 0.0          1.0 3.0 }
+    }
+    zvector{ 1.0 2.0 3.0 1.0 }
+    M.V
+] unit-test
+[ zvector{ -2.0 C{ 1.0 2.0 } 3.0 14.0 } ] [
+    zmatrix{
+        {  0.0 1.0          0.0 1.0 }
+        { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
+        {  0.0 0.0          1.0 3.0 }
+    } Mtranspose
+    zvector{ 1.0 2.0 3.0 }
+    M.V
+] unit-test 
+
+! V(*)
+
+[ smatrix{
+    { 1.0 2.0 3.0  4.0 }
+    { 2.0 4.0 6.0  8.0 }
+    { 3.0 6.0 9.0 12.0 }
+} ] [
+    svector{ 1.0 2.0 3.0 } svector{ 1.0 2.0 3.0 4.0 } V(*)
+] unit-test
+
+[ dmatrix{
+    { 1.0 2.0 3.0  4.0 }
+    { 2.0 4.0 6.0  8.0 }
+    { 3.0 6.0 9.0 12.0 }
+} ] [
+    dvector{ 1.0 2.0 3.0 } dvector{ 1.0 2.0 3.0 4.0 } V(*)
+] unit-test
+
+[ cmatrix{
+    { 1.0          2.0          C{ 3.0 -3.0 } 4.0            }
+    { 2.0          4.0          C{ 6.0 -6.0 } 8.0            }
+    { C{ 3.0 3.0 } C{ 6.0 6.0 } 18.0          C{ 12.0 12.0 } }
+} ] [
+    cvector{ 1.0 2.0 C{ 3.0 3.0 } } cvector{ 1.0 2.0 C{ 3.0 -3.0 } 4.0 } V(*)
+] unit-test
+
+[ zmatrix{
+    { 1.0          2.0          C{ 3.0 -3.0 } 4.0            }
+    { 2.0          4.0          C{ 6.0 -6.0 } 8.0            }
+    { C{ 3.0 3.0 } C{ 6.0 6.0 } 18.0          C{ 12.0 12.0 } }
+} ] [
+    zvector{ 1.0 2.0 C{ 3.0 3.0 } } zvector{ 1.0 2.0 C{ 3.0 -3.0 } 4.0 } V(*)
+] unit-test
+
+! M.
+
+[ smatrix{
+    { 1.0 0.0  0.0 4.0  0.0 }
+    { 0.0 0.0 -3.0 0.0  0.0 }
+    { 0.0 4.0  0.0 0.0 10.0 }
+    { 0.0 0.0  0.0 0.0  0.0 }
+} ] [
+    smatrix{
+        { 1.0 0.0  0.0 }
+        { 0.0 0.0 -1.0 }
+        { 0.0 2.0  0.0 }
+        { 0.0 0.0  0.0 }
+    } smatrix{
+        { 1.0 0.0 0.0 4.0 0.0 }
+        { 0.0 2.0 0.0 0.0 5.0 }
+        { 0.0 0.0 3.0 0.0 0.0 }
+    } M.
+] unit-test
+
+[ smatrix{
+    { 1.0  0.0  0.0 0.0 }
+    { 0.0  0.0  4.0 0.0 }
+    { 0.0 -3.0  0.0 0.0 }
+    { 4.0  0.0  0.0 0.0 }
+    { 0.0  0.0 10.0 0.0 }
+} ] [
+    smatrix{
+        { 1.0 0.0 0.0 4.0 0.0 }
+        { 0.0 2.0 0.0 0.0 5.0 }
+        { 0.0 0.0 3.0 0.0 0.0 }
+    } Mtranspose smatrix{
+        { 1.0 0.0  0.0 }
+        { 0.0 0.0 -1.0 }
+        { 0.0 2.0  0.0 }
+        { 0.0 0.0  0.0 }
+    } Mtranspose M.
+] unit-test
+
+[ dmatrix{
+    { 1.0 0.0  0.0 4.0  0.0 }
+    { 0.0 0.0 -3.0 0.0  0.0 }
+    { 0.0 4.0  0.0 0.0 10.0 }
+    { 0.0 0.0  0.0 0.0  0.0 }
+} ] [
+    dmatrix{
+        { 1.0 0.0  0.0 }
+        { 0.0 0.0 -1.0 }
+        { 0.0 2.0  0.0 }
+        { 0.0 0.0  0.0 }
+    } dmatrix{
+        { 1.0 0.0 0.0 4.0 0.0 }
+        { 0.0 2.0 0.0 0.0 5.0 }
+        { 0.0 0.0 3.0 0.0 0.0 }
+    } M.
+] unit-test
+
+[ dmatrix{
+    { 1.0  0.0  0.0 0.0 }
+    { 0.0  0.0  4.0 0.0 }
+    { 0.0 -3.0  0.0 0.0 }
+    { 4.0  0.0  0.0 0.0 }
+    { 0.0  0.0 10.0 0.0 }
+} ] [
+    dmatrix{
+        { 1.0 0.0 0.0 4.0 0.0 }
+        { 0.0 2.0 0.0 0.0 5.0 }
+        { 0.0 0.0 3.0 0.0 0.0 }
+    } Mtranspose dmatrix{
+        { 1.0 0.0  0.0 }
+        { 0.0 0.0 -1.0 }
+        { 0.0 2.0  0.0 }
+        { 0.0 0.0  0.0 }
+    } Mtranspose M.
+] unit-test
+
+[ cmatrix{
+    { 1.0 0.0            0.0 4.0  0.0 }
+    { 0.0 0.0           -3.0 0.0  0.0 }
+    { 0.0 C{ 4.0 -4.0 }  0.0 0.0 10.0 }
+    { 0.0 0.0            0.0 0.0  0.0 }
+} ] [
+    cmatrix{
+        { 1.0 0.0  0.0 }
+        { 0.0 0.0 -1.0 }
+        { 0.0 2.0  0.0 }
+        { 0.0 0.0  0.0 }
+    } cmatrix{
+        { 1.0 0.0           0.0 4.0 0.0 }
+        { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
+        { 0.0 0.0           3.0 0.0 0.0 }
+    } M.
+] unit-test
+
+[ cmatrix{
+    { 1.0  0.0  0.0          0.0 }
+    { 0.0  0.0 C{ 4.0 -4.0 } 0.0 }
+    { 0.0 -3.0  0.0          0.0 }
+    { 4.0  0.0  0.0          0.0 }
+    { 0.0  0.0 10.0          0.0 }
+} ] [
+    cmatrix{
+        { 1.0 0.0           0.0 4.0 0.0 }
+        { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
+        { 0.0 0.0           3.0 0.0 0.0 }
+    } Mtranspose cmatrix{
+        { 1.0 0.0  0.0 }
+        { 0.0 0.0 -1.0 }
+        { 0.0 2.0  0.0 }
+        { 0.0 0.0  0.0 }
+    } Mtranspose M.
+] unit-test
+
+[ zmatrix{
+    { 1.0 0.0            0.0 4.0  0.0 }
+    { 0.0 0.0           -3.0 0.0  0.0 }
+    { 0.0 C{ 4.0 -4.0 }  0.0 0.0 10.0 }
+    { 0.0 0.0            0.0 0.0  0.0 }
+} ] [
+    zmatrix{
+        { 1.0 0.0  0.0 }
+        { 0.0 0.0 -1.0 }
+        { 0.0 2.0  0.0 }
+        { 0.0 0.0  0.0 }
+    } zmatrix{
+        { 1.0 0.0           0.0 4.0 0.0 }
+        { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
+        { 0.0 0.0           3.0 0.0 0.0 }
+    } M.
+] unit-test
+
+[ zmatrix{
+    { 1.0  0.0  0.0          0.0 }
+    { 0.0  0.0 C{ 4.0 -4.0 } 0.0 }
+    { 0.0 -3.0  0.0          0.0 }
+    { 4.0  0.0  0.0          0.0 }
+    { 0.0  0.0 10.0          0.0 }
+} ] [
+    zmatrix{
+        { 1.0 0.0           0.0 4.0 0.0 }
+        { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
+        { 0.0 0.0           3.0 0.0 0.0 }
+    } Mtranspose zmatrix{
+        { 1.0 0.0  0.0 }
+        { 0.0 0.0 -1.0 }
+        { 0.0 2.0  0.0 }
+        { 0.0 0.0  0.0 }
+    } Mtranspose M.
+] unit-test
+
+! n*M
+
+[ smatrix{
+    { 2.0 0.0 }
+    { 0.0 2.0 }
+} ] [
+    2.0 smatrix{
+        { 1.0 0.0 }
+        { 0.0 1.0 }
+    } n*M
+] unit-test
+
+[ dmatrix{
+    { 2.0 0.0 }
+    { 0.0 2.0 }
+} ] [
+    2.0 dmatrix{
+        { 1.0 0.0 }
+        { 0.0 1.0 }
+    } n*M
+] unit-test
+
+[ cmatrix{
+    { C{ 2.0 1.0 } 0.0           }
+    { 0.0          C{ -1.0 2.0 } }
+} ] [
+    C{ 2.0 1.0 } cmatrix{
+        { 1.0 0.0          }
+        { 0.0 C{ 0.0 1.0 } }
+    } n*M
+] unit-test
+
+[ zmatrix{
+    { C{ 2.0 1.0 } 0.0           }
+    { 0.0          C{ -1.0 2.0 } }
+} ] [
+    C{ 2.0 1.0 } zmatrix{
+        { 1.0 0.0          }
+        { 0.0 C{ 0.0 1.0 } }
+    } n*M
+] unit-test
+
+! Mrows, Mcols
+
+[ svector{ 3.0 3.0 3.0 } ] [
+    2 smatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mcols nth
+] unit-test
+[ svector{ 3.0 2.0 3.0 4.0 } ] [
+    2 smatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mrows nth
+] unit-test
+[ 3 ] [
+    smatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mrows length
+] unit-test
+[ 4 ] [
+    smatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mcols length
+] unit-test
+[ svector{ 3.0 3.0 3.0 } ] [
+    2 smatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mtranspose Mrows nth
+] unit-test
+[ svector{ 3.0 2.0 3.0 4.0 } ] [
+    2 smatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mtranspose Mcols nth
+] unit-test
+[ 3 ] [
+    smatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mtranspose Mcols length
+] unit-test
+[ 4 ] [
+    smatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mtranspose Mrows length
+] unit-test
+
+[ dvector{ 3.0 3.0 3.0 } ] [
+    2 dmatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mcols nth
+] unit-test
+[ dvector{ 3.0 2.0 3.0 4.0 } ] [
+    2 dmatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mrows nth
+] unit-test
+[ 3 ] [
+    dmatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mrows length
+] unit-test
+[ 4 ] [
+    dmatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mcols length
+] unit-test
+[ dvector{ 3.0 3.0 3.0 } ] [
+    2 dmatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mtranspose Mrows nth
+] unit-test
+[ dvector{ 3.0 2.0 3.0 4.0 } ] [
+    2 dmatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mtranspose Mcols nth
+] unit-test
+[ 3 ] [
+    dmatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mtranspose Mcols length
+] unit-test
+[ 4 ] [
+    dmatrix{
+        { 1.0 2.0 3.0 4.0 }
+        { 2.0 2.0 3.0 4.0 }
+        { 3.0 2.0 3.0 4.0 }
+    } Mtranspose Mrows length
+] unit-test
+
+[ cvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
+    2 cmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mcols nth
+] unit-test
+[ cvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
+    2 cmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mrows nth
+] unit-test
+[ 3 ] [
+    cmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mrows length
+] unit-test
+[ 4 ] [
+    cmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mcols length
+] unit-test
+[ cvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
+    2 cmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mtranspose Mrows nth
+] unit-test
+[ cvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
+    2 cmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mtranspose Mcols nth
+] unit-test
+[ 3 ] [
+    cmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mtranspose Mcols length
+] unit-test
+[ 4 ] [
+    cmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mtranspose Mrows length
+] unit-test
+
+[ zvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
+    2 zmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mcols nth
+] unit-test
+[ zvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
+    2 zmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mrows nth
+] unit-test
+[ 3 ] [
+    zmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mrows length
+] unit-test
+[ 4 ] [
+    zmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mcols length
+] unit-test
+[ zvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
+    2 zmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mtranspose Mrows nth
+] unit-test
+[ zvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
+    2 zmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mtranspose Mcols nth
+] unit-test
+[ 3 ] [
+    zmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mtranspose Mcols length
+] unit-test
+[ 4 ] [
+    zmatrix{
+        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
+        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
+        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
+    } Mtranspose Mrows length
+] unit-test
+
+! Msub
+
+[ smatrix{
+    { 3.0 2.0 1.0 }
+    { 0.0 1.0 0.0 }
+} ] [
+    smatrix{
+        { 0.0 1.0 2.0 3.0 2.0 }
+        { 1.0 0.0 3.0 2.0 1.0 }
+        { 2.0 3.0 0.0 1.0 0.0 }
+    } 1 2 2 3 Msub
+] unit-test
+
+[ smatrix{
+    { 3.0 0.0 }
+    { 2.0 1.0 }
+    { 1.0 0.0 }
+} ] [
+    smatrix{
+        { 0.0 1.0 2.0 3.0 2.0 }
+        { 1.0 0.0 3.0 2.0 1.0 }
+        { 2.0 3.0 0.0 1.0 0.0 }
+    } Mtranspose 2 1 3 2 Msub
+] unit-test
+
+[ dmatrix{
+    { 3.0 2.0 1.0 }
+    { 0.0 1.0 0.0 }
+} ] [
+    dmatrix{
+        { 0.0 1.0 2.0 3.0 2.0 }
+        { 1.0 0.0 3.0 2.0 1.0 }
+        { 2.0 3.0 0.0 1.0 0.0 }
+    } 1 2 2 3 Msub
+] unit-test
+
+[ dmatrix{
+    { 3.0 0.0 }
+    { 2.0 1.0 }
+    { 1.0 0.0 }
+} ] [
+    dmatrix{
+        { 0.0 1.0 2.0 3.0 2.0 }
+        { 1.0 0.0 3.0 2.0 1.0 }
+        { 2.0 3.0 0.0 1.0 0.0 }
+    } Mtranspose 2 1 3 2 Msub
+] unit-test
+
+[ cmatrix{
+    { C{ 3.0 3.0 } 2.0 1.0 }
+    { 0.0          1.0 0.0 }
+} ] [
+    cmatrix{
+        { 0.0 1.0 2.0          3.0 2.0 }
+        { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
+        { 2.0 3.0 0.0          1.0 0.0 }
+    } 1 2 2 3 Msub
+] unit-test
+
+[ cmatrix{
+    { C{ 3.0 3.0 } 0.0 }
+    { 2.0          1.0 }
+    { 1.0          0.0 }
+} ] [
+    cmatrix{
+        { 0.0 1.0 2.0          3.0 2.0 }
+        { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
+        { 2.0 3.0 0.0          1.0 0.0 }
+    } Mtranspose 2 1 3 2 Msub
+] unit-test
+
+[ zmatrix{
+    { C{ 3.0 3.0 } 2.0 1.0 }
+    { 0.0          1.0 0.0 }
+} ] [
+    zmatrix{
+        { 0.0 1.0 2.0          3.0 2.0 }
+        { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
+        { 2.0 3.0 0.0          1.0 0.0 }
+    } 1 2 2 3 Msub
+] unit-test
+
+[ zmatrix{
+    { C{ 3.0 3.0 } 0.0 }
+    { 2.0          1.0 }
+    { 1.0          0.0 }
+} ] [
+    zmatrix{
+        { 0.0 1.0 2.0          3.0 2.0 }
+        { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
+        { 2.0 3.0 0.0          1.0 0.0 }
+    } Mtranspose 2 1 3 2 Msub
+] unit-test
+
diff --git a/basis/math/blas/matrices/matrices.factor b/basis/math/blas/matrices/matrices.factor
new file mode 100755 (executable)
index 0000000..75ab077
--- /dev/null
@@ -0,0 +1,307 @@
+USING: accessors alien alien.c-types arrays byte-arrays combinators
+combinators.short-circuit fry kernel locals macros
+math math.blas.cblas math.blas.vectors math.blas.vectors.private
+math.complex math.functions math.order functors words
+sequences sequences.merged sequences.private shuffle
+specialized-arrays.direct.float specialized-arrays.direct.double
+specialized-arrays.float specialized-arrays.double ;
+IN: math.blas.matrices
+
+TUPLE: blas-matrix-base underlying ld rows cols transpose ;
+
+: Mtransposed? ( matrix -- ? )
+    transpose>> ; inline
+: Mwidth ( matrix -- width )
+    dup Mtransposed? [ rows>> ] [ cols>> ] if ; inline
+: Mheight ( matrix -- height )
+    dup Mtransposed? [ cols>> ] [ rows>> ] if ; inline
+
+GENERIC: n*M.V+n*V! ( alpha A x beta y -- y=alpha*A.x+b*y )
+GENERIC: n*V(*)V+M! ( alpha x y A -- A=alpha*x(*)y+A )
+GENERIC: n*V(*)Vconj+M! ( alpha x y A -- A=alpha*x(*)yconj+A )
+GENERIC: n*M.M+n*M! ( alpha A B beta C -- C=alpha*A.B+beta*C )
+
+<PRIVATE
+
+: (blas-transpose) ( matrix -- integer )
+    transpose>> [ CblasTrans ] [ CblasNoTrans ] if ;
+
+GENERIC: (blas-matrix-like) ( data ld rows cols transpose exemplar -- matrix )
+
+: (validate-gemv) ( A x y -- )
+    {
+        [ drop [ Mwidth  ] [ length>> ] bi* = ]
+        [ nip  [ Mheight ] [ length>> ] bi* = ]
+    } 3&&
+    [ "Mismatched matrix and vectors in matrix-vector multiplication" throw ]
+    unless ;
+
+:: (prepare-gemv)
+    ( alpha A x beta y >c-arg -- order A-trans m n alpha A-data A-ld x-data x-inc beta y-data y-inc
+                                 y )
+    A x y (validate-gemv)
+    CblasColMajor
+    A (blas-transpose)
+    A rows>>
+    A cols>>
+    alpha >c-arg call
+    A underlying>>
+    A ld>>
+    x underlying>>
+    x inc>>
+    beta >c-arg call
+    y underlying>>
+    y inc>>
+    y ; inline
+
+: (validate-ger) ( x y A -- )
+    {
+        [ nip  [ length>> ] [ Mheight ] bi* = ]
+        [ nipd [ length>> ] [ Mwidth  ] bi* = ]
+    } 3&&
+    [ "Mismatched vertices and matrix in vector outer product" throw ]
+    unless ;
+
+:: (prepare-ger)
+    ( alpha x y A >c-arg -- order m n alpha x-data x-inc y-data y-inc A-data A-ld
+                            A )
+    x y A (validate-ger)
+    CblasColMajor
+    A rows>>
+    A cols>>
+    alpha >c-arg call
+    x underlying>>
+    x inc>>
+    y underlying>>
+    y inc>>
+    A underlying>>
+    A ld>>
+    A f >>transpose ; inline
+
+: (validate-gemm) ( A B C -- )
+    {
+        [ drop [ Mwidth  ] [ Mheight ] bi* = ]
+        [ nip  [ Mheight ] bi@ = ]
+        [ nipd [ Mwidth  ] bi@ = ]
+    } 3&&
+    [ "Mismatched matrices in matrix multiplication" throw ]
+    unless ;
+
+:: (prepare-gemm)
+    ( alpha A B beta C >c-arg -- order A-trans B-trans m n k alpha A-data A-ld B-data B-ld beta C-data C-ld
+                                 C )
+    A B C (validate-gemm)
+    CblasColMajor
+    A (blas-transpose)
+    B (blas-transpose)
+    C rows>>
+    C cols>>
+    A Mwidth
+    alpha >c-arg call
+    A underlying>>
+    A ld>>
+    B underlying>>
+    B ld>>
+    beta >c-arg call
+    C underlying>>
+    C ld>>
+    C f >>transpose ; inline
+
+: (>matrix) ( arrays >c-array -- c-array ld rows cols transpose )
+    '[ <merged> @ ] [ length dup ] [ first length ] tri f ; inline
+
+PRIVATE>
+
+! XXX should do a dense clone
+M: blas-matrix-base clone
+    [ 
+        [ {
+            [ underlying>> ]
+            [ ld>> ]
+            [ cols>> ]
+            [ element-type heap-size ]
+        } cleave * * memory>byte-array ]
+        [ {
+            [ ld>> ]
+            [ rows>> ]
+            [ cols>> ]
+            [ transpose>> ]
+        } cleave ]
+        bi
+    ] keep (blas-matrix-like) ;
+
+! XXX try rounding stride to next 128 bit bound for better vectorizin'
+: <empty-matrix> ( rows cols exemplar -- matrix )
+    [ element-type [ * ] dip <c-array> ]
+    [ 2drop ]
+    [ f swap (blas-matrix-like) ] 3tri ;
+
+: n*M.V+n*V ( alpha A x beta y -- alpha*A.x+b*y )
+    clone n*M.V+n*V! ;
+: n*V(*)V+M ( alpha x y A -- alpha*x(*)y+A )
+    clone n*V(*)V+M! ;
+: n*V(*)Vconj+M ( alpha x y A -- alpha*x(*)yconj+A )
+    clone n*V(*)Vconj+M! ;
+: n*M.M+n*M ( alpha A B beta C -- alpha*A.B+beta*C )
+    clone n*M.M+n*M! ;
+
+: n*M.V ( alpha A x -- alpha*A.x )
+    1.0 2over [ Mheight ] dip <empty-vector>
+    n*M.V+n*V! ; inline
+
+: M.V ( A x -- A.x )
+    1.0 -rot n*M.V ; inline
+
+: n*V(*)V ( alpha x y -- alpha*x(*)y )
+    2dup [ length>> ] bi@ pick <empty-matrix>
+    n*V(*)V+M! ;
+: n*V(*)Vconj ( alpha x y -- alpha*x(*)yconj )
+    2dup [ length>> ] bi@ pick <empty-matrix>
+    n*V(*)Vconj+M! ;
+
+: V(*) ( x y -- x(*)y )
+    1.0 -rot n*V(*)V ; inline
+: V(*)conj ( x y -- x(*)yconj )
+    1.0 -rot n*V(*)Vconj ; inline
+
+: n*M.M ( alpha A B -- alpha*A.B )
+    2dup [ Mheight ] [ Mwidth ] bi* pick <empty-matrix> 
+    1.0 swap n*M.M+n*M! ;
+
+: M. ( A B -- A.B )
+    1.0 -rot n*M.M ; inline
+
+:: (Msub) ( matrix row col height width -- data ld rows cols )
+    matrix ld>> col * row + matrix element-type heap-size *
+    matrix underlying>> <displaced-alien>
+    matrix ld>>
+    height
+    width ;
+
+:: Msub ( matrix row col height width -- sub )
+    matrix dup transpose>>
+    [ col row width height ]
+    [ row col height width ] if (Msub)
+    matrix transpose>> matrix (blas-matrix-like) ;
+
+TUPLE: blas-matrix-rowcol-sequence
+    parent inc rowcol-length rowcol-jump length ;
+C: <blas-matrix-rowcol-sequence> blas-matrix-rowcol-sequence
+
+INSTANCE: blas-matrix-rowcol-sequence sequence
+
+M: blas-matrix-rowcol-sequence length
+    length>> ;
+M: blas-matrix-rowcol-sequence nth-unsafe
+    {
+        [
+            [ rowcol-jump>> ]
+            [ parent>> element-type heap-size ]
+            [ parent>> underlying>> ] tri
+            [ * * ] dip <displaced-alien>
+        ]
+        [ rowcol-length>> ]
+        [ inc>> ]
+        [ parent>> ]
+    } cleave (blas-vector-like) ;
+
+: (Mcols) ( A -- columns )
+    { [ ] [ drop 1 ] [ rows>> ] [ ld>> ] [ cols>> ] }
+    cleave <blas-matrix-rowcol-sequence> ;
+: (Mrows) ( A -- rows )
+    { [ ] [ ld>> ] [ cols>> ] [ drop 1 ] [ rows>> ] }
+    cleave <blas-matrix-rowcol-sequence> ;
+
+: Mrows ( A -- rows )
+    dup transpose>> [ (Mcols) ] [ (Mrows) ] if ;
+: Mcols ( A -- cols )
+    dup transpose>> [ (Mrows) ] [ (Mcols) ] if ;
+
+: n*M! ( n A -- A=n*A )
+    [ (Mcols) [ n*V! drop ] with each ] keep ;
+
+: n*M ( n A -- n*A )
+    clone n*M! ; inline
+
+: M*n ( A n -- A*n )
+    swap n*M ; inline
+: M/n ( A n -- A/n )
+    recip swap n*M ; inline
+
+: Mtranspose ( matrix -- matrix^T )
+    [ {
+        [ underlying>> ]
+        [ ld>> ] [ rows>> ]
+        [ cols>> ]
+        [ transpose>> not ]
+    } cleave ] keep (blas-matrix-like) ;
+
+M: blas-matrix-base equal?
+    {
+        [ [ Mwidth ] bi@ = ]
+        [ [ Mcols ] bi@ [ = ] 2all? ]
+    } 2&& ;
+
+<<
+
+FUNCTOR: (define-blas-matrix) ( TYPE T U C -- )
+
+VECTOR      IS ${TYPE}-blas-vector
+<VECTOR>    IS <${TYPE}-blas-vector>
+>ARRAY      IS >${TYPE}-array
+TYPE>ARG    IS ${TYPE}>arg
+XGEMV       IS cblas_${T}gemv
+XGEMM       IS cblas_${T}gemm
+XGERU       IS cblas_${T}ger${U}
+XGERC       IS cblas_${T}ger${C}
+
+MATRIX      DEFINES ${TYPE}-blas-matrix
+<MATRIX>    DEFINES <${TYPE}-blas-matrix>
+>MATRIX     DEFINES >${TYPE}-blas-matrix
+
+WHERE
+
+TUPLE: MATRIX < blas-matrix-base ;
+: <MATRIX> ( underlying ld rows cols transpose -- matrix )
+    MATRIX boa ; inline
+
+M: MATRIX element-type
+    drop TYPE ;
+M: MATRIX (blas-matrix-like)
+    drop <MATRIX> execute ;
+M: VECTOR (blas-matrix-like)
+    drop <MATRIX> execute ;
+M: MATRIX (blas-vector-like)
+    drop <VECTOR> execute ;
+
+: >MATRIX ( arrays -- matrix )
+    [ >ARRAY execute underlying>> ] (>matrix)
+    <MATRIX> execute ;
+
+M: VECTOR n*M.V+n*V!
+    [ TYPE>ARG execute ] (prepare-gemv)
+    [ XGEMV execute ] dip ;
+M: MATRIX n*M.M+n*M!
+    [ TYPE>ARG execute ] (prepare-gemm)
+    [ XGEMM execute ] dip ;
+M: MATRIX n*V(*)V+M!
+    [ TYPE>ARG execute ] (prepare-ger)
+    [ XGERU execute ] dip ;
+M: MATRIX n*V(*)Vconj+M!
+    [ TYPE>ARG execute ] (prepare-ger)
+    [ XGERC execute ] dip ;
+
+;FUNCTOR
+
+
+: define-real-blas-matrix ( TYPE T -- )
+    "" "" (define-blas-matrix) ;
+: define-complex-blas-matrix ( TYPE T -- )
+    "u" "c" (define-blas-matrix) ;
+
+"float"          "s" define-real-blas-matrix
+"double"         "d" define-real-blas-matrix
+"float-complex"  "c" define-complex-blas-matrix
+"double-complex" "z" define-complex-blas-matrix
+
+>>
diff --git a/basis/math/blas/matrices/summary.txt b/basis/math/blas/matrices/summary.txt
new file mode 100644 (file)
index 0000000..4cc5684
--- /dev/null
@@ -0,0 +1 @@
+BLAS level 2 and 3 matrix-vector and matrix-matrix operations
diff --git a/basis/math/blas/matrices/tags.txt b/basis/math/blas/matrices/tags.txt
new file mode 100644 (file)
index 0000000..5118958
--- /dev/null
@@ -0,0 +1,3 @@
+math
+bindings
+unportable
diff --git a/basis/math/blas/syntax/authors.txt b/basis/math/blas/syntax/authors.txt
new file mode 100644 (file)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/basis/math/blas/syntax/summary.txt b/basis/math/blas/syntax/summary.txt
new file mode 100644 (file)
index 0000000..a71bebb
--- /dev/null
@@ -0,0 +1 @@
+Literal syntax for BLAS vectors and matrices
diff --git a/basis/math/blas/syntax/syntax-docs.factor b/basis/math/blas/syntax/syntax-docs.factor
new file mode 100644 (file)
index 0000000..6b58df7
--- /dev/null
@@ -0,0 +1,78 @@
+USING: help.markup help.syntax math.blas.matrices math.blas.vectors multiline ;
+IN: math.blas.syntax
+
+ARTICLE: "math.blas.syntax" "BLAS interface literal syntax"
+"Vectors:"
+{ $subsection POSTPONE: svector{ }
+{ $subsection POSTPONE: dvector{ }
+{ $subsection POSTPONE: cvector{ }
+{ $subsection POSTPONE: zvector{ }
+"Matrices:"
+{ $subsection POSTPONE: smatrix{ }
+{ $subsection POSTPONE: dmatrix{ }
+{ $subsection POSTPONE: cmatrix{ }
+{ $subsection POSTPONE: zmatrix{ } ;
+
+ABOUT: "math.blas.syntax"
+
+HELP: svector{
+{ $syntax "svector{ 1.0 -2.0 3.0 }" }
+{ $description "Construct a literal " { $link float-blas-vector } "." } ;
+
+HELP: dvector{
+{ $syntax "dvector{ 1.0 -2.0 3.0 }" }
+{ $description "Construct a literal " { $link double-blas-vector } "." } ;
+
+HELP: cvector{
+{ $syntax "cvector{ 1.0 -2.0 C{ 3.0 -1.0 } }" }
+{ $description "Construct a literal " { $link float-complex-blas-vector } "." } ;
+
+HELP: zvector{
+{ $syntax "dvector{ 1.0 -2.0 C{ 3.0 -1.0 } }" }
+{ $description "Construct a literal " { $link double-complex-blas-vector } "." } ;
+
+{
+    POSTPONE: svector{ POSTPONE: dvector{
+    POSTPONE: cvector{ POSTPONE: zvector{
+} related-words
+
+HELP: smatrix{
+{ $syntax <" smatrix{
+    { 1.0 0.0 0.0 1.0 }
+    { 0.0 1.0 0.0 2.0 }
+    { 0.0 0.0 1.0 3.0 }
+    { 0.0 0.0 0.0 1.0 }
+} "> }
+{ $description "Construct a literal " { $link float-blas-matrix } ". Note that although BLAS matrices are stored in column-major order, the literal is specified in row-major order." } ;
+
+HELP: dmatrix{
+{ $syntax <" dmatrix{
+    { 1.0 0.0 0.0 1.0 }
+    { 0.0 1.0 0.0 2.0 }
+    { 0.0 0.0 1.0 3.0 }
+    { 0.0 0.0 0.0 1.0 }
+} "> }
+{ $description "Construct a literal " { $link double-blas-matrix } ". Note that although BLAS matrices are stored in column-major order, the literal is specified in row-major order." } ;
+
+HELP: cmatrix{
+{ $syntax <" cmatrix{
+    { 1.0 0.0           0.0 1.0           }
+    { 0.0 C{ 0.0 1.0 }  0.0 2.0           }
+    { 0.0 0.0          -1.0 3.0           }
+    { 0.0 0.0           0.0 C{ 0.0 -1.0 } }
+} "> }
+{ $description "Construct a literal " { $link float-complex-blas-matrix } ". Note that although BLAS matrices are stored in column-major order, the literal is specified in row-major order." } ;
+
+HELP: zmatrix{
+{ $syntax <" zmatrix{
+    { 1.0 0.0           0.0 1.0           }
+    { 0.0 C{ 0.0 1.0 }  0.0 2.0           }
+    { 0.0 0.0          -1.0 3.0           }
+    { 0.0 0.0           0.0 C{ 0.0 -1.0 } }
+} "> }
+{ $description "Construct a literal " { $link double-complex-blas-matrix } ". Note that although BLAS matrices are stored in column-major order, the literal is specified in row-major order." } ;
+
+{
+    POSTPONE: smatrix{ POSTPONE: dmatrix{
+    POSTPONE: cmatrix{ POSTPONE: zmatrix{
+} related-words
diff --git a/basis/math/blas/syntax/syntax.factor b/basis/math/blas/syntax/syntax.factor
new file mode 100644 (file)
index 0000000..95f9f7b
--- /dev/null
@@ -0,0 +1,44 @@
+USING: kernel math.blas.vectors math.blas.matrices parser
+arrays prettyprint.backend sequences ;
+IN: math.blas.syntax
+
+: svector{
+    \ } [ >float-blas-vector ] parse-literal ; parsing
+: dvector{
+    \ } [ >double-blas-vector ] parse-literal ; parsing
+: cvector{
+    \ } [ >float-complex-blas-vector ] parse-literal ; parsing
+: zvector{
+    \ } [ >double-complex-blas-vector ] parse-literal ; parsing
+
+: smatrix{
+    \ } [ >float-blas-matrix ] parse-literal ; parsing
+: dmatrix{
+    \ } [ >double-blas-matrix ] parse-literal ; parsing
+: cmatrix{
+    \ } [ >float-complex-blas-matrix ] parse-literal ; parsing
+: zmatrix{
+    \ } [ >double-complex-blas-matrix ] parse-literal ; parsing
+
+M: float-blas-vector pprint-delims
+    drop \ svector{ \ } ;
+M: double-blas-vector pprint-delims
+    drop \ dvector{ \ } ;
+M: float-complex-blas-vector pprint-delims
+    drop \ cvector{ \ } ;
+M: double-complex-blas-vector pprint-delims
+    drop \ zvector{ \ } ;
+
+M: float-blas-matrix pprint-delims
+    drop \ smatrix{ \ } ;
+M: double-blas-matrix pprint-delims
+    drop \ dmatrix{ \ } ;
+M: float-complex-blas-matrix pprint-delims
+    drop \ cmatrix{ \ } ;
+M: double-complex-blas-matrix pprint-delims
+    drop \ zmatrix{ \ } ;
+
+M: blas-vector-base >pprint-sequence ;
+M: blas-vector-base pprint* pprint-object ;
+M: blas-matrix-base >pprint-sequence Mrows ;
+M: blas-matrix-base pprint* pprint-object ;
diff --git a/basis/math/blas/syntax/tags.txt b/basis/math/blas/syntax/tags.txt
new file mode 100644 (file)
index 0000000..6a932d9
--- /dev/null
@@ -0,0 +1,2 @@
+math
+unportable
diff --git a/basis/math/blas/vectors/authors.txt b/basis/math/blas/vectors/authors.txt
new file mode 100644 (file)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/basis/math/blas/vectors/summary.txt b/basis/math/blas/vectors/summary.txt
new file mode 100644 (file)
index 0000000..f983e85
--- /dev/null
@@ -0,0 +1 @@
+BLAS level 1 vector operations
diff --git a/basis/math/blas/vectors/tags.txt b/basis/math/blas/vectors/tags.txt
new file mode 100644 (file)
index 0000000..6a932d9
--- /dev/null
@@ -0,0 +1,2 @@
+math
+unportable
diff --git a/basis/math/blas/vectors/vectors-docs.factor b/basis/math/blas/vectors/vectors-docs.factor
new file mode 100644 (file)
index 0000000..cb26d67
--- /dev/null
@@ -0,0 +1,131 @@
+USING: alien byte-arrays help.markup help.syntax math sequences ;
+IN: math.blas.vectors
+
+ARTICLE: "math.blas.vectors" "BLAS interface vector operations"
+"Slicing vectors:"
+{ $subsection Vsub }
+"Taking the norm (magnitude) of a vector:"
+{ $subsection Vnorm }
+"Summing and taking the maximum of elements:"
+{ $subsection Vasum }
+{ $subsection Viamax }
+{ $subsection Vamax }
+"Scalar-vector products:"
+{ $subsection n*V! }
+{ $subsection n*V }
+{ $subsection V*n }
+{ $subsection V/n }
+{ $subsection Vneg }
+"Vector addition:" 
+{ $subsection n*V+V! }
+{ $subsection n*V+V }
+{ $subsection V+ }
+{ $subsection V- }
+"Vector inner products:"
+{ $subsection V. }
+{ $subsection V.conj } ;
+
+ABOUT: "math.blas.vectors"
+
+HELP: blas-vector-base
+{ $class-description "The base class for all BLAS vector types. Objects of this type should not be created directly; instead, instantiate one of the typed subclasses:"
+{ $list
+    { { $link float-blas-vector } }
+    { { $link double-blas-vector } }
+    { { $link float-complex-blas-vector } }
+    { { $link double-complex-blas-vector } }
+}
+"All of these subclasses share the same tuple layout:"
+{ $list
+    { { $snippet "underlying" } " contains an alien pointer referencing or byte-array containing a packed array of float, double, float complex, or double complex values;" }
+    { { $snippet "length" } " indicates the length of the vector;" }
+    { "and " { $snippet "inc" } " indicates the distance, in elements, between elements." }
+} } ;
+
+HELP: float-blas-vector
+{ $class-description "A vector of single-precision floating-point values. For details on the tuple layout, see " { $link blas-vector-base } "." } ;
+HELP: double-blas-vector
+{ $class-description "A vector of double-precision floating-point values. For details on the tuple layout, see " { $link blas-vector-base } "." } ;
+HELP: float-complex-blas-vector
+{ $class-description "A vector of single-precision floating-point complex values. Complex values are stored in memory as two consecutive float values, real part then imaginary part. For details on the tuple layout, see " { $link blas-vector-base } "." } ;
+HELP: double-complex-blas-vector
+{ $class-description "A vector of single-precision floating-point complex values. Complex values are stored in memory as two consecutive float values, real part then imaginary part. For details on the tuple layout, see " { $link blas-vector-base } "." } ;
+
+HELP: n*V+V!
+{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "y=alpha*x+y" blas-vector-base } }
+{ $description "Calculate the vector sum " { $snippet "αx + y" } " and replace the existing contents of y with the result. Corresponds to the xAXPY routines in BLAS." }
+{ $side-effects "y" } ;
+
+HELP: n*V!
+{ $values { "alpha" number } { "x" blas-vector-base } { "x=alpha*x" blas-vector-base } }
+{ $description "Calculate the scalar-vector product " { $snippet "αx" } " and replace the existing contents of x with the result. Corresponds to the xSCAL routines in BLAS." }
+{ $side-effects "x" } ;
+
+HELP: V.
+{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x.y" number } }
+{ $description "Calculate the inner product " { $snippet "x⋅y" } ". Corresponds to the xDOT and xDOTU routines in BLAS." } ;
+
+HELP: V.conj
+{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "xconj.y" number } }
+{ $description "Calculate the conjugate inner product " { $snippet "x̅⋅y" } ". Corresponds to the xDOTC routines in BLAS." } ;
+
+HELP: Vnorm
+{ $values { "x" blas-vector-base } { "norm" number } }
+{ $description "Calculate the norm-2, i.e., the magnitude or absolute value, of " { $snippet "x" } " (" { $snippet "‖x‖₂" } "). Corresponds to the xNRM2 routines in BLAS." } ;
+
+HELP: Vasum
+{ $values { "x" blas-vector-base } { "sum" number } }
+{ $description "Calculate the sum of the norm-1s of the elements of " { $snippet "x" } " (" { $snippet "Σ ‖xᵢ‖₁" } "). Corresponds to the xASUM routines in BLAS." } ;
+
+HELP: Vswap
+{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x=y" blas-vector-base } { "y=x" blas-vector-base } }
+{ $description "Swap the contents of " { $snippet "x" } " and " { $snippet "y" } " in place. Corresponds to the xSWAP routines in BLAS." }
+{ $side-effects "x" "y" } ;
+
+HELP: Viamax
+{ $values { "x" blas-vector-base } { "max-i" integer } }
+{ $description "Return the index of the element in " { $snippet "x" } " with the largest norm-1. If more than one element has the same norm-1, returns the smallest index. Corresponds to the IxAMAX routines in BLAS." } ;
+
+HELP: Vamax
+{ $values { "x" blas-vector-base } { "max" number } }
+{ $description "Return the value of the element in " { $snippet "x" } " with the largest norm-1. If more than one element has the same norm-1, returns the first element. Corresponds to the IxAMAX routines in BLAS." } ;
+
+{ Viamax Vamax } related-words
+
+HELP: <zero-vector>
+{ $values { "exemplar" blas-vector-base } { "zero" blas-vector-base } }
+{ $description "Return a vector of zeros with the same length and element type as " { $snippet "v" } ". The vector is constructed with an " { $snippet "inc" } " of zero, so it is not suitable for receiving results from BLAS functions; it is intended to be used as a term in other vector calculations. To construct an empty vector that can be used to receive results, see " { $link <empty-vector> } "." } ;
+
+HELP: n*V+V
+{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "alpha*x+y" blas-vector-base } }
+{ $description "Calculate the vector sum " { $snippet "αx + y" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " and " { $snippet "y" } " containing the result. Corresponds to the xAXPY routines in BLAS." } ;
+
+HELP: n*V
+{ $values { "alpha" "a number" } { "x" blas-vector-base } { "alpha*x" blas-vector-base } }
+{ $description "Calculate the scalar-vector product " { $snippet "αx" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " containing the result. Corresponds to the xSCAL routines in BLAS." } ;
+
+HELP: V+
+{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x+y" blas-vector-base } }
+{ $description "Calculate the vector sum " { $snippet "x + y" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " and " { $snippet "y" } " containing the result. Corresponds to the xAXPY routines in BLAS." } ;
+
+HELP: V-
+{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x-y" blas-vector-base } }
+{ $description "Calculate the vector difference " { $snippet "x – y" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " and " { $snippet "y" } " containing the result. Corresponds to the xAXPY routines in BLAS." } ;
+
+HELP: Vneg
+{ $values { "x" blas-vector-base } { "-x" blas-vector-base } }
+{ $description "Negate the elements of " { $snippet "x" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " containing the result." } ;
+
+HELP: V*n
+{ $values { "x" blas-vector-base } { "alpha" number } { "x*alpha" blas-vector-base } }
+{ $description "Calculate the scalar-vector product " { $snippet "αx" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " containing the result. Corresponds to the xSCAL routines in BLAS." } ;
+
+HELP: V/n
+{ $values { "x" blas-vector-base } { "alpha" number } { "x/alpha" blas-vector-base } }
+{ $description "Calculate the scalar-vector product " { $snippet "(1/α)x" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " containing the result. Corresponds to the xSCAL routines in BLAS." } ;
+
+{ n*V+V! n*V! n*V+V n*V V+ V- Vneg V*n V/n } related-words
+
+HELP: Vsub
+{ $values { "v" blas-vector-base } { "start" integer } { "length" integer } { "sub" blas-vector-base } }
+{ $description "Slice a subvector out of " { $snippet "v" } " starting at " { $snippet "start" } " with the given " { $snippet "length" } ". The subvector will share storage with the parent vector." } ;
diff --git a/basis/math/blas/vectors/vectors-tests.factor b/basis/math/blas/vectors/vectors-tests.factor
new file mode 100644 (file)
index 0000000..5f9e8fd
--- /dev/null
@@ -0,0 +1,180 @@
+USING: kernel math.blas.vectors math.blas.syntax sequences tools.test ;
+IN: math.blas.vectors.tests
+
+! clone
+
+[ svector{ 1.0 2.0 3.0 } ] [ svector{ 1.0 2.0 3.0 } clone ] unit-test
+[ f ] [ svector{ 1.0 2.0 3.0 } dup clone eq? ] unit-test
+[ dvector{ 1.0 2.0 3.0 } ] [ dvector{ 1.0 2.0 3.0 } clone ] unit-test
+[ f ] [ dvector{ 1.0 2.0 3.0 } dup clone eq? ] unit-test
+[ cvector{ 1.0 C{ 2.0 3.0 } 4.0 } ] [ cvector{ 1.0 C{ 2.0 3.0 } 4.0 } clone ] unit-test
+[ f ] [ cvector{ 1.0 C{ 2.0 3.0 } 4.0 } dup clone eq? ] unit-test
+[ zvector{ 1.0 C{ 2.0 3.0 } 4.0 } ] [ zvector{ 1.0 C{ 2.0 3.0 } 4.0 } clone ] unit-test
+[ f ] [ zvector{ 1.0 C{ 2.0 3.0 } 4.0 } dup clone eq? ] unit-test
+
+! nth
+
+[ 1.0 ] [ 2 svector{ 3.0 2.0 1.0 } nth ] unit-test
+[ 1.0 ] [ 2 dvector{ 3.0 2.0 1.0 } nth ] unit-test
+
+[ C{ 1.0 2.0 } ]
+[ 2 cvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 1.0 2.0 } } nth ] unit-test
+
+[ C{ 1.0 2.0 } ]
+[ 2 zvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 1.0 2.0 } } nth ] unit-test
+
+! set-nth
+
+[ svector{ 3.0 2.0 0.0 } ] [ 0.0 2 svector{ 3.0 2.0 1.0 } [ set-nth ] keep ] unit-test
+[ dvector{ 3.0 2.0 0.0 } ] [ 0.0 2 dvector{ 3.0 2.0 1.0 } [ set-nth ] keep ] unit-test
+
+[ cvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 3.0 4.0 } } ] [
+    C{ 3.0 4.0 } 2
+    cvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 1.0 2.0 } }
+    [ set-nth ] keep
+] unit-test
+[ zvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 3.0 4.0 } } ] [
+    C{ 3.0 4.0 } 2
+    zvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 1.0 2.0 } }
+    [ set-nth ] keep
+] unit-test
+
+! V+
+
+[ svector{ 11.0 22.0 } ] [ svector{ 1.0 2.0 } svector{ 10.0 20.0 } V+ ] unit-test
+[ dvector{ 11.0 22.0 } ] [ dvector{ 1.0 2.0 } dvector{ 10.0 20.0 } V+ ] unit-test
+
+[ cvector{ 11.0 C{ 22.0 33.0 } } ]
+[ cvector{ 1.0 C{ 2.0 3.0 } } cvector{ 10.0 C{ 20.0 30.0 } } V+ ]
+unit-test
+
+[ zvector{ 11.0 C{ 22.0 33.0 } } ]
+[ zvector{ 1.0 C{ 2.0 3.0 } } zvector{ 10.0 C{ 20.0 30.0 } } V+ ]
+unit-test
+
+! V-
+
+[ svector{ 9.0 18.0 } ] [ svector{ 10.0 20.0 } svector{ 1.0 2.0 } V- ] unit-test
+[ dvector{ 9.0 18.0 } ] [ dvector{ 10.0 20.0 } dvector{ 1.0 2.0 } V- ] unit-test
+
+[ cvector{ 9.0 C{ 18.0 27.0 } } ]
+[ cvector{ 10.0 C{ 20.0 30.0 } } cvector{ 1.0 C{ 2.0 3.0 } } V- ]
+unit-test
+
+[ zvector{ 9.0 C{ 18.0 27.0 } } ]
+[ zvector{ 10.0 C{ 20.0 30.0 } } zvector{ 1.0 C{ 2.0 3.0 } } V- ]
+unit-test
+
+! Vneg
+
+[ svector{ 1.0 -2.0 } ] [ svector{ -1.0 2.0 } Vneg ] unit-test
+[ dvector{ 1.0 -2.0 } ] [ dvector{ -1.0 2.0 } Vneg ] unit-test
+
+[ cvector{ 1.0 C{ -2.0 3.0 } } ] [ cvector{ -1.0 C{ 2.0 -3.0 } } Vneg ] unit-test
+[ zvector{ 1.0 C{ -2.0 3.0 } } ] [ zvector{ -1.0 C{ 2.0 -3.0 } } Vneg ] unit-test
+
+! n*V
+
+[ svector{ 100.0 200.0 } ] [ 10.0 svector{ 10.0 20.0 } n*V ] unit-test
+[ dvector{ 100.0 200.0 } ] [ 10.0 dvector{ 10.0 20.0 } n*V ] unit-test
+
+[ cvector{ C{ 20.0 4.0 } C{ 8.0 12.0 } } ]
+[ C{ 10.0 2.0 } cvector{ 2.0 C{ 1.0 1.0 } } n*V ]
+unit-test
+
+[ zvector{ C{ 20.0 4.0 } C{ 8.0 12.0 } } ]
+[ C{ 10.0 2.0 } zvector{ 2.0 C{ 1.0 1.0 } } n*V ]
+unit-test
+
+! V*n
+
+[ svector{ 100.0 200.0 } ] [ svector{ 10.0 20.0 } 10.0 V*n ] unit-test
+[ dvector{ 100.0 200.0 } ] [ dvector{ 10.0 20.0 } 10.0 V*n ] unit-test
+
+[ cvector{ C{ 20.0 4.0 } C{ 8.0 12.0 } } ]
+[ cvector{ 2.0 C{ 1.0 1.0 } } C{ 10.0 2.0 } V*n ]
+unit-test
+
+[ zvector{ C{ 20.0 4.0 } C{ 8.0 12.0 } } ]
+[ zvector{ 2.0 C{ 1.0 1.0 } } C{ 10.0 2.0 } V*n ]
+unit-test
+
+! V/n
+
+[ svector{ 1.0 2.0 } ] [ svector{ 4.0 8.0 } 4.0 V/n ] unit-test
+[ dvector{ 1.0 2.0 } ] [ dvector{ 4.0 8.0 } 4.0 V/n ] unit-test
+
+[ cvector{ C{ 0.0 -4.0 } 1.0 } ]
+[ cvector{ C{ 4.0 -4.0 } C{ 1.0 1.0 } } C{ 1.0 1.0 } V/n ]
+unit-test
+
+[ zvector{ C{ 0.0 -4.0 } 1.0 } ]
+[ zvector{ C{ 4.0 -4.0 } C{ 1.0 1.0 } } C{ 1.0 1.0 } V/n ]
+unit-test
+
+! V.
+
+[ 7.0 ] [ svector{ 1.0 2.5 } svector{ 2.0 2.0 } V. ] unit-test
+[ 7.0 ] [ dvector{ 1.0 2.5 } dvector{ 2.0 2.0 } V. ] unit-test
+[ C{ 7.0 7.0 } ] [ cvector{ C{ 1.0 1.0 } 2.5 } cvector{ 2.0 C{ 2.0 2.0 } } V. ] unit-test
+[ C{ 7.0 7.0 } ] [ zvector{ C{ 1.0 1.0 } 2.5 } zvector{ 2.0 C{ 2.0 2.0 } } V. ] unit-test
+
+! V.conj
+
+[ C{ 7.0 3.0 } ] [ cvector{ C{ 1.0 1.0 } 2.5 } cvector{ 2.0 C{ 2.0 2.0 } } V.conj ] unit-test
+[ C{ 7.0 3.0 } ] [ zvector{ C{ 1.0 1.0 } 2.5 } zvector{ 2.0 C{ 2.0 2.0 } } V.conj ] unit-test
+
+! Vnorm
+
+[ 5.0 ] [ svector{ 3.0 4.0 } Vnorm ] unit-test
+[ 5.0 ] [ dvector{ 3.0 4.0 } Vnorm ] unit-test
+
+[ 13.0 ] [ cvector{ C{ 3.0 4.0 } 12.0 } Vnorm ] unit-test
+[ 13.0 ] [ zvector{ C{ 3.0 4.0 } 12.0 } Vnorm ] unit-test
+
+! Vasum
+
+[ 6.0 ] [ svector{ 1.0 2.0 -3.0 } Vasum ] unit-test
+[ 6.0 ] [ dvector{ 1.0 2.0 -3.0 } Vasum ] unit-test
+
+[ 15.0 ] [ cvector{ 1.0 C{ -2.0 3.0 } C{ 4.0 -5.0 } } Vasum ] unit-test
+[ 15.0 ] [ zvector{ 1.0 C{ -2.0 3.0 } C{ 4.0 -5.0 } } Vasum ] unit-test
+
+! Vswap
+
+[ svector{ 2.0 2.0 } svector{ 1.0 1.0 } ]
+[ svector{ 1.0 1.0 } svector{ 2.0 2.0 } Vswap ]
+unit-test
+
+[ dvector{ 2.0 2.0 } dvector{ 1.0 1.0 } ]
+[ dvector{ 1.0 1.0 } dvector{ 2.0 2.0 } Vswap ]
+unit-test
+
+[ cvector{ 2.0 C{ 2.0 2.0 } } cvector{ C{ 1.0 1.0 } 1.0 } ]
+[ cvector{ C{ 1.0 1.0 } 1.0 } cvector{ 2.0 C{ 2.0 2.0 } } Vswap ]
+unit-test
+
+[ zvector{ 2.0 C{ 2.0 2.0 } } zvector{ C{ 1.0 1.0 } 1.0 } ]
+[ zvector{ C{ 1.0 1.0 } 1.0 } zvector{ 2.0 C{ 2.0 2.0 } } Vswap ]
+unit-test
+
+! Viamax
+
+[ 3 ] [ svector{ 1.0 -5.0 4.0 -6.0 -1.0 } Viamax ] unit-test
+[ 3 ] [ dvector{ 1.0 -5.0 4.0 -6.0 -1.0 } Viamax ] unit-test
+[ 0 ] [ cvector{ C{ 2.0 -5.0 } 4.0 -6.0 -1.0 } Viamax ] unit-test
+[ 0 ] [ zvector{ C{ 2.0 -5.0 } 4.0 -6.0 -1.0 } Viamax ] unit-test
+
+! Vamax
+
+[ -6.0 ] [ svector{ 1.0 -5.0 4.0 -6.0 -1.0 } Vamax ] unit-test
+[ -6.0 ] [ dvector{ 1.0 -5.0 4.0 -6.0 -1.0 } Vamax ] unit-test
+[ C{ 2.0 -5.0 } ] [ cvector{ C{ 2.0 -5.0 } 4.0 -6.0 -1.0 } Vamax ] unit-test
+[ C{ 2.0 -5.0 } ] [ zvector{ C{ 2.0 -5.0 } 4.0 -6.0 -1.0 } Vamax ] unit-test
+
+! Vsub
+
+[ svector{ -5.0 4.0 -6.0 } ] [ svector{ 1.0 -5.0 4.0 -6.0 -1.0 } 1 3 Vsub ] unit-test
+[ dvector{ -5.0 4.0 -6.0 } ] [ dvector{ 1.0 -5.0 4.0 -6.0 -1.0 } 1 3 Vsub ] unit-test
+[ cvector{ -5.0 C{ 4.0 3.0 } -6.0 } ] [ cvector{ 1.0 -5.0 C{ 4.0 3.0 } -6.0 -1.0 } 1 3 Vsub ] unit-test
+[ zvector{ -5.0 C{ 4.0 3.0 } -6.0 } ] [ zvector{ 1.0 -5.0 C{ 4.0 3.0 } -6.0 -1.0 } 1 3 Vsub ] unit-test
diff --git a/basis/math/blas/vectors/vectors.factor b/basis/math/blas/vectors/vectors.factor
new file mode 100755 (executable)
index 0000000..db027b0
--- /dev/null
@@ -0,0 +1,272 @@
+USING: accessors alien alien.c-types arrays byte-arrays combinators
+combinators.short-circuit fry kernel math math.blas.cblas
+math.complex math.functions math.order sequences.complex
+sequences.complex-components sequences sequences.private
+functors words locals
+specialized-arrays.float specialized-arrays.double
+specialized-arrays.direct.float specialized-arrays.direct.double ;
+IN: math.blas.vectors
+
+TUPLE: blas-vector-base underlying length inc ;
+
+INSTANCE: blas-vector-base virtual-sequence
+
+GENERIC: element-type ( v -- type )
+
+GENERIC: n*V+V! ( alpha x y -- y=alpha*x+y )
+GENERIC: n*V!   ( alpha x -- x=alpha*x )
+GENERIC: V. ( x y -- x.y )
+GENERIC: V.conj ( x y -- xconj.y )
+GENERIC: Vnorm ( x -- norm )
+GENERIC: Vasum ( x -- sum )
+GENERIC: Vswap ( x y -- x=y y=x )
+GENERIC: Viamax ( x -- max-i )
+
+<PRIVATE
+
+GENERIC: (blas-vector-like) ( data length inc exemplar -- vector )
+
+GENERIC: (blas-direct-array) ( blas-vector -- direct-array )
+
+: shorter-length ( v1 v2 -- length )
+    [ length>> ] bi@ min ; inline
+: data-and-inc ( v -- data inc )
+    [ underlying>> ] [ inc>> ] bi ; inline
+: datas-and-incs ( v1 v2 -- v1-data v1-inc v2-data v2-inc )
+    [ data-and-inc ] bi@ ; inline
+
+:: (prepare-copy)
+    ( v element-size -- length v-data v-inc v-dest-data v-dest-inc
+                        copy-data copy-length copy-inc )
+    v [ length>> ] [ data-and-inc ] bi
+    v length>> element-size * <byte-array>
+    1 
+    over v length>> 1 ;
+
+: (prepare-swap)
+    ( v1 v2 -- length v1-data v1-inc v2-data v2-inc
+               v1 v2 )
+    [ shorter-length ] [ datas-and-incs ] [ ] 2tri ;
+
+:: (prepare-axpy)
+    ( n v1 v2 -- length n v1-data v1-inc v2-data v2-inc
+                 v2 )
+    v1 v2 shorter-length
+    n
+    v1 v2 datas-and-incs
+    v2 ;
+
+:: (prepare-scal)
+    ( n v -- length n v-data v-inc
+             v )
+    v length>>
+    n
+    v data-and-inc
+    v ;
+
+: (prepare-dot) ( v1 v2 -- length v1-data v1-inc v2-data v2-inc )
+    [ shorter-length ] [ datas-and-incs ] 2bi ;
+
+: (prepare-nrm2) ( v -- length data inc )
+    [ length>> ] [ data-and-inc ] bi ;
+
+PRIVATE>
+
+: n*V+V ( alpha x y -- alpha*x+y ) clone n*V+V! ; inline
+: n*V ( alpha x -- alpha*x ) clone n*V! ; inline
+
+: V+ ( x y -- x+y )
+    1.0 -rot n*V+V ; inline
+: V- ( x y -- x-y )
+    -1.0 spin n*V+V ; inline
+
+: Vneg ( x -- -x )
+    -1.0 swap n*V ; inline
+
+: V*n ( x alpha -- x*alpha )
+    swap n*V ; inline
+: V/n ( x alpha -- x/alpha )
+    recip swap n*V ; inline
+
+: Vamax ( x -- max )
+    [ Viamax ] keep nth ; inline
+
+:: Vsub ( v start length -- sub )
+    v inc>> start * v element-type heap-size *
+    v underlying>> <displaced-alien>
+    length v inc>> v (blas-vector-like) ;
+
+: <zero-vector> ( exemplar -- zero )
+    [ element-type <c-object> ]
+    [ length>> 0 ]
+    [ (blas-vector-like) ] tri ;
+
+: <empty-vector> ( length exemplar -- vector )
+    [ element-type <c-array> ]
+    [ 1 swap ] 2bi
+    (blas-vector-like) ;
+
+M: blas-vector-base equal?
+    {
+        [ [ length ] bi@ = ]
+        [ [ = ] 2all? ]
+    } 2&& ;
+
+M: blas-vector-base length
+    length>> ;
+M: blas-vector-base virtual-seq
+    (blas-direct-array) ;
+M: blas-vector-base virtual@
+    [ inc>> * ] [ nip (blas-direct-array) ] 2bi ;
+
+: float>arg ( f -- f ) ; inline
+: double>arg ( f -- f ) ; inline
+: arg>float ( f -- f ) ; inline
+: arg>double ( f -- f ) ; inline
+
+<<
+
+FUNCTOR: (define-blas-vector) ( TYPE T -- )
+
+<DIRECT-ARRAY> IS <direct-${TYPE}-array>
+>ARRAY         IS >${TYPE}-array
+XCOPY          IS cblas_${T}copy
+XSWAP          IS cblas_${T}swap
+IXAMAX         IS cblas_i${T}amax
+
+VECTOR         DEFINES ${TYPE}-blas-vector
+<VECTOR>       DEFINES <${TYPE}-blas-vector>
+>VECTOR        DEFINES >${TYPE}-blas-vector
+
+WHERE
+
+TUPLE: VECTOR < blas-vector-base ;
+: <VECTOR> ( underlying length inc -- vector ) VECTOR boa ; inline
+
+: >VECTOR ( seq -- v )
+    [ >ARRAY execute underlying>> ] [ length ] bi 1 <VECTOR> execute ;
+
+M: VECTOR clone
+    TYPE heap-size (prepare-copy)
+    [ XCOPY execute ] 3dip <VECTOR> execute ;
+
+M: VECTOR element-type
+    drop TYPE ;
+M: VECTOR Vswap
+    (prepare-swap) [ XSWAP execute ] 2dip ;
+M: VECTOR Viamax
+    (prepare-nrm2) IXAMAX execute ;
+
+M: VECTOR (blas-vector-like)
+    drop <VECTOR> execute ;
+
+M: VECTOR (blas-direct-array)
+    [ underlying>> ]
+    [ [ length>> ] [ inc>> ] bi * ] bi
+    <DIRECT-ARRAY> execute ;
+
+;FUNCTOR
+
+
+FUNCTOR: (define-real-blas-vector) ( TYPE T -- )
+
+VECTOR         IS ${TYPE}-blas-vector
+XDOT           IS cblas_${T}dot
+XNRM2          IS cblas_${T}nrm2
+XASUM          IS cblas_${T}asum
+XAXPY          IS cblas_${T}axpy
+XSCAL          IS cblas_${T}scal
+
+WHERE
+
+M: VECTOR V.
+    (prepare-dot) XDOT execute ;
+M: VECTOR V.conj
+    (prepare-dot) XDOT execute ;
+M: VECTOR Vnorm
+    (prepare-nrm2) XNRM2 execute ;
+M: VECTOR Vasum
+    (prepare-nrm2) XASUM execute ;
+M: VECTOR n*V+V!
+    (prepare-axpy) [ XAXPY execute ] dip ;
+M: VECTOR n*V!
+    (prepare-scal) [ XSCAL execute ] dip ;
+
+;FUNCTOR
+
+
+FUNCTOR: (define-complex-helpers) ( TYPE -- )
+
+<DIRECT-COMPLEX-ARRAY> DEFINES <direct-${TYPE}-complex-array>
+>COMPLEX-ARRAY         DEFINES >${TYPE}-complex-array
+ARG>COMPLEX            DEFINES arg>${TYPE}-complex
+COMPLEX>ARG            DEFINES ${TYPE}-complex>arg
+<DIRECT-ARRAY>         IS      <direct-${TYPE}-array>
+>ARRAY                 IS      >${TYPE}-array
+
+WHERE
+
+: <DIRECT-COMPLEX-ARRAY> ( alien len -- sequence )
+    1 shift <DIRECT-ARRAY> execute <complex-sequence> ;
+: >COMPLEX-ARRAY ( sequence -- sequence )
+    <complex-components> >ARRAY execute ;
+: COMPLEX>ARG ( complex -- alien )
+    >rect 2array >ARRAY execute underlying>> ;
+: ARG>COMPLEX ( alien -- complex )
+    2 <DIRECT-ARRAY> execute first2 rect> ;
+
+;FUNCTOR
+
+
+FUNCTOR: (define-complex-blas-vector) ( TYPE C S -- )
+
+VECTOR         IS ${TYPE}-blas-vector
+XDOTU_SUB      IS cblas_${C}dotu_sub
+XDOTC_SUB      IS cblas_${C}dotc_sub
+XXNRM2         IS cblas_${S}${C}nrm2
+XXASUM         IS cblas_${S}${C}asum
+XAXPY          IS cblas_${C}axpy
+XSCAL          IS cblas_${C}scal
+TYPE>ARG       IS ${TYPE}>arg
+ARG>TYPE       IS arg>${TYPE}
+
+WHERE
+
+M: VECTOR V.
+    (prepare-dot) TYPE <c-object>
+    [ XDOTU_SUB execute ] keep
+    ARG>TYPE execute ;
+M: VECTOR V.conj
+    (prepare-dot) TYPE <c-object>
+    [ XDOTC_SUB execute ] keep
+    ARG>TYPE execute ;
+M: VECTOR Vnorm
+    (prepare-nrm2) XXNRM2 execute ;
+M: VECTOR Vasum
+    (prepare-nrm2) XXASUM execute ;
+M: VECTOR n*V+V!
+    [ TYPE>ARG execute ] 2dip
+    (prepare-axpy) [ XAXPY execute ] dip ;
+M: VECTOR n*V!
+    [ TYPE>ARG execute ] dip
+    (prepare-scal) [ XSCAL execute ] dip ;
+
+;FUNCTOR
+
+
+: define-real-blas-vector ( TYPE T -- )
+    [ (define-blas-vector) ]
+    [ (define-real-blas-vector) ] 2bi ;
+:: define-complex-blas-vector ( TYPE C S -- )
+    TYPE (define-complex-helpers)
+    TYPE "-complex" append
+    [ C (define-blas-vector) ]
+    [ C S (define-complex-blas-vector) ] bi ;
+
+"float"  "s" define-real-blas-vector
+"double" "d" define-real-blas-vector
+"float"  "c" "s" define-complex-blas-vector
+"double" "z" "d" define-complex-blas-vector
+
+>>
+
index a06a67e4a11facbd5026aacf71f27594d70a587e..cf0ce5f0bb5642b7f72e84fa6022a50eca9f9473 100644 (file)
@@ -97,7 +97,7 @@ IN: math.functions.tests
 
 : verify-gcd ( a b -- ? )
     2dup gcd
-    >r rot * swap rem r> = ; 
+    [ rot * swap rem ] dip = ; 
 
 [ t ] [ 123 124 verify-gcd ] unit-test
 [ t ] [ 50 120 verify-gcd ] unit-test
index 8411baf94ca310e063e7a68150985ab9d725b773..ff52c17047e98c0cac336d9b84d8f6c0bb308bd3 100644 (file)
@@ -46,7 +46,8 @@ M: real sqrt
 
 GENERIC# ^n 1 ( z w -- z^w )
 
-: (^n) 1 swap [ [ dupd * ] when [ sq ] dip ] each-bit nip ; inline
+: (^n) ( z w -- z^w )
+    1 swap [ [ dupd * ] when [ sq ] dip ] each-bit nip ; inline
 
 M: integer ^n
     [ factor-2s ] dip [ (^n) ] keep rot * shift ;
index 31c9e44b1d3337979ceeafe9dc035092850bee78..2077d82b70454623348d569b0ae14af486745ced 100644 (file)
@@ -11,7 +11,7 @@ HELP: rect
     "Rectangles are constructed by calling " { $link <rect> } " and " { $link <extent-rect> } "."
 } ;
 
-HELP: <rect> ( loc dim -- rect )
+HELP: <rect>
 { $values { "loc" "a pair of integers" } { "dim" "a pair of integers" } { "rect" "a new " { $link rect } } }
 { $description "Creates a new rectangle with the specified top-left location and dimensions." } ;
 
@@ -23,7 +23,7 @@ HELP: rect-bounds
 
 { rect-bounds rect-extent } related-words
 
-HELP: <extent-rect> ( loc ext -- rect )
+HELP: <extent-rect>
 { $values { "loc" "a pair of integers" } { "ext" "a pair of integers" } { "rect" "a new " { $link rect } } }
 { $description "Creates a new rectangle with the specified top-left and bottom-right corner locations." } ;
 
index d8a80340ba5773375e323039eef5a552d89ebc8a..4be8dcc9a734413676d045615b684d1c84d820ae 100644 (file)
@@ -93,7 +93,7 @@ $nl
 $nl
 "Intervals are created by calling " { $link [a,b] } ", " { $link (a,b) } ", " { $link [a,b) } ", " { $link (a,b] } " or " { $link [a,a] } "." } ;
 
-HELP: <interval> ( from to -- interval )
+HELP: <interval>
 { $values { "from" "a " { $snippet "{ point included? }" } " pair" } { "to" "a " { $snippet "{ point included? }" } " pair" } { "interval" interval } }
 { $description "Creates a new interval. Usually it is more convenient to create intervals using one of the following words instead:"
     { $list
index 8c29171a57dd31a153383d4cd16668a70498abfd..378ca2fb4b0cbb99774c8f35b93d03a68270e58a 100644 (file)
@@ -255,8 +255,7 @@ IN: math.intervals.tests
     0 pick interval-contains? over first \ recip eq? and [
         2drop t
     ] [
-        [ >r random-element ! dup .
-        r> first execute ] 2keep
+        [ [ random-element ] dip first execute ] 2keep
         second execute interval-contains?
     ] if ;
 
@@ -287,8 +286,7 @@ IN: math.intervals.tests
     0 pick interval-contains? over first { / /i mod rem } member? and [
         3drop t
     ] [
-        [ >r [ random-element ] bi@ ! 2dup . .
-        r> first execute ] 3keep
+        [ [ [ random-element ] bi@ ] dip first execute ] 3keep
         second execute interval-contains?
     ] if ;
 
@@ -304,7 +302,7 @@ IN: math.intervals.tests
 
 : comparison-test ( -- ? )
     random-interval random-interval random-comparison
-    [ >r [ random-element ] bi@ r> first execute ] 3keep
+    [ [ [ random-element ] bi@ ] dip first execute ] 3keep
     second execute dup incomparable eq? [ 2drop t ] [ = ] if ;
 
 [ t ] [ 40000 [ drop comparison-test ] all? ] unit-test
index ed76ccaedd1e6cc6a6d0f9181537bfe8cb069556..86c3b0de0b70bd009ba0fa0391d8b6dae2a6b9b3 100644 (file)
@@ -11,7 +11,7 @@ SYMBOL: full-interval
 
 TUPLE: interval { from read-only } { to read-only } ;
 
-: <interval> ( from to -- int )
+: <interval> ( from to -- interval )
     2dup [ first ] bi@ {
         { [ 2dup > ] [ 2drop 2drop empty-interval ] }
         { [ 2dup = ] [
diff --git a/basis/math/miller-rabin/authors.txt b/basis/math/miller-rabin/authors.txt
new file mode 100755 (executable)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/math/miller-rabin/miller-rabin-tests.factor b/basis/math/miller-rabin/miller-rabin-tests.factor
new file mode 100644 (file)
index 0000000..9ca85ea
--- /dev/null
@@ -0,0 +1,10 @@
+USING: math.miller-rabin tools.test ;
+IN: math.miller-rabin.tests
+
+[ f ] [ 473155932665450549999756893736999469773678960651272093993257221235459777950185377130233556540099119926369437865330559863 miller-rabin ] unit-test
+[ t ] [ 2 miller-rabin ] unit-test
+[ t ] [ 3 miller-rabin ] unit-test
+[ f ] [ 36 miller-rabin ] unit-test
+[ t ] [ 37 miller-rabin ] unit-test
+[ 101 ] [ 100 next-prime ] unit-test
+[ 100000000000031 ] [ 100000000000000 next-prime ] unit-test
diff --git a/basis/math/miller-rabin/miller-rabin.factor b/basis/math/miller-rabin/miller-rabin.factor
new file mode 100755 (executable)
index 0000000..afaa66e
--- /dev/null
@@ -0,0 +1,68 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: combinators io locals kernel math math.functions
+math.ranges namespaces random sequences hashtables sets ;
+IN: math.miller-rabin
+
+: >even ( n -- int ) dup even? [ 1- ] unless ; foldable
+: >odd ( n -- int ) dup even? [ 1+ ] when ; foldable
+: next-odd ( m -- n ) dup even? [ 1+ ] [ 2 + ] if ;
+
+TUPLE: positive-even-expected n ;
+
+:: (miller-rabin) ( n trials -- ? )
+    [let | r [ n 1- factor-2s drop ]
+           s [ n 1- factor-2s nip ]
+           prime?! [ t ]
+           a! [ 0 ]
+           count! [ 0 ] |
+        trials [
+            n 1- [1,b] random a!
+            a s n ^mod 1 = [
+                0 count!
+                r [
+                    2^ s * a swap n ^mod n - -1 =
+                    [ count 1+ count! r + ] when
+                ] each
+                count zero? [ f prime?! trials + ] when
+            ] unless drop
+        ] each prime? ] ;
+
+: miller-rabin* ( n numtrials -- ? )
+    over {
+        { [ dup 1 <= ] [ 3drop f ] }
+        { [ dup 2 = ] [ 3drop t ] }
+        { [ dup even? ] [ 3drop f ] }
+        [ [ drop (miller-rabin) ] with-scope ]
+    } cond ;
+
+: miller-rabin ( n -- ? ) 10 miller-rabin* ;
+
+: next-prime ( n -- p )
+    next-odd dup miller-rabin [ next-prime ] unless ;
+
+: random-prime ( numbits -- p )
+    random-bits next-prime ;
+
+ERROR: no-relative-prime n ;
+
+: (find-relative-prime) ( n guess -- p )
+    over 1 <= [ over no-relative-prime ] when
+    dup 1 <= [ drop 3 ] when
+    2dup gcd nip 1 > [ 2 + (find-relative-prime) ] [ nip ] if ;
+
+: find-relative-prime* ( n guess -- p )
+    #! find a prime relative to n with initial guess
+    >odd (find-relative-prime) ;
+
+: find-relative-prime ( n -- p )
+    dup random find-relative-prime* ;
+
+ERROR: too-few-primes ;
+
+: unique-primes ( numbits n -- seq )
+    #! generate two primes
+    swap
+    dup 5 < [ too-few-primes ] when
+    2dup [ random-prime ] curry replicate
+    dup all-unique? [ 2nip ] [ drop unique-primes ] if ;
diff --git a/basis/math/miller-rabin/summary.txt b/basis/math/miller-rabin/summary.txt
new file mode 100644 (file)
index 0000000..b2591a3
--- /dev/null
@@ -0,0 +1 @@
+Miller-Rabin probabilistic primality test
index bb0d025dc6a6d919edddda62ca5330a00dbbdc3c..bc6da9f5643360c50f8cb6100bd212a987cc738c 100755 (executable)
@@ -10,7 +10,7 @@ IN: math.quaternions
 
 <PRIVATE
 
-: ** conjugate * ; inline
+: ** ( x y -- z ) conjugate * ; inline
 
 : 2q ( u v -- u' u'' v' v'' ) [ first2 ] bi@ ; inline
 
index f7b3b37e257c5ba6c19681ae17dd234ae5a2f633..1a28904705f0543a5eb3a5ea96d8971945c18af0 100644 (file)
@@ -20,11 +20,11 @@ M: range nth-unsafe ( n range -- obj )
 
 INSTANCE: range immutable-sequence
 
-: twiddle 2dup > -1 1 ? ; inline
+: twiddle ( a b -- a b step ) 2dup > -1 1 ? ; inline
 
-: (a, dup [ + ] curry 2dip ; inline
+: (a, ( a b step -- a' b' step ) dup [ + ] curry 2dip ; inline
 
-: ,b) dup [ - ] curry dip ; inline
+: ,b) ( a b step -- a' b' step ) dup [ - ] curry dip ; inline
 
 : [a,b] ( a b -- range ) twiddle <range> ; inline
 
index d2494ee32a7fdb28dcd6927a98b973ca8b4dfdd0..09caebcf0757bd81bcaf39194133002c45ae8907 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Doug Coleman, Michael Judge.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: arrays combinators kernel math math.analysis math.functions sequences
-    sequences.lib sorting ;
+USING: arrays combinators kernel math math.analysis
+math.functions math.order sequences sorting ;
 IN: math.statistics
 
 : mean ( seq -- n )
@@ -20,6 +20,10 @@ IN: math.statistics
         [ midpoint@ ] keep nth
     ] if ;
 
+: minmax ( seq -- min max )
+    #! find the min and max of a seq in one pass
+    [ 1/0. -1/0. ] dip [ tuck [ min ] [ max ] 2bi* ] each ;
+
 : range ( seq -- n )
     minmax swap - ;
 
index 1445af8309e38566c8442944224ac9c824d92fa9..1fb2530705de3b7930926c5a2ef2890346523c1f 100644 (file)
@@ -1,7 +1,8 @@
 USING: accessors checksums checksums.md5 io io.encodings.ascii
-io.encodings.binary io.files io.streams.byte-array
-io.streams.string kernel make mime.multipart
-mime.multipart.private multiline sequences strings tools.test ;
+io.encodings.binary io.files io.files.temp io.files.info
+io.streams.byte-array io.streams.string kernel make
+mime.multipart mime.multipart.private multiline sequences
+strings tools.test ;
 IN: mime.multipart.tests
 
 [ { "a" } ] [
index bb0d674f23b2995e61782a9690933bb0b9a5f53e..ac5233c543292b16e764aa966ed2622bc5ba2e11 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2004, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io.files io.encodings.ascii assocs sequences splitting
-kernel namespaces fry memoize ;
+USING: io.pathnames io.files io.encodings.ascii assocs sequences
+splitting kernel namespaces fry memoize ;
 IN: mime.types
 
 MEMO: mime-db ( -- seq )
index d6a8d51fbebfb5d8cfd6a2ad0a3755addb84793e..e498919f1178e0f484d221d4271538a656593a77 100644 (file)
@@ -20,7 +20,7 @@ $nl
 $nl
 "Mirrors are created by calling " { $link <mirror> } " or " { $link make-mirror } "." } ;
 
-HELP: <mirror> ( object -- mirror )
+HELP: <mirror>
 { $values { "object" object } { "mirror" mirror } } 
 { $description "Creates a " { $link mirror } " reflecting an object." }
 { $examples
index 64d4b1a041ef0aebf1fc4fdc5e16579845690665..930e5b9f1ce63936d40298c39eca1cbec1247dd5 100644 (file)
@@ -22,7 +22,8 @@ PRIVATE>
 
 : STRING:
     CREATE-WORD
-    parse-here 1quotation define-inline ; parsing
+    parse-here 1quotation
+    (( -- string )) define-inline ; parsing
 
 <PRIVATE
 : (parse-multiline-string) ( start-index end-text -- end-index )
index 82643bef154a72488ca922931ef95acb344eeb05..d1ab0a34c1c50fa3384a7f1d5678ca88165f539a 100644 (file)
@@ -12,7 +12,7 @@ TUPLE: nibble-array
 
 : nibble BIN: 1111 ; inline
 
-: nibbles>bytes 1 + 2/ ; inline
+: nibbles>bytes ( m -- n ) 1 + 2/ ; inline
 
 : byte/nibble ( n -- shift n' )
     [ 1 bitand 2 shift ] [ -1 shift ] bi ; inline
diff --git a/basis/opengl/capabilities/authors.txt b/basis/opengl/capabilities/authors.txt
new file mode 100644 (file)
index 0000000..6a0dc72
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
\ No newline at end of file
diff --git a/basis/opengl/capabilities/capabilities-docs.factor b/basis/opengl/capabilities/capabilities-docs.factor
new file mode 100644 (file)
index 0000000..f5424e1
--- /dev/null
@@ -0,0 +1,59 @@
+USING: help.markup help.syntax io kernel math quotations
+opengl.gl multiline assocs ;
+IN: opengl.capabilities
+
+HELP: gl-version
+{ $values { "version" "The version string from the OpenGL implementation" } }
+{ $description "Wrapper for " { $snippet "GL_VERSION glGetString" } " that removes the vendor-specific information from the version string." } ;
+
+HELP: gl-vendor-version
+{ $values { "version" "The vendor-specific version information from the OpenGL implementation" } }
+{ $description "Wrapper for " { $snippet "GL_VERSION glGetString" } " that returns only the vendor-specific information from the version string." } ;
+
+HELP: has-gl-version?
+{ $values { "version" "A version string" } { "?" "A boolean value" } }
+{ $description "Compares the version string returned by " { $link gl-version } " to " { $snippet "version" } ". Returns true if the implementation version meets or exceeds " { $snippet "version" } "." } ;
+
+HELP: require-gl-version
+{ $values { "version" "A version string" } }
+{ $description "Throws an exception if " { $link has-gl-version? } " returns false for " { $snippet "version" } "." } ;
+
+HELP: glsl-version
+{ $values { "version" "The GLSL version string from the OpenGL implementation" } }
+{ $description "Wrapper for " { $snippet "GL_SHADING_LANGUAGE_VERSION glGetString" } " that removes the vendor-specific information from the version string." } ;
+
+HELP: glsl-vendor-version
+{ $values { "version" "The vendor-specific GLSL version information from the OpenGL implementation" } }
+{ $description "Wrapper for " { $snippet "GL_SHADING_LANGUAGE_VERSION glGetString" } " that returns only the vendor-specific information from the version string." } ;
+
+HELP: has-glsl-version?
+{ $values { "version" "A version string" } { "?" "A boolean value" } }
+{ $description "Compares the version string returned by " { $link glsl-version } " to " { $snippet "version" } ". Returns true if the implementation version meets or exceeds " { $snippet "version" } "." } ;
+
+HELP: require-glsl-version
+{ $values { "version" "A version string" } }
+{ $description "Throws an exception if " { $link has-glsl-version? } " returns false for " { $snippet "version" } "." } ;
+
+HELP: gl-extensions
+{ $values { "seq" "A sequence of strings naming the implementation-supported OpenGL extensions" } }
+{ $description "Wrapper for " { $snippet "GL_EXTENSIONS glGetString" } " that returns a sequence of extension names supported by the OpenGL implementation." } ;
+
+HELP: has-gl-extensions?
+{ $values { "extensions" "A sequence of extension name strings" } { "?" "A boolean value" } }
+{ $description "Returns true if the set of " { $snippet "extensions" } " is a subset of the implementation-supported extensions returned by " { $link gl-extensions } "." } ;
+
+HELP: has-gl-version-or-extensions?
+{ $values { "version" "A version string" } { "extensions" "A sequence of extension name strings" } { "?" "a boolean" } }
+{ $description "Returns true if either " { $link has-gl-version? } " or " { $link has-gl-extensions? } " returns true for " { $snippet "version" } " or " { $snippet "extensions" } ", respectively. Intended for use when required OpenGL functionality can be verified either by a minimum version or a set of equivalent extensions." } ;
+
+HELP: require-gl-extensions
+{ $values { "extensions" "A sequence of extension name strings" } }
+{ $description "Throws an exception if " { $link has-gl-extensions? } " returns false for " { $snippet "extensions" } "." } ;
+
+HELP: require-gl-version-or-extensions
+{ $values { "version" "A version string" } { "extensions" "A sequence of extension name strings" } }
+{ $description "Throws an exception if neither " { $link has-gl-version? } " nor " { $link has-gl-extensions? } " returns true for " { $snippet "version" } " or " { $snippet "extensions" } ", respectively. Intended for use when required OpenGL functionality can be verified either by a minimum version or a set of equivalent extensions." } ;
+
+{ require-gl-version require-glsl-version require-gl-extensions require-gl-version-or-extensions has-gl-version? has-glsl-version? has-gl-extensions? has-gl-version-or-extensions? gl-version glsl-version gl-extensions } related-words
+
+ABOUT: "gl-utilities"
diff --git a/basis/opengl/capabilities/capabilities.factor b/basis/opengl/capabilities/capabilities.factor
new file mode 100755 (executable)
index 0000000..3972fea
--- /dev/null
@@ -0,0 +1,67 @@
+! Copyright (C) 2008 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel namespaces make sequences splitting opengl.gl
+continuations math.parser math arrays sets math.order ;
+IN: opengl.capabilities
+
+: (require-gl) ( thing require-quot make-error-quot -- )
+    -rot dupd call
+    [ 2drop ]
+    [ swap " " make throw ]
+    if ; inline
+
+: gl-extensions ( -- seq )
+    GL_EXTENSIONS glGetString " " split ;
+: has-gl-extensions? ( extensions -- ? )
+    gl-extensions swap [ over member? ] all? nip ;
+: (make-gl-extensions-error) ( required-extensions -- )
+    gl-extensions diff
+    "Required OpenGL extensions not supported:\n" %
+    [ "    " % % "\n" % ] each ;
+: require-gl-extensions ( extensions -- )
+    [ has-gl-extensions? ]
+    [ (make-gl-extensions-error) ]
+    (require-gl) ;
+
+: version-seq ( version-string -- version-seq )
+    "." split [ string>number ] map ;
+
+: version-before? ( version1 version2 -- ? )
+    swap version-seq swap version-seq before=? ;
+
+: (gl-version) ( -- version vendor )
+    GL_VERSION glGetString " " split1 ;
+: gl-version ( -- version )
+    (gl-version) drop ;
+: gl-vendor-version ( -- version )
+    (gl-version) nip ;
+: has-gl-version? ( version -- ? )
+    gl-version version-before? ;
+: (make-gl-version-error) ( required-version -- )
+    "Required OpenGL version " % % " not supported (" % gl-version % " available)" % ;
+: require-gl-version ( version -- )
+    [ has-gl-version? ]
+    [ (make-gl-version-error) ]
+    (require-gl) ;
+
+: (glsl-version) ( -- version vendor )
+    GL_SHADING_LANGUAGE_VERSION glGetString " " split1 ;
+: glsl-version ( -- version )
+    (glsl-version) drop ;
+: glsl-vendor-version ( -- version )
+    (glsl-version) nip ;
+: has-glsl-version? ( version -- ? )
+    glsl-version version-before? ;
+: require-glsl-version ( version -- )
+    [ has-glsl-version? ]
+    [ "Required GLSL version " % % " not supported (" % glsl-version % " available)" % ]
+    (require-gl) ;
+
+: has-gl-version-or-extensions? ( version extensions -- ? )
+    has-gl-extensions? swap has-gl-version? or ;
+
+: require-gl-version-or-extensions ( version extensions -- )
+    2array [ first2 has-gl-version-or-extensions? ] [
+        dup first (make-gl-version-error) "\n" %
+        second (make-gl-extensions-error) "\n" %
+    ] (require-gl) ;
diff --git a/basis/opengl/capabilities/summary.txt b/basis/opengl/capabilities/summary.txt
new file mode 100644 (file)
index 0000000..d31b63b
--- /dev/null
@@ -0,0 +1 @@
+Testing for OpenGL versions and extensions
\ No newline at end of file
diff --git a/basis/opengl/capabilities/tags.txt b/basis/opengl/capabilities/tags.txt
new file mode 100644 (file)
index 0000000..77282be
--- /dev/null
@@ -0,0 +1,2 @@
+opengl
+bindings
diff --git a/basis/opengl/framebuffers/authors.txt b/basis/opengl/framebuffers/authors.txt
new file mode 100644 (file)
index 0000000..6a0dc72
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
\ No newline at end of file
diff --git a/basis/opengl/framebuffers/framebuffers-docs.factor b/basis/opengl/framebuffers/framebuffers-docs.factor
new file mode 100644 (file)
index 0000000..c5507dc
--- /dev/null
@@ -0,0 +1,35 @@
+USING: help.markup help.syntax io kernel math quotations
+opengl.gl multiline assocs ;
+IN: opengl.framebuffers
+
+HELP: gen-framebuffer
+{ $values { "id" integer } }
+{ $description "Wrapper for " { $link glGenFramebuffersEXT } " to handle the common case of generating a single framebuffer ID." } ;
+
+HELP: gen-renderbuffer
+{ $values { "id" integer } }
+{ $description "Wrapper for " { $link glGenRenderbuffersEXT } " to handle the common case of generating a single render buffer ID." } ;
+
+HELP: delete-framebuffer
+{ $values { "id" integer } }
+{ $description "Wrapper for " { $link glDeleteFramebuffersEXT } " to handle the common case of deleting a single framebuffer ID." } ;
+
+HELP: delete-renderbuffer
+{ $values { "id" integer } }
+{ $description "Wrapper for " { $link glDeleteRenderbuffersEXT } " to handle the common case of deleting a single render buffer ID." } ;
+
+{ gen-framebuffer delete-framebuffer } related-words
+{ gen-renderbuffer delete-renderbuffer } related-words
+
+HELP: framebuffer-incomplete?
+{ $values { "status/f" "The framebuffer error code, or " { $snippet "f" } " if the framebuffer is render-complete." } }
+{ $description "Checks the framebuffer currently bound by " { $link glBindFramebufferEXT } " or " { $link with-framebuffer } " to see if it is incomplete, i.e., it is not ready to be rendered to." } ;
+
+HELP: check-framebuffer
+{ $description "Checks the framebuffer currently bound by " { $link glBindFramebufferEXT } " or " { $link with-framebuffer } " with " { $link framebuffer-incomplete? } ", and throws a descriptive error if the framebuffer is incomplete." } ;
+
+HELP: with-framebuffer
+{ $values { "id" "The id of a framebuffer object." } { "quot" "a quotation" } }
+{ $description "Binds framebuffer " { $snippet "id" } " in the dynamic extent of " { $snippet "quot" } ", restoring the window framebuffer when finished." } ;
+
+ABOUT: "gl-utilities"
\ No newline at end of file
diff --git a/basis/opengl/framebuffers/framebuffers.factor b/basis/opengl/framebuffers/framebuffers.factor
new file mode 100644 (file)
index 0000000..346789e
--- /dev/null
@@ -0,0 +1,43 @@
+! Copyright (C) 2008 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: opengl opengl.gl combinators continuations kernel
+alien.c-types ;
+IN: opengl.framebuffers
+
+: gen-framebuffer ( -- id )
+    [ glGenFramebuffersEXT ] (gen-gl-object) ;
+: gen-renderbuffer ( -- id )
+    [ glGenRenderbuffersEXT ] (gen-gl-object) ;
+
+: delete-framebuffer ( id -- )
+    [ glDeleteFramebuffersEXT ] (delete-gl-object) ;
+: delete-renderbuffer ( id -- )
+    [ glDeleteRenderbuffersEXT ] (delete-gl-object) ;
+
+: framebuffer-incomplete? ( -- status/f )
+    GL_FRAMEBUFFER_EXT glCheckFramebufferStatusEXT
+    dup GL_FRAMEBUFFER_COMPLETE_EXT = f rot ? ;
+
+: framebuffer-error ( status -- * )
+    { 
+        { GL_FRAMEBUFFER_COMPLETE_EXT [ "framebuffer complete" ] }
+        { GL_FRAMEBUFFER_UNSUPPORTED_EXT [ "framebuffer configuration unsupported" ] }
+        { GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT [ "framebuffer incomplete (incomplete attachment)" ] }
+        { GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT [ "framebuffer incomplete (missing attachment)" ] }
+        { GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT [ "framebuffer incomplete (dimension mismatch)" ] }
+        { GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT [ "framebuffer incomplete (format mismatch)" ] }
+        { GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT [ "framebuffer incomplete (draw buffer(s) have no attachment)" ] }
+        { GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT [ "framebuffer incomplete (read buffer has no attachment)" ] }
+        [ drop gl-error "unknown framebuffer error" ]
+    } case throw ;
+
+: check-framebuffer ( -- )
+    framebuffer-incomplete? [ framebuffer-error ] when* ;
+
+: with-framebuffer ( id quot -- )
+    GL_FRAMEBUFFER_EXT rot glBindFramebufferEXT
+    [ GL_FRAMEBUFFER_EXT 0 glBindFramebufferEXT ] [ ] cleanup ; inline
+
+: framebuffer-attachment ( attachment -- id )
+    GL_FRAMEBUFFER_EXT swap GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT
+    0 <uint> [ glGetFramebufferAttachmentParameterivEXT ] keep *uint ;
diff --git a/basis/opengl/framebuffers/summary.txt b/basis/opengl/framebuffers/summary.txt
new file mode 100644 (file)
index 0000000..3ef713a
--- /dev/null
@@ -0,0 +1 @@
+Rendering to offscreen textures using the GL_EXT_framebuffer_object extension
\ No newline at end of file
diff --git a/basis/opengl/framebuffers/tags.txt b/basis/opengl/framebuffers/tags.txt
new file mode 100644 (file)
index 0000000..77282be
--- /dev/null
@@ -0,0 +1,2 @@
+opengl
+bindings
index ea37829d0ee13537cbf78a8993b602a4cfe2546e..fb2ddfaf3e411498e22f449a7fb13d98d5e9c74b 100644 (file)
@@ -1,6 +1,6 @@
 USING: alien alien.syntax alien.parser combinators
 kernel parser sequences system words namespaces hashtables init
-math arrays assocs continuations lexer fry locals ;
+math arrays assocs continuations lexer fry locals vocabs.parser ;
 IN: opengl.gl.extensions
 
 ERROR: unknown-gl-platform ;
index 59b2422d731e1c1333689e48b3ed393bc144595e..c32f62bf33d1815e1fd5ec4420906bdaf74a3f9c 100644 (file)
@@ -27,603 +27,599 @@ TYPEDEF: void*   GLvoid*
 ! Constants
 
 ! Boolean values
-: GL_FALSE                          HEX: 0 ; inline
-: GL_TRUE                           HEX: 1 ; inline
+CONSTANT: GL_FALSE                          HEX: 0
+CONSTANT: GL_TRUE                           HEX: 1
 
 ! Data types
-: GL_BYTE                           HEX: 1400 ; inline
-: GL_UNSIGNED_BYTE                  HEX: 1401 ; inline
-: GL_SHORT                          HEX: 1402 ; inline
-: GL_UNSIGNED_SHORT                 HEX: 1403 ; inline
-: GL_INT                            HEX: 1404 ; inline
-: GL_UNSIGNED_INT                   HEX: 1405 ; inline
-: GL_FLOAT                          HEX: 1406 ; inline
-: GL_2_BYTES                        HEX: 1407 ; inline
-: GL_3_BYTES                        HEX: 1408 ; inline
-: GL_4_BYTES                        HEX: 1409 ; inline
-: GL_DOUBLE                         HEX: 140A ; inline
+CONSTANT: GL_BYTE                           HEX: 1400
+CONSTANT: GL_UNSIGNED_BYTE                  HEX: 1401
+CONSTANT: GL_SHORT                          HEX: 1402
+CONSTANT: GL_UNSIGNED_SHORT                 HEX: 1403
+CONSTANT: GL_INT                            HEX: 1404
+CONSTANT: GL_UNSIGNED_INT                   HEX: 1405
+CONSTANT: GL_FLOAT                          HEX: 1406
+CONSTANT: GL_2_BYTES                        HEX: 1407
+CONSTANT: GL_3_BYTES                        HEX: 1408
+CONSTANT: GL_4_BYTES                        HEX: 1409
+CONSTANT: GL_DOUBLE                         HEX: 140A
 
 ! Primitives
-: GL_POINTS                         HEX: 0000 ; inline
-: GL_LINES                          HEX: 0001 ; inline
-: GL_LINE_LOOP                      HEX: 0002 ; inline
-: GL_LINE_STRIP                     HEX: 0003 ; inline
-: GL_TRIANGLES                      HEX: 0004 ; inline
-: GL_TRIANGLE_STRIP                 HEX: 0005 ; inline
-: GL_TRIANGLE_FAN                   HEX: 0006 ; inline
-: GL_QUADS                          HEX: 0007 ; inline
-: GL_QUAD_STRIP                     HEX: 0008 ; inline
-: GL_POLYGON                        HEX: 0009 ; inline
+CONSTANT: GL_POINTS                         HEX: 0000
+CONSTANT: GL_LINES                          HEX: 0001
+CONSTANT: GL_LINE_LOOP                      HEX: 0002
+CONSTANT: GL_LINE_STRIP                     HEX: 0003
+CONSTANT: GL_TRIANGLES                      HEX: 0004
+CONSTANT: GL_TRIANGLE_STRIP                 HEX: 0005
+CONSTANT: GL_TRIANGLE_FAN                   HEX: 0006
+CONSTANT: GL_QUADS                          HEX: 0007
+CONSTANT: GL_QUAD_STRIP                     HEX: 0008
+CONSTANT: GL_POLYGON                        HEX: 0009
 
 ! Vertex arrays
-: GL_VERTEX_ARRAY                   HEX: 8074 ; inline
-: GL_NORMAL_ARRAY                   HEX: 8075 ; inline
-: GL_COLOR_ARRAY                    HEX: 8076 ; inline
-: GL_INDEX_ARRAY                    HEX: 8077 ; inline
-: GL_TEXTURE_COORD_ARRAY            HEX: 8078 ; inline
-: GL_EDGE_FLAG_ARRAY                HEX: 8079 ; inline
-: GL_VERTEX_ARRAY_SIZE              HEX: 807A ; inline
-: GL_VERTEX_ARRAY_TYPE              HEX: 807B ; inline
-: GL_VERTEX_ARRAY_STRIDE            HEX: 807C ; inline
-: GL_NORMAL_ARRAY_TYPE              HEX: 807E ; inline
-: GL_NORMAL_ARRAY_STRIDE            HEX: 807F ; inline
-: GL_COLOR_ARRAY_SIZE               HEX: 8081 ; inline
-: GL_COLOR_ARRAY_TYPE               HEX: 8082 ; inline
-: GL_COLOR_ARRAY_STRIDE             HEX: 8083 ; inline
-: GL_INDEX_ARRAY_TYPE               HEX: 8085 ; inline
-: GL_INDEX_ARRAY_STRIDE             HEX: 8086 ; inline
-: GL_TEXTURE_COORD_ARRAY_SIZE       HEX: 8088 ; inline
-: GL_TEXTURE_COORD_ARRAY_TYPE       HEX: 8089 ; inline
-: GL_TEXTURE_COORD_ARRAY_STRIDE     HEX: 808A ; inline
-: GL_EDGE_FLAG_ARRAY_STRIDE         HEX: 808C ; inline
-: GL_VERTEX_ARRAY_POINTER           HEX: 808E ; inline
-: GL_NORMAL_ARRAY_POINTER           HEX: 808F ; inline
-: GL_COLOR_ARRAY_POINTER            HEX: 8090 ; inline
-: GL_INDEX_ARRAY_POINTER            HEX: 8091 ; inline
-: GL_TEXTURE_COORD_ARRAY_POINTER    HEX: 8092 ; inline
-: GL_EDGE_FLAG_ARRAY_POINTER        HEX: 8093 ; inline
-: GL_V2F                            HEX: 2A20 ; inline
-: GL_V3F                            HEX: 2A21 ; inline
-: GL_C4UB_V2F                       HEX: 2A22 ; inline
-: GL_C4UB_V3F                       HEX: 2A23 ; inline
-: GL_C3F_V3F                        HEX: 2A24 ; inline
-: GL_N3F_V3F                        HEX: 2A25 ; inline
-: GL_C4F_N3F_V3F                    HEX: 2A26 ; inline
-: GL_T2F_V3F                        HEX: 2A27 ; inline
-: GL_T4F_V4F                        HEX: 2A28 ; inline
-: GL_T2F_C4UB_V3F                   HEX: 2A29 ; inline
-: GL_T2F_C3F_V3F                    HEX: 2A2A ; inline
-: GL_T2F_N3F_V3F                    HEX: 2A2B ; inline
-: GL_T2F_C4F_N3F_V3F                HEX: 2A2C ; inline
-: GL_T4F_C4F_N3F_V4F                HEX: 2A2D ; inline
+CONSTANT: GL_VERTEX_ARRAY                   HEX: 8074
+CONSTANT: GL_NORMAL_ARRAY                   HEX: 8075
+CONSTANT: GL_COLOR_ARRAY                    HEX: 8076
+CONSTANT: GL_INDEX_ARRAY                    HEX: 8077
+CONSTANT: GL_TEXTURE_COORD_ARRAY            HEX: 8078
+CONSTANT: GL_EDGE_FLAG_ARRAY                HEX: 8079
+CONSTANT: GL_VERTEX_ARRAY_SIZE              HEX: 807A
+CONSTANT: GL_VERTEX_ARRAY_TYPE              HEX: 807B
+CONSTANT: GL_VERTEX_ARRAY_STRIDE            HEX: 807C
+CONSTANT: GL_NORMAL_ARRAY_TYPE              HEX: 807E
+CONSTANT: GL_NORMAL_ARRAY_STRIDE            HEX: 807F
+CONSTANT: GL_COLOR_ARRAY_SIZE               HEX: 8081
+CONSTANT: GL_COLOR_ARRAY_TYPE               HEX: 8082
+CONSTANT: GL_COLOR_ARRAY_STRIDE             HEX: 8083
+CONSTANT: GL_INDEX_ARRAY_TYPE               HEX: 8085
+CONSTANT: GL_INDEX_ARRAY_STRIDE             HEX: 8086
+CONSTANT: GL_TEXTURE_COORD_ARRAY_SIZE       HEX: 8088
+CONSTANT: GL_TEXTURE_COORD_ARRAY_TYPE       HEX: 8089
+CONSTANT: GL_TEXTURE_COORD_ARRAY_STRIDE     HEX: 808A
+CONSTANT: GL_EDGE_FLAG_ARRAY_STRIDE         HEX: 808C
+CONSTANT: GL_VERTEX_ARRAY_POINTER           HEX: 808E
+CONSTANT: GL_NORMAL_ARRAY_POINTER           HEX: 808F
+CONSTANT: GL_COLOR_ARRAY_POINTER            HEX: 8090
+CONSTANT: GL_INDEX_ARRAY_POINTER            HEX: 8091
+CONSTANT: GL_TEXTURE_COORD_ARRAY_POINTER    HEX: 8092
+CONSTANT: GL_EDGE_FLAG_ARRAY_POINTER        HEX: 8093
+CONSTANT: GL_V2F                            HEX: 2A20
+CONSTANT: GL_V3F                            HEX: 2A21
+CONSTANT: GL_C4UB_V2F                       HEX: 2A22
+CONSTANT: GL_C4UB_V3F                       HEX: 2A23
+CONSTANT: GL_C3F_V3F                        HEX: 2A24
+CONSTANT: GL_N3F_V3F                        HEX: 2A25
+CONSTANT: GL_C4F_N3F_V3F                    HEX: 2A26
+CONSTANT: GL_T2F_V3F                        HEX: 2A27
+CONSTANT: GL_T4F_V4F                        HEX: 2A28
+CONSTANT: GL_T2F_C4UB_V3F                   HEX: 2A29
+CONSTANT: GL_T2F_C3F_V3F                    HEX: 2A2A
+CONSTANT: GL_T2F_N3F_V3F                    HEX: 2A2B
+CONSTANT: GL_T2F_C4F_N3F_V3F                HEX: 2A2C
+CONSTANT: GL_T4F_C4F_N3F_V4F                HEX: 2A2D
 
 ! Matrix mode
-: GL_MATRIX_MODE                    HEX: 0BA0 ; inline
-: GL_MODELVIEW                      HEX: 1700 ; inline
-: GL_PROJECTION                     HEX: 1701 ; inline
-: GL_TEXTURE                        HEX: 1702 ; inline
+CONSTANT: GL_MATRIX_MODE                    HEX: 0BA0
+CONSTANT: GL_MODELVIEW                      HEX: 1700
+CONSTANT: GL_PROJECTION                     HEX: 1701
+CONSTANT: GL_TEXTURE                        HEX: 1702
 
 ! Points
-: GL_POINT_SMOOTH                   HEX: 0B10 ; inline
-: GL_POINT_SIZE                     HEX: 0B11 ; inline
-: GL_POINT_SIZE_GRANULARITY         HEX: 0B13 ; inline
-: GL_POINT_SIZE_RANGE               HEX: 0B12 ; inline
+CONSTANT: GL_POINT_SMOOTH                   HEX: 0B10
+CONSTANT: GL_POINT_SIZE                     HEX: 0B11
+CONSTANT: GL_POINT_SIZE_GRANULARITY         HEX: 0B13
+CONSTANT: GL_POINT_SIZE_RANGE               HEX: 0B12
 
 ! Lines
-: GL_LINE_SMOOTH                    HEX: 0B20 ; inline
-: GL_LINE_STIPPLE                   HEX: 0B24 ; inline
-: GL_LINE_STIPPLE_PATTERN           HEX: 0B25 ; inline
-: GL_LINE_STIPPLE_REPEAT            HEX: 0B26 ; inline
-: GL_LINE_WIDTH                     HEX: 0B21 ; inline
-: GL_LINE_WIDTH_GRANULARITY         HEX: 0B23 ; inline
-: GL_LINE_WIDTH_RANGE               HEX: 0B22 ; inline
+CONSTANT: GL_LINE_SMOOTH                    HEX: 0B20
+CONSTANT: GL_LINE_STIPPLE                   HEX: 0B24
+CONSTANT: GL_LINE_STIPPLE_PATTERN           HEX: 0B25
+CONSTANT: GL_LINE_STIPPLE_REPEAT            HEX: 0B26
+CONSTANT: GL_LINE_WIDTH                     HEX: 0B21
+CONSTANT: GL_LINE_WIDTH_GRANULARITY         HEX: 0B23
+CONSTANT: GL_LINE_WIDTH_RANGE               HEX: 0B22
 
 ! Polygons
-: GL_POINT                          HEX: 1B00 ; inline
-: GL_LINE                           HEX: 1B01 ; inline
-: GL_FILL                           HEX: 1B02 ; inline
-: GL_CW                             HEX: 0900 ; inline
-: GL_CCW                            HEX: 0901 ; inline
-: GL_FRONT                          HEX: 0404 ; inline
-: GL_BACK                           HEX: 0405 ; inline
-: GL_POLYGON_MODE                   HEX: 0B40 ; inline
-: GL_POLYGON_SMOOTH                 HEX: 0B41 ; inline
-: GL_POLYGON_STIPPLE                HEX: 0B42 ; inline
-: GL_EDGE_FLAG                      HEX: 0B43 ; inline
-: GL_CULL_FACE                      HEX: 0B44 ; inline
-: GL_CULL_FACE_MODE                 HEX: 0B45 ; inline
-: GL_FRONT_FACE                     HEX: 0B46 ; inline
-: GL_POLYGON_OFFSET_FACTOR          HEX: 8038 ; inline
-: GL_POLYGON_OFFSET_UNITS           HEX: 2A00 ; inline
-: GL_POLYGON_OFFSET_POINT           HEX: 2A01 ; inline
-: GL_POLYGON_OFFSET_LINE            HEX: 2A02 ; inline
-: GL_POLYGON_OFFSET_FILL            HEX: 8037 ; inline
+CONSTANT: GL_POINT                          HEX: 1B00
+CONSTANT: GL_LINE                           HEX: 1B01
+CONSTANT: GL_FILL                           HEX: 1B02
+CONSTANT: GL_CW                             HEX: 0900
+CONSTANT: GL_CCW                            HEX: 0901
+CONSTANT: GL_FRONT                          HEX: 0404
+CONSTANT: GL_BACK                           HEX: 0405
+CONSTANT: GL_POLYGON_MODE                   HEX: 0B40
+CONSTANT: GL_POLYGON_SMOOTH                 HEX: 0B41
+CONSTANT: GL_POLYGON_STIPPLE                HEX: 0B42
+CONSTANT: GL_EDGE_FLAG                      HEX: 0B43
+CONSTANT: GL_CULL_FACE                      HEX: 0B44
+CONSTANT: GL_CULL_FACE_MODE                 HEX: 0B45
+CONSTANT: GL_FRONT_FACE                     HEX: 0B46
+CONSTANT: GL_POLYGON_OFFSET_FACTOR          HEX: 8038
+CONSTANT: GL_POLYGON_OFFSET_UNITS           HEX: 2A00
+CONSTANT: GL_POLYGON_OFFSET_POINT           HEX: 2A01
+CONSTANT: GL_POLYGON_OFFSET_LINE            HEX: 2A02
+CONSTANT: GL_POLYGON_OFFSET_FILL            HEX: 8037
 
 ! Display Lists
-: GL_COMPILE                        HEX: 1300 ; inline
-: GL_COMPILE_AND_EXECUTE            HEX: 1301 ; inline
-: GL_LIST_BASE                      HEX: 0B32 ; inline
-: GL_LIST_INDEX                     HEX: 0B33 ; inline
-: GL_LIST_MODE                      HEX: 0B30 ; inline
+CONSTANT: GL_COMPILE                        HEX: 1300
+CONSTANT: GL_COMPILE_AND_EXECUTE            HEX: 1301
+CONSTANT: GL_LIST_BASE                      HEX: 0B32
+CONSTANT: GL_LIST_INDEX                     HEX: 0B33
+CONSTANT: GL_LIST_MODE                      HEX: 0B30
 
 ! Depth buffer
-: GL_NEVER                          HEX: 0200 ; inline
-: GL_LESS                           HEX: 0201 ; inline
-: GL_EQUAL                          HEX: 0202 ; inline
-: GL_LEQUAL                         HEX: 0203 ; inline
-: GL_GREATER                        HEX: 0204 ; inline
-: GL_NOTEQUAL                       HEX: 0205 ; inline
-: GL_GEQUAL                         HEX: 0206 ; inline
-: GL_ALWAYS                         HEX: 0207 ; inline
-: GL_DEPTH_TEST                     HEX: 0B71 ; inline
-: GL_DEPTH_BITS                     HEX: 0D56 ; inline
-: GL_DEPTH_CLEAR_VALUE              HEX: 0B73 ; inline
-: GL_DEPTH_FUNC                     HEX: 0B74 ; inline
-: GL_DEPTH_RANGE                    HEX: 0B70 ; inline
-: GL_DEPTH_WRITEMASK                HEX: 0B72 ; inline
-: GL_DEPTH_COMPONENT                HEX: 1902 ; inline
+CONSTANT: GL_NEVER                          HEX: 0200
+CONSTANT: GL_LESS                           HEX: 0201
+CONSTANT: GL_EQUAL                          HEX: 0202
+CONSTANT: GL_LEQUAL                         HEX: 0203
+CONSTANT: GL_GREATER                        HEX: 0204
+CONSTANT: GL_NOTEQUAL                       HEX: 0205
+CONSTANT: GL_GEQUAL                         HEX: 0206
+CONSTANT: GL_ALWAYS                         HEX: 0207
+CONSTANT: GL_DEPTH_TEST                     HEX: 0B71
+CONSTANT: GL_DEPTH_BITS                     HEX: 0D56
+CONSTANT: GL_DEPTH_CLEAR_VALUE              HEX: 0B73
+CONSTANT: GL_DEPTH_FUNC                     HEX: 0B74
+CONSTANT: GL_DEPTH_RANGE                    HEX: 0B70
+CONSTANT: GL_DEPTH_WRITEMASK                HEX: 0B72
+CONSTANT: GL_DEPTH_COMPONENT                HEX: 1902
 
 ! Lighting
-: GL_LIGHTING                       HEX: 0B50 ; inline
-: GL_LIGHT0                         HEX: 4000 ; inline
-: GL_LIGHT1                         HEX: 4001 ; inline
-: GL_LIGHT2                         HEX: 4002 ; inline
-: GL_LIGHT3                         HEX: 4003 ; inline
-: GL_LIGHT4                         HEX: 4004 ; inline
-: GL_LIGHT5                         HEX: 4005 ; inline
-: GL_LIGHT6                         HEX: 4006 ; inline
-: GL_LIGHT7                         HEX: 4007 ; inline
-: GL_SPOT_EXPONENT                  HEX: 1205 ; inline
-: GL_SPOT_CUTOFF                    HEX: 1206 ; inline
-: GL_CONSTANT_ATTENUATION           HEX: 1207 ; inline
-: GL_LINEAR_ATTENUATION             HEX: 1208 ; inline
-: GL_QUADRATIC_ATTENUATION          HEX: 1209 ; inline
-: GL_AMBIENT                        HEX: 1200 ; inline
-: GL_DIFFUSE                        HEX: 1201 ; inline
-: GL_SPECULAR                       HEX: 1202 ; inline
-: GL_SHININESS                      HEX: 1601 ; inline
-: GL_EMISSION                       HEX: 1600 ; inline
-: GL_POSITION                       HEX: 1203 ; inline
-: GL_SPOT_DIRECTION                 HEX: 1204 ; inline
-: GL_AMBIENT_AND_DIFFUSE            HEX: 1602 ; inline
-: GL_COLOR_INDEXES                  HEX: 1603 ; inline
-: GL_LIGHT_MODEL_TWO_SIDE           HEX: 0B52 ; inline
-: GL_LIGHT_MODEL_LOCAL_VIEWER       HEX: 0B51 ; inline
-: GL_LIGHT_MODEL_AMBIENT            HEX: 0B53 ; inline
-: GL_FRONT_AND_BACK                 HEX: 0408 ; inline
-: GL_SHADE_MODEL                    HEX: 0B54 ; inline
-: GL_FLAT                           HEX: 1D00 ; inline
-: GL_SMOOTH                         HEX: 1D01 ; inline
-: GL_COLOR_MATERIAL                 HEX: 0B57 ; inline
-: GL_COLOR_MATERIAL_FACE            HEX: 0B55 ; inline
-: GL_COLOR_MATERIAL_PARAMETER       HEX: 0B56 ; inline
-: GL_NORMALIZE                      HEX: 0BA1 ; inline
+CONSTANT: GL_LIGHTING                       HEX: 0B50
+CONSTANT: GL_LIGHT0                         HEX: 4000
+CONSTANT: GL_LIGHT1                         HEX: 4001
+CONSTANT: GL_LIGHT2                         HEX: 4002
+CONSTANT: GL_LIGHT3                         HEX: 4003
+CONSTANT: GL_LIGHT4                         HEX: 4004
+CONSTANT: GL_LIGHT5                         HEX: 4005
+CONSTANT: GL_LIGHT6                         HEX: 4006
+CONSTANT: GL_LIGHT7                         HEX: 4007
+CONSTANT: GL_SPOT_EXPONENT                  HEX: 1205
+CONSTANT: GL_SPOT_CUTOFF                    HEX: 1206
+CONSTANT: GL_CONSTANT_ATTENUATION           HEX: 1207
+CONSTANT: GL_LINEAR_ATTENUATION             HEX: 1208
+CONSTANT: GL_QUADRATIC_ATTENUATION          HEX: 1209
+CONSTANT: GL_AMBIENT                        HEX: 1200
+CONSTANT: GL_DIFFUSE                        HEX: 1201
+CONSTANT: GL_SPECULAR                       HEX: 1202
+CONSTANT: GL_SHININESS                      HEX: 1601
+CONSTANT: GL_EMISSION                       HEX: 1600
+CONSTANT: GL_POSITION                       HEX: 1203
+CONSTANT: GL_SPOT_DIRECTION                 HEX: 1204
+CONSTANT: GL_AMBIENT_AND_DIFFUSE            HEX: 1602
+CONSTANT: GL_COLOR_INDEXES                  HEX: 1603
+CONSTANT: GL_LIGHT_MODEL_TWO_SIDE           HEX: 0B52
+CONSTANT: GL_LIGHT_MODEL_LOCAL_VIEWER       HEX: 0B51
+CONSTANT: GL_LIGHT_MODEL_AMBIENT            HEX: 0B53
+CONSTANT: GL_FRONT_AND_BACK                 HEX: 0408
+CONSTANT: GL_SHADE_MODEL                    HEX: 0B54
+CONSTANT: GL_FLAT                           HEX: 1D00
+CONSTANT: GL_SMOOTH                         HEX: 1D01
+CONSTANT: GL_COLOR_MATERIAL                 HEX: 0B57
+CONSTANT: GL_COLOR_MATERIAL_FACE            HEX: 0B55
+CONSTANT: GL_COLOR_MATERIAL_PARAMETER       HEX: 0B56
+CONSTANT: GL_NORMALIZE                      HEX: 0BA1
 
 ! User clipping planes
-: GL_CLIP_PLANE0                    HEX: 3000 ; inline
-: GL_CLIP_PLANE1                    HEX: 3001 ; inline
-: GL_CLIP_PLANE2                    HEX: 3002 ; inline
-: GL_CLIP_PLANE3                    HEX: 3003 ; inline
-: GL_CLIP_PLANE4                    HEX: 3004 ; inline
-: GL_CLIP_PLANE5                    HEX: 3005 ; inline
+CONSTANT: GL_CLIP_PLANE0                    HEX: 3000
+CONSTANT: GL_CLIP_PLANE1                    HEX: 3001
+CONSTANT: GL_CLIP_PLANE2                    HEX: 3002
+CONSTANT: GL_CLIP_PLANE3                    HEX: 3003
+CONSTANT: GL_CLIP_PLANE4                    HEX: 3004
+CONSTANT: GL_CLIP_PLANE5                    HEX: 3005
 
 ! Accumulation buffer
-: GL_ACCUM_RED_BITS                 HEX: 0D58 ; inline
-: GL_ACCUM_GREEN_BITS               HEX: 0D59 ; inline
-: GL_ACCUM_BLUE_BITS                HEX: 0D5A ; inline
-: GL_ACCUM_ALPHA_BITS               HEX: 0D5B ; inline
-: GL_ACCUM_CLEAR_VALUE              HEX: 0B80 ; inline
-: GL_ACCUM                          HEX: 0100 ; inline
-: GL_ADD                            HEX: 0104 ; inline
-: GL_LOAD                           HEX: 0101 ; inline
-: GL_MULT                           HEX: 0103 ; inline
-: GL_RETURN                         HEX: 0102 ; inline
+CONSTANT: GL_ACCUM_RED_BITS                 HEX: 0D58
+CONSTANT: GL_ACCUM_GREEN_BITS               HEX: 0D59
+CONSTANT: GL_ACCUM_BLUE_BITS                HEX: 0D5A
+CONSTANT: GL_ACCUM_ALPHA_BITS               HEX: 0D5B
+CONSTANT: GL_ACCUM_CLEAR_VALUE              HEX: 0B80
+CONSTANT: GL_ACCUM                          HEX: 0100
+CONSTANT: GL_ADD                            HEX: 0104
+CONSTANT: GL_LOAD                           HEX: 0101
+CONSTANT: GL_MULT                           HEX: 0103
+CONSTANT: GL_RETURN                         HEX: 0102
 
 ! Alpha testing
-: GL_ALPHA_TEST                     HEX: 0BC0 ; inline
-: GL_ALPHA_TEST_REF                 HEX: 0BC2 ; inline
-: GL_ALPHA_TEST_FUNC                HEX: 0BC1 ; inline
+CONSTANT: GL_ALPHA_TEST                     HEX: 0BC0
+CONSTANT: GL_ALPHA_TEST_REF                 HEX: 0BC2
+CONSTANT: GL_ALPHA_TEST_FUNC                HEX: 0BC1
 
 ! Blending
-: GL_BLEND                          HEX: 0BE2 ; inline
-: GL_BLEND_SRC                      HEX: 0BE1 ; inline
-: GL_BLEND_DST                      HEX: 0BE0 ; inline
-: GL_ZERO                           HEX: 0 ;  inline
-: GL_ONE                            HEX: 1 ;  inline
-: GL_SRC_COLOR                      HEX: 0300 ; inline
-: GL_ONE_MINUS_SRC_COLOR            HEX: 0301 ; inline
-: GL_SRC_ALPHA                      HEX: 0302 ; inline
-: GL_ONE_MINUS_SRC_ALPHA            HEX: 0303 ; inline
-: GL_DST_ALPHA                      HEX: 0304 ; inline
-: GL_ONE_MINUS_DST_ALPHA            HEX: 0305 ; inline
-: GL_DST_COLOR                      HEX: 0306 ; inline
-: GL_ONE_MINUS_DST_COLOR            HEX: 0307 ; inline
-: GL_SRC_ALPHA_SATURATE             HEX: 0308 ; inline
+CONSTANT: GL_BLEND                          HEX: 0BE2
+CONSTANT: GL_BLEND_SRC                      HEX: 0BE1
+CONSTANT: GL_BLEND_DST                      HEX: 0BE0
+CONSTANT: GL_ZERO                           HEX: 0
+CONSTANT: GL_ONE                            HEX: 1
+CONSTANT: GL_SRC_COLOR                      HEX: 0300
+CONSTANT: GL_ONE_MINUS_SRC_COLOR            HEX: 0301
+CONSTANT: GL_SRC_ALPHA                      HEX: 0302
+CONSTANT: GL_ONE_MINUS_SRC_ALPHA            HEX: 0303
+CONSTANT: GL_DST_ALPHA                      HEX: 0304
+CONSTANT: GL_ONE_MINUS_DST_ALPHA            HEX: 0305
+CONSTANT: GL_DST_COLOR                      HEX: 0306
+CONSTANT: GL_ONE_MINUS_DST_COLOR            HEX: 0307
+CONSTANT: GL_SRC_ALPHA_SATURATE             HEX: 0308
 
 ! Render Mode
-: GL_FEEDBACK                       HEX: 1C01 ; inline
-: GL_RENDER                         HEX: 1C00 ; inline
-: GL_SELECT                         HEX: 1C02 ; inline
+CONSTANT: GL_FEEDBACK                       HEX: 1C01
+CONSTANT: GL_RENDER                         HEX: 1C00
+CONSTANT: GL_SELECT                         HEX: 1C02
 
 ! Feedback
-: GL_2D                             HEX: 0600 ; inline
-: GL_3D                             HEX: 0601 ; inline
-: GL_3D_COLOR                       HEX: 0602 ; inline
-: GL_3D_COLOR_TEXTURE               HEX: 0603 ; inline
-: GL_4D_COLOR_TEXTURE               HEX: 0604 ; inline
-: GL_POINT_TOKEN                    HEX: 0701 ; inline
-: GL_LINE_TOKEN                     HEX: 0702 ; inline
-: GL_LINE_RESET_TOKEN               HEX: 0707 ; inline
-: GL_POLYGON_TOKEN                  HEX: 0703 ; inline
-: GL_BITMAP_TOKEN                   HEX: 0704 ; inline
-: GL_DRAW_PIXEL_TOKEN               HEX: 0705 ; inline
-: GL_COPY_PIXEL_TOKEN               HEX: 0706 ; inline
-: GL_PASS_THROUGH_TOKEN             HEX: 0700 ; inline
-: GL_FEEDBACK_BUFFER_POINTER        HEX: 0DF0 ; inline
-: GL_FEEDBACK_BUFFER_SIZE           HEX: 0DF1 ; inline
-: GL_FEEDBACK_BUFFER_TYPE           HEX: 0DF2 ; inline
+CONSTANT: GL_2D                             HEX: 0600
+CONSTANT: GL_3D                             HEX: 0601
+CONSTANT: GL_3D_COLOR                       HEX: 0602
+CONSTANT: GL_3D_COLOR_TEXTURE               HEX: 0603
+CONSTANT: GL_4D_COLOR_TEXTURE               HEX: 0604
+CONSTANT: GL_POINT_TOKEN                    HEX: 0701
+CONSTANT: GL_LINE_TOKEN                     HEX: 0702
+CONSTANT: GL_LINE_RESET_TOKEN               HEX: 0707
+CONSTANT: GL_POLYGON_TOKEN                  HEX: 0703
+CONSTANT: GL_BITMAP_TOKEN                   HEX: 0704
+CONSTANT: GL_DRAW_PIXEL_TOKEN               HEX: 0705
+CONSTANT: GL_COPY_PIXEL_TOKEN               HEX: 0706
+CONSTANT: GL_PASS_THROUGH_TOKEN             HEX: 0700
+CONSTANT: GL_FEEDBACK_BUFFER_POINTER        HEX: 0DF0
+CONSTANT: GL_FEEDBACK_BUFFER_SIZE           HEX: 0DF1
+CONSTANT: GL_FEEDBACK_BUFFER_TYPE           HEX: 0DF2
 
 ! Selection
-: GL_SELECTION_BUFFER_POINTER       HEX: 0DF3 ; inline
-: GL_SELECTION_BUFFER_SIZE          HEX: 0DF4 ; inline
+CONSTANT: GL_SELECTION_BUFFER_POINTER       HEX: 0DF3
+CONSTANT: GL_SELECTION_BUFFER_SIZE          HEX: 0DF4
 
 ! Fog
-: GL_FOG                            HEX: 0B60 ; inline
-: GL_FOG_MODE                       HEX: 0B65 ; inline
-: GL_FOG_DENSITY                    HEX: 0B62 ; inline
-: GL_FOG_COLOR                      HEX: 0B66 ; inline
-: GL_FOG_INDEX                      HEX: 0B61 ; inline
-: GL_FOG_START                      HEX: 0B63 ; inline
-: GL_FOG_END                        HEX: 0B64 ; inline
-: GL_LINEAR                         HEX: 2601 ; inline
-: GL_EXP                            HEX: 0800 ; inline
-: GL_EXP2                           HEX: 0801 ; inline
+CONSTANT: GL_FOG                            HEX: 0B60
+CONSTANT: GL_FOG_MODE                       HEX: 0B65
+CONSTANT: GL_FOG_DENSITY                    HEX: 0B62
+CONSTANT: GL_FOG_COLOR                      HEX: 0B66
+CONSTANT: GL_FOG_INDEX                      HEX: 0B61
+CONSTANT: GL_FOG_START                      HEX: 0B63
+CONSTANT: GL_FOG_END                        HEX: 0B64
+CONSTANT: GL_LINEAR                         HEX: 2601
+CONSTANT: GL_EXP                            HEX: 0800
+CONSTANT: GL_EXP2                           HEX: 0801
 
 ! Logic Ops
-: GL_LOGIC_OP                       HEX: 0BF1 ; inline
-: GL_INDEX_LOGIC_OP                 HEX: 0BF1 ; inline
-: GL_COLOR_LOGIC_OP                 HEX: 0BF2 ; inline
-: GL_LOGIC_OP_MODE                  HEX: 0BF0 ; inline
-: GL_CLEAR                          HEX: 1500 ; inline
-: GL_SET                            HEX: 150F ; inline
-: GL_COPY                           HEX: 1503 ; inline
-: GL_COPY_INVERTED                  HEX: 150C ; inline
-: GL_NOOP                           HEX: 1505 ; inline
-: GL_INVERT                         HEX: 150A ; inline
-: GL_AND                            HEX: 1501 ; inline
-: GL_NAND                           HEX: 150E ; inline
-: GL_OR                             HEX: 1507 ; inline
-: GL_NOR                            HEX: 1508 ; inline
-: GL_XOR                            HEX: 1506 ; inline
-: GL_EQUIV                          HEX: 1509 ; inline
-: GL_AND_REVERSE                    HEX: 1502 ; inline
-: GL_AND_INVERTED                   HEX: 1504 ; inline
-: GL_OR_REVERSE                     HEX: 150B ; inline
-: GL_OR_INVERTED                    HEX: 150D ; inline
+CONSTANT: GL_LOGIC_OP                       HEX: 0BF1
+CONSTANT: GL_INDEX_LOGIC_OP                 HEX: 0BF1
+CONSTANT: GL_COLOR_LOGIC_OP                 HEX: 0BF2
+CONSTANT: GL_LOGIC_OP_MODE                  HEX: 0BF0
+CONSTANT: GL_CLEAR                          HEX: 1500
+CONSTANT: GL_SET                            HEX: 150F
+CONSTANT: GL_COPY                           HEX: 1503
+CONSTANT: GL_COPY_INVERTED                  HEX: 150C
+CONSTANT: GL_NOOP                           HEX: 1505
+CONSTANT: GL_INVERT                         HEX: 150A
+CONSTANT: GL_AND                            HEX: 1501
+CONSTANT: GL_NAND                           HEX: 150E
+CONSTANT: GL_OR                             HEX: 1507
+CONSTANT: GL_NOR                            HEX: 1508
+CONSTANT: GL_XOR                            HEX: 1506
+CONSTANT: GL_EQUIV                          HEX: 1509
+CONSTANT: GL_AND_REVERSE                    HEX: 1502
+CONSTANT: GL_AND_INVERTED                   HEX: 1504
+CONSTANT: GL_OR_REVERSE                     HEX: 150B
+CONSTANT: GL_OR_INVERTED                    HEX: 150D
 
 ! Stencil
-: GL_STENCIL_TEST                   HEX: 0B90 ; inline
-: GL_STENCIL_WRITEMASK              HEX: 0B98 ; inline
-: GL_STENCIL_BITS                   HEX: 0D57 ; inline
-: GL_STENCIL_FUNC                   HEX: 0B92 ; inline
-: GL_STENCIL_VALUE_MASK             HEX: 0B93 ; inline
-: GL_STENCIL_REF                    HEX: 0B97 ; inline
-: GL_STENCIL_FAIL                   HEX: 0B94 ; inline
-: GL_STENCIL_PASS_DEPTH_PASS        HEX: 0B96 ; inline
-: GL_STENCIL_PASS_DEPTH_FAIL        HEX: 0B95 ; inline
-: GL_STENCIL_CLEAR_VALUE            HEX: 0B91 ; inline
-: GL_STENCIL_INDEX                  HEX: 1901 ; inline
-: GL_KEEP                           HEX: 1E00 ; inline
-: GL_REPLACE                        HEX: 1E01 ; inline
-: GL_INCR                           HEX: 1E02 ; inline
-: GL_DECR                           HEX: 1E03 ; inline
+CONSTANT: GL_STENCIL_TEST                   HEX: 0B90
+CONSTANT: GL_STENCIL_WRITEMASK              HEX: 0B98
+CONSTANT: GL_STENCIL_BITS                   HEX: 0D57
+CONSTANT: GL_STENCIL_FUNC                   HEX: 0B92
+CONSTANT: GL_STENCIL_VALUE_MASK             HEX: 0B93
+CONSTANT: GL_STENCIL_REF                    HEX: 0B97
+CONSTANT: GL_STENCIL_FAIL                   HEX: 0B94
+CONSTANT: GL_STENCIL_PASS_DEPTH_PASS        HEX: 0B96
+CONSTANT: GL_STENCIL_PASS_DEPTH_FAIL        HEX: 0B95
+CONSTANT: GL_STENCIL_CLEAR_VALUE            HEX: 0B91
+CONSTANT: GL_STENCIL_INDEX                  HEX: 1901
+CONSTANT: GL_KEEP                           HEX: 1E00
+CONSTANT: GL_REPLACE                        HEX: 1E01
+CONSTANT: GL_INCR                           HEX: 1E02
+CONSTANT: GL_DECR                           HEX: 1E03
 
 ! Buffers, Pixel Drawing/Reading
-: GL_NONE                           HEX:    0 ; inline
-: GL_LEFT                           HEX: 0406 ; inline
-: GL_RIGHT                          HEX: 0407 ; inline
-! defined elsewhere
-! GL_FRONT                          HEX: 0404
-! GL_BACK                           HEX: 0405
-! GL_FRONT_AND_BACK                 HEX: 0408
-: GL_FRONT_LEFT                     HEX: 0400 ; inline
-: GL_FRONT_RIGHT                    HEX: 0401 ; inline
-: GL_BACK_LEFT                      HEX: 0402 ; inline
-: GL_BACK_RIGHT                     HEX: 0403 ; inline
-: GL_AUX0                           HEX: 0409 ; inline
-: GL_AUX1                           HEX: 040A ; inline
-: GL_AUX2                           HEX: 040B ; inline
-: GL_AUX3                           HEX: 040C ; inline
-: GL_COLOR_INDEX                    HEX: 1900 ; inline
-: GL_RED                            HEX: 1903 ; inline
-: GL_GREEN                          HEX: 1904 ; inline
-: GL_BLUE                           HEX: 1905 ; inline
-: GL_ALPHA                          HEX: 1906 ; inline
-: GL_LUMINANCE                      HEX: 1909 ; inline
-: GL_LUMINANCE_ALPHA                HEX: 190A ; inline
-: GL_ALPHA_BITS                     HEX: 0D55 ; inline
-: GL_RED_BITS                       HEX: 0D52 ; inline
-: GL_GREEN_BITS                     HEX: 0D53 ; inline
-: GL_BLUE_BITS                      HEX: 0D54 ; inline
-: GL_INDEX_BITS                     HEX: 0D51 ; inline
-: GL_SUBPIXEL_BITS                  HEX: 0D50 ; inline
-: GL_AUX_BUFFERS                    HEX: 0C00 ; inline
-: GL_READ_BUFFER                    HEX: 0C02 ; inline
-: GL_DRAW_BUFFER                    HEX: 0C01 ; inline
-: GL_DOUBLEBUFFER                   HEX: 0C32 ; inline
-: GL_STEREO                         HEX: 0C33 ; inline
-: GL_BITMAP                         HEX: 1A00 ; inline
-: GL_COLOR                          HEX: 1800 ; inline
-: GL_DEPTH                          HEX: 1801 ; inline
-: GL_STENCIL                        HEX: 1802 ; inline
-: GL_DITHER                         HEX: 0BD0 ; inline
-: GL_RGB                            HEX: 1907 ; inline
-: GL_RGBA                           HEX: 1908 ; inline
+CONSTANT: GL_NONE                           HEX:    0
+CONSTANT: GL_LEFT                           HEX: 0406
+CONSTANT: GL_RIGHT                          HEX: 0407
+
+CONSTANT: GL_FRONT_RIGHT                    HEX: 0401
+CONSTANT: GL_BACK_LEFT                      HEX: 0402
+CONSTANT: GL_BACK_RIGHT                     HEX: 0403
+CONSTANT: GL_AUX0                           HEX: 0409
+CONSTANT: GL_AUX1                           HEX: 040A
+CONSTANT: GL_AUX2                           HEX: 040B
+CONSTANT: GL_AUX3                           HEX: 040C
+CONSTANT: GL_COLOR_INDEX                    HEX: 1900
+CONSTANT: GL_RED                            HEX: 1903
+CONSTANT: GL_GREEN                          HEX: 1904
+CONSTANT: GL_BLUE                           HEX: 1905
+CONSTANT: GL_ALPHA                          HEX: 1906
+CONSTANT: GL_LUMINANCE                      HEX: 1909
+CONSTANT: GL_LUMINANCE_ALPHA                HEX: 190A
+CONSTANT: GL_ALPHA_BITS                     HEX: 0D55
+CONSTANT: GL_RED_BITS                       HEX: 0D52
+CONSTANT: GL_GREEN_BITS                     HEX: 0D53
+CONSTANT: GL_BLUE_BITS                      HEX: 0D54
+CONSTANT: GL_INDEX_BITS                     HEX: 0D51
+CONSTANT: GL_SUBPIXEL_BITS                  HEX: 0D50
+CONSTANT: GL_AUX_BUFFERS                    HEX: 0C00
+CONSTANT: GL_READ_BUFFER                    HEX: 0C02
+CONSTANT: GL_DRAW_BUFFER                    HEX: 0C01
+CONSTANT: GL_DOUBLEBUFFER                   HEX: 0C32
+CONSTANT: GL_STEREO                         HEX: 0C33
+CONSTANT: GL_BITMAP                         HEX: 1A00
+CONSTANT: GL_COLOR                          HEX: 1800
+CONSTANT: GL_DEPTH                          HEX: 1801
+CONSTANT: GL_STENCIL                        HEX: 1802
+CONSTANT: GL_DITHER                         HEX: 0BD0
+CONSTANT: GL_RGB                            HEX: 1907
+CONSTANT: GL_RGBA                           HEX: 1908
 
 ! Implementation limits
-: GL_MAX_LIST_NESTING               HEX: 0B31 ; inline
-: GL_MAX_ATTRIB_STACK_DEPTH         HEX: 0D35 ; inline
-: GL_MAX_MODELVIEW_STACK_DEPTH      HEX: 0D36 ; inline
-: GL_MAX_NAME_STACK_DEPTH           HEX: 0D37 ; inline
-: GL_MAX_PROJECTION_STACK_DEPTH     HEX: 0D38 ; inline
-: GL_MAX_TEXTURE_STACK_DEPTH        HEX: 0D39 ; inline
-: GL_MAX_EVAL_ORDER                 HEX: 0D30 ; inline
-: GL_MAX_LIGHTS                     HEX: 0D31 ; inline
-: GL_MAX_CLIP_PLANES                HEX: 0D32 ; inline
-: GL_MAX_TEXTURE_SIZE               HEX: 0D33 ; inline
-: GL_MAX_PIXEL_MAP_TABLE            HEX: 0D34 ; inline
-: GL_MAX_VIEWPORT_DIMS              HEX: 0D3A ; inline
-: GL_MAX_CLIENT_ATTRIB_STACK_DEPTH  HEX: 0D3B ; inline
+CONSTANT: GL_MAX_LIST_NESTING               HEX: 0B31
+CONSTANT: GL_MAX_ATTRIB_STACK_DEPTH         HEX: 0D35
+CONSTANT: GL_MAX_MODELVIEW_STACK_DEPTH      HEX: 0D36
+CONSTANT: GL_MAX_NAME_STACK_DEPTH           HEX: 0D37
+CONSTANT: GL_MAX_PROJECTION_STACK_DEPTH     HEX: 0D38
+CONSTANT: GL_MAX_TEXTURE_STACK_DEPTH        HEX: 0D39
+CONSTANT: GL_MAX_EVAL_ORDER                 HEX: 0D30
+CONSTANT: GL_MAX_LIGHTS                     HEX: 0D31
+CONSTANT: GL_MAX_CLIP_PLANES                HEX: 0D32
+CONSTANT: GL_MAX_TEXTURE_SIZE               HEX: 0D33
+CONSTANT: GL_MAX_PIXEL_MAP_TABLE            HEX: 0D34
+CONSTANT: GL_MAX_VIEWPORT_DIMS              HEX: 0D3A
+CONSTANT: GL_MAX_CLIENT_ATTRIB_STACK_DEPTH  HEX: 0D3B
 
 ! Gets
-: GL_ATTRIB_STACK_DEPTH             HEX: 0BB0 ; inline
-: GL_CLIENT_ATTRIB_STACK_DEPTH      HEX: 0BB1 ; inline
-: GL_COLOR_CLEAR_VALUE              HEX: 0C22 ; inline
-: GL_COLOR_WRITEMASK                HEX: 0C23 ; inline
-: GL_CURRENT_INDEX                  HEX: 0B01 ; inline
-: GL_CURRENT_COLOR                  HEX: 0B00 ; inline
-: GL_CURRENT_NORMAL                 HEX: 0B02 ; inline
-: GL_CURRENT_RASTER_COLOR           HEX: 0B04 ; inline
-: GL_CURRENT_RASTER_DISTANCE        HEX: 0B09 ; inline
-: GL_CURRENT_RASTER_INDEX           HEX: 0B05 ; inline
-: GL_CURRENT_RASTER_POSITION        HEX: 0B07 ; inline
-: GL_CURRENT_RASTER_TEXTURE_COORDS  HEX: 0B06 ; inline
-: GL_CURRENT_RASTER_POSITION_VALID  HEX: 0B08 ; inline
-: GL_CURRENT_TEXTURE_COORDS         HEX: 0B03 ; inline
-: GL_INDEX_CLEAR_VALUE              HEX: 0C20 ; inline
-: GL_INDEX_MODE                     HEX: 0C30 ; inline
-: GL_INDEX_WRITEMASK                HEX: 0C21 ; inline
-: GL_MODELVIEW_MATRIX               HEX: 0BA6 ; inline
-: GL_MODELVIEW_STACK_DEPTH          HEX: 0BA3 ; inline
-: GL_NAME_STACK_DEPTH               HEX: 0D70 ; inline
-: GL_PROJECTION_MATRIX              HEX: 0BA7 ; inline
-: GL_PROJECTION_STACK_DEPTH         HEX: 0BA4 ; inline
-: GL_RENDER_MODE                    HEX: 0C40 ; inline
-: GL_RGBA_MODE                      HEX: 0C31 ; inline
-: GL_TEXTURE_MATRIX                 HEX: 0BA8 ; inline
-: GL_TEXTURE_STACK_DEPTH            HEX: 0BA5 ; inline
-: GL_VIEWPORT                       HEX: 0BA2 ; inline
+CONSTANT: GL_ATTRIB_STACK_DEPTH             HEX: 0BB0
+CONSTANT: GL_CLIENT_ATTRIB_STACK_DEPTH      HEX: 0BB1
+CONSTANT: GL_COLOR_CLEAR_VALUE              HEX: 0C22
+CONSTANT: GL_COLOR_WRITEMASK                HEX: 0C23
+CONSTANT: GL_CURRENT_INDEX                  HEX: 0B01
+CONSTANT: GL_CURRENT_COLOR                  HEX: 0B00
+CONSTANT: GL_CURRENT_NORMAL                 HEX: 0B02
+CONSTANT: GL_CURRENT_RASTER_COLOR           HEX: 0B04
+CONSTANT: GL_CURRENT_RASTER_DISTANCE        HEX: 0B09
+CONSTANT: GL_CURRENT_RASTER_INDEX           HEX: 0B05
+CONSTANT: GL_CURRENT_RASTER_POSITION        HEX: 0B07
+CONSTANT: GL_CURRENT_RASTER_TEXTURE_COORDS  HEX: 0B06
+CONSTANT: GL_CURRENT_RASTER_POSITION_VALID  HEX: 0B08
+CONSTANT: GL_CURRENT_TEXTURE_COORDS         HEX: 0B03
+CONSTANT: GL_INDEX_CLEAR_VALUE              HEX: 0C20
+CONSTANT: GL_INDEX_MODE                     HEX: 0C30
+CONSTANT: GL_INDEX_WRITEMASK                HEX: 0C21
+CONSTANT: GL_MODELVIEW_MATRIX               HEX: 0BA6
+CONSTANT: GL_MODELVIEW_STACK_DEPTH          HEX: 0BA3
+CONSTANT: GL_NAME_STACK_DEPTH               HEX: 0D70
+CONSTANT: GL_PROJECTION_MATRIX              HEX: 0BA7
+CONSTANT: GL_PROJECTION_STACK_DEPTH         HEX: 0BA4
+CONSTANT: GL_RENDER_MODE                    HEX: 0C40
+CONSTANT: GL_RGBA_MODE                      HEX: 0C31
+CONSTANT: GL_TEXTURE_MATRIX                 HEX: 0BA8
+CONSTANT: GL_TEXTURE_STACK_DEPTH            HEX: 0BA5
+CONSTANT: GL_VIEWPORT                       HEX: 0BA2
 
 ! Evaluators inline
-: GL_AUTO_NORMAL                    HEX: 0D80 ; inline
-: GL_MAP1_COLOR_4                   HEX: 0D90 ; inline
-: GL_MAP1_INDEX                     HEX: 0D91 ; inline
-: GL_MAP1_NORMAL                    HEX: 0D92 ; inline
-: GL_MAP1_TEXTURE_COORD_1           HEX: 0D93 ; inline
-: GL_MAP1_TEXTURE_COORD_2           HEX: 0D94 ; inline
-: GL_MAP1_TEXTURE_COORD_3           HEX: 0D95 ; inline
-: GL_MAP1_TEXTURE_COORD_4           HEX: 0D96 ; inline
-: GL_MAP1_VERTEX_3                  HEX: 0D97 ; inline
-: GL_MAP1_VERTEX_4                  HEX: 0D98 ; inline
-: GL_MAP2_COLOR_4                   HEX: 0DB0 ; inline
-: GL_MAP2_INDEX                     HEX: 0DB1 ; inline
-: GL_MAP2_NORMAL                    HEX: 0DB2 ; inline
-: GL_MAP2_TEXTURE_COORD_1           HEX: 0DB3 ; inline
-: GL_MAP2_TEXTURE_COORD_2           HEX: 0DB4 ; inline
-: GL_MAP2_TEXTURE_COORD_3           HEX: 0DB5 ; inline
-: GL_MAP2_TEXTURE_COORD_4           HEX: 0DB6 ; inline
-: GL_MAP2_VERTEX_3                  HEX: 0DB7 ; inline
-: GL_MAP2_VERTEX_4                  HEX: 0DB8 ; inline
-: GL_MAP1_GRID_DOMAIN               HEX: 0DD0 ; inline
-: GL_MAP1_GRID_SEGMENTS             HEX: 0DD1 ; inline
-: GL_MAP2_GRID_DOMAIN               HEX: 0DD2 ; inline
-: GL_MAP2_GRID_SEGMENTS             HEX: 0DD3 ; inline
-: GL_COEFF                          HEX: 0A00 ; inline
-: GL_DOMAIN                         HEX: 0A02 ; inline
-: GL_ORDER                          HEX: 0A01 ; inline
+CONSTANT: GL_AUTO_NORMAL                    HEX: 0D80
+CONSTANT: GL_MAP1_COLOR_4                   HEX: 0D90
+CONSTANT: GL_MAP1_INDEX                     HEX: 0D91
+CONSTANT: GL_MAP1_NORMAL                    HEX: 0D92
+CONSTANT: GL_MAP1_TEXTURE_COORD_1           HEX: 0D93
+CONSTANT: GL_MAP1_TEXTURE_COORD_2           HEX: 0D94
+CONSTANT: GL_MAP1_TEXTURE_COORD_3           HEX: 0D95
+CONSTANT: GL_MAP1_TEXTURE_COORD_4           HEX: 0D96
+CONSTANT: GL_MAP1_VERTEX_3                  HEX: 0D97
+CONSTANT: GL_MAP1_VERTEX_4                  HEX: 0D98
+CONSTANT: GL_MAP2_COLOR_4                   HEX: 0DB0
+CONSTANT: GL_MAP2_INDEX                     HEX: 0DB1
+CONSTANT: GL_MAP2_NORMAL                    HEX: 0DB2
+CONSTANT: GL_MAP2_TEXTURE_COORD_1           HEX: 0DB3
+CONSTANT: GL_MAP2_TEXTURE_COORD_2           HEX: 0DB4
+CONSTANT: GL_MAP2_TEXTURE_COORD_3           HEX: 0DB5
+CONSTANT: GL_MAP2_TEXTURE_COORD_4           HEX: 0DB6
+CONSTANT: GL_MAP2_VERTEX_3                  HEX: 0DB7
+CONSTANT: GL_MAP2_VERTEX_4                  HEX: 0DB8
+CONSTANT: GL_MAP1_GRID_DOMAIN               HEX: 0DD0
+CONSTANT: GL_MAP1_GRID_SEGMENTS             HEX: 0DD1
+CONSTANT: GL_MAP2_GRID_DOMAIN               HEX: 0DD2
+CONSTANT: GL_MAP2_GRID_SEGMENTS             HEX: 0DD3
+CONSTANT: GL_COEFF                          HEX: 0A00
+CONSTANT: GL_DOMAIN                         HEX: 0A02
+CONSTANT: GL_ORDER                          HEX: 0A01
 
 ! Hints inline
-: GL_FOG_HINT                       HEX: 0C54 ; inline
-: GL_LINE_SMOOTH_HINT               HEX: 0C52 ; inline
-: GL_PERSPECTIVE_CORRECTION_HINT    HEX: 0C50 ; inline
-: GL_POINT_SMOOTH_HINT              HEX: 0C51 ; inline
-: GL_POLYGON_SMOOTH_HINT            HEX: 0C53 ; inline
-: GL_DONT_CARE                      HEX: 1100 ; inline
-: GL_FASTEST                        HEX: 1101 ; inline
-: GL_NICEST                         HEX: 1102 ; inline
+CONSTANT: GL_FOG_HINT                       HEX: 0C54
+CONSTANT: GL_LINE_SMOOTH_HINT               HEX: 0C52
+CONSTANT: GL_PERSPECTIVE_CORRECTION_HINT    HEX: 0C50
+CONSTANT: GL_POINT_SMOOTH_HINT              HEX: 0C51
+CONSTANT: GL_POLYGON_SMOOTH_HINT            HEX: 0C53
+CONSTANT: GL_DONT_CARE                      HEX: 1100
+CONSTANT: GL_FASTEST                        HEX: 1101
+CONSTANT: GL_NICEST                         HEX: 1102
 
 ! Scissor box inline
-: GL_SCISSOR_TEST                   HEX: 0C11 ; inline
-: GL_SCISSOR_BOX                    HEX: 0C10 ; inline
+CONSTANT: GL_SCISSOR_TEST                   HEX: 0C11
+CONSTANT: GL_SCISSOR_BOX                    HEX: 0C10
 
 ! Pixel Mode / Transfer inline
-: GL_MAP_COLOR                      HEX: 0D10 ; inline
-: GL_MAP_STENCIL                    HEX: 0D11 ; inline
-: GL_INDEX_SHIFT                    HEX: 0D12 ; inline
-: GL_INDEX_OFFSET                   HEX: 0D13 ; inline
-: GL_RED_SCALE                      HEX: 0D14 ; inline
-: GL_RED_BIAS                       HEX: 0D15 ; inline
-: GL_GREEN_SCALE                    HEX: 0D18 ; inline
-: GL_GREEN_BIAS                     HEX: 0D19 ; inline
-: GL_BLUE_SCALE                     HEX: 0D1A ; inline
-: GL_BLUE_BIAS                      HEX: 0D1B ; inline
-: GL_ALPHA_SCALE                    HEX: 0D1C ; inline
-: GL_ALPHA_BIAS                     HEX: 0D1D ; inline
-: GL_DEPTH_SCALE                    HEX: 0D1E ; inline
-: GL_DEPTH_BIAS                     HEX: 0D1F ; inline
-: GL_PIXEL_MAP_S_TO_S_SIZE          HEX: 0CB1 ; inline
-: GL_PIXEL_MAP_I_TO_I_SIZE          HEX: 0CB0 ; inline
-: GL_PIXEL_MAP_I_TO_R_SIZE          HEX: 0CB2 ; inline
-: GL_PIXEL_MAP_I_TO_G_SIZE          HEX: 0CB3 ; inline
-: GL_PIXEL_MAP_I_TO_B_SIZE          HEX: 0CB4 ; inline
-: GL_PIXEL_MAP_I_TO_A_SIZE          HEX: 0CB5 ; inline
-: GL_PIXEL_MAP_R_TO_R_SIZE          HEX: 0CB6 ; inline
-: GL_PIXEL_MAP_G_TO_G_SIZE          HEX: 0CB7 ; inline
-: GL_PIXEL_MAP_B_TO_B_SIZE          HEX: 0CB8 ; inline
-: GL_PIXEL_MAP_A_TO_A_SIZE          HEX: 0CB9 ; inline
-: GL_PIXEL_MAP_S_TO_S               HEX: 0C71 ; inline
-: GL_PIXEL_MAP_I_TO_I               HEX: 0C70 ; inline
-: GL_PIXEL_MAP_I_TO_R               HEX: 0C72 ; inline
-: GL_PIXEL_MAP_I_TO_G               HEX: 0C73 ; inline
-: GL_PIXEL_MAP_I_TO_B               HEX: 0C74 ; inline
-: GL_PIXEL_MAP_I_TO_A               HEX: 0C75 ; inline
-: GL_PIXEL_MAP_R_TO_R               HEX: 0C76 ; inline
-: GL_PIXEL_MAP_G_TO_G               HEX: 0C77 ; inline
-: GL_PIXEL_MAP_B_TO_B               HEX: 0C78 ; inline
-: GL_PIXEL_MAP_A_TO_A               HEX: 0C79 ; inline
-: GL_PACK_ALIGNMENT                 HEX: 0D05 ; inline
-: GL_PACK_LSB_FIRST                 HEX: 0D01 ; inline
-: GL_PACK_ROW_LENGTH                HEX: 0D02 ; inline
-: GL_PACK_SKIP_PIXELS               HEX: 0D04 ; inline
-: GL_PACK_SKIP_ROWS                 HEX: 0D03 ; inline
-: GL_PACK_SWAP_BYTES                HEX: 0D00 ; inline
-: GL_UNPACK_ALIGNMENT               HEX: 0CF5 ; inline
-: GL_UNPACK_LSB_FIRST               HEX: 0CF1 ; inline
-: GL_UNPACK_ROW_LENGTH              HEX: 0CF2 ; inline
-: GL_UNPACK_SKIP_PIXELS             HEX: 0CF4 ; inline
-: GL_UNPACK_SKIP_ROWS               HEX: 0CF3 ; inline
-: GL_UNPACK_SWAP_BYTES              HEX: 0CF0 ; inline
-: GL_ZOOM_X                         HEX: 0D16 ; inline
-: GL_ZOOM_Y                         HEX: 0D17 ; inline
+CONSTANT: GL_MAP_COLOR                      HEX: 0D10
+CONSTANT: GL_MAP_STENCIL                    HEX: 0D11
+CONSTANT: GL_INDEX_SHIFT                    HEX: 0D12
+CONSTANT: GL_INDEX_OFFSET                   HEX: 0D13
+CONSTANT: GL_RED_SCALE                      HEX: 0D14
+CONSTANT: GL_RED_BIAS                       HEX: 0D15
+CONSTANT: GL_GREEN_SCALE                    HEX: 0D18
+CONSTANT: GL_GREEN_BIAS                     HEX: 0D19
+CONSTANT: GL_BLUE_SCALE                     HEX: 0D1A
+CONSTANT: GL_BLUE_BIAS                      HEX: 0D1B
+CONSTANT: GL_ALPHA_SCALE                    HEX: 0D1C
+CONSTANT: GL_ALPHA_BIAS                     HEX: 0D1D
+CONSTANT: GL_DEPTH_SCALE                    HEX: 0D1E
+CONSTANT: GL_DEPTH_BIAS                     HEX: 0D1F
+CONSTANT: GL_PIXEL_MAP_S_TO_S_SIZE          HEX: 0CB1
+CONSTANT: GL_PIXEL_MAP_I_TO_I_SIZE          HEX: 0CB0
+CONSTANT: GL_PIXEL_MAP_I_TO_R_SIZE          HEX: 0CB2
+CONSTANT: GL_PIXEL_MAP_I_TO_G_SIZE          HEX: 0CB3
+CONSTANT: GL_PIXEL_MAP_I_TO_B_SIZE          HEX: 0CB4
+CONSTANT: GL_PIXEL_MAP_I_TO_A_SIZE          HEX: 0CB5
+CONSTANT: GL_PIXEL_MAP_R_TO_R_SIZE          HEX: 0CB6
+CONSTANT: GL_PIXEL_MAP_G_TO_G_SIZE          HEX: 0CB7
+CONSTANT: GL_PIXEL_MAP_B_TO_B_SIZE          HEX: 0CB8
+CONSTANT: GL_PIXEL_MAP_A_TO_A_SIZE          HEX: 0CB9
+CONSTANT: GL_PIXEL_MAP_S_TO_S               HEX: 0C71
+CONSTANT: GL_PIXEL_MAP_I_TO_I               HEX: 0C70
+CONSTANT: GL_PIXEL_MAP_I_TO_R               HEX: 0C72
+CONSTANT: GL_PIXEL_MAP_I_TO_G               HEX: 0C73
+CONSTANT: GL_PIXEL_MAP_I_TO_B               HEX: 0C74
+CONSTANT: GL_PIXEL_MAP_I_TO_A               HEX: 0C75
+CONSTANT: GL_PIXEL_MAP_R_TO_R               HEX: 0C76
+CONSTANT: GL_PIXEL_MAP_G_TO_G               HEX: 0C77
+CONSTANT: GL_PIXEL_MAP_B_TO_B               HEX: 0C78
+CONSTANT: GL_PIXEL_MAP_A_TO_A               HEX: 0C79
+CONSTANT: GL_PACK_ALIGNMENT                 HEX: 0D05
+CONSTANT: GL_PACK_LSB_FIRST                 HEX: 0D01
+CONSTANT: GL_PACK_ROW_LENGTH                HEX: 0D02
+CONSTANT: GL_PACK_SKIP_PIXELS               HEX: 0D04
+CONSTANT: GL_PACK_SKIP_ROWS                 HEX: 0D03
+CONSTANT: GL_PACK_SWAP_BYTES                HEX: 0D00
+CONSTANT: GL_UNPACK_ALIGNMENT               HEX: 0CF5
+CONSTANT: GL_UNPACK_LSB_FIRST               HEX: 0CF1
+CONSTANT: GL_UNPACK_ROW_LENGTH              HEX: 0CF2
+CONSTANT: GL_UNPACK_SKIP_PIXELS             HEX: 0CF4
+CONSTANT: GL_UNPACK_SKIP_ROWS               HEX: 0CF3
+CONSTANT: GL_UNPACK_SWAP_BYTES              HEX: 0CF0
+CONSTANT: GL_ZOOM_X                         HEX: 0D16
+CONSTANT: GL_ZOOM_Y                         HEX: 0D17
 
 ! Texture mapping inline
-: GL_TEXTURE_ENV                    HEX: 2300 ; inline
-: GL_TEXTURE_ENV_MODE               HEX: 2200 ; inline
-: GL_TEXTURE_1D                     HEX: 0DE0 ; inline
-: GL_TEXTURE_2D                     HEX: 0DE1 ; inline
-: GL_TEXTURE_WRAP_S                 HEX: 2802 ; inline
-: GL_TEXTURE_WRAP_T                 HEX: 2803 ; inline
-: GL_TEXTURE_MAG_FILTER             HEX: 2800 ; inline
-: GL_TEXTURE_MIN_FILTER             HEX: 2801 ; inline
-: GL_TEXTURE_ENV_COLOR              HEX: 2201 ; inline
-: GL_TEXTURE_GEN_S                  HEX: 0C60 ; inline
-: GL_TEXTURE_GEN_T                  HEX: 0C61 ; inline
-: GL_TEXTURE_GEN_MODE               HEX: 2500 ; inline
-: GL_TEXTURE_BORDER_COLOR           HEX: 1004 ; inline
-: GL_TEXTURE_WIDTH                  HEX: 1000 ; inline
-: GL_TEXTURE_HEIGHT                 HEX: 1001 ; inline
-: GL_TEXTURE_BORDER                 HEX: 1005 ; inline
-: GL_TEXTURE_COMPONENTS             HEX: 1003 ; inline
-: GL_TEXTURE_RED_SIZE               HEX: 805C ; inline
-: GL_TEXTURE_GREEN_SIZE             HEX: 805D ; inline
-: GL_TEXTURE_BLUE_SIZE              HEX: 805E ; inline
-: GL_TEXTURE_ALPHA_SIZE             HEX: 805F ; inline
-: GL_TEXTURE_LUMINANCE_SIZE         HEX: 8060 ; inline
-: GL_TEXTURE_INTENSITY_SIZE         HEX: 8061 ; inline
-: GL_NEAREST_MIPMAP_NEAREST         HEX: 2700 ; inline
-: GL_NEAREST_MIPMAP_LINEAR          HEX: 2702 ; inline
-: GL_LINEAR_MIPMAP_NEAREST          HEX: 2701 ; inline
-: GL_LINEAR_MIPMAP_LINEAR           HEX: 2703 ; inline
-: GL_OBJECT_LINEAR                  HEX: 2401 ; inline
-: GL_OBJECT_PLANE                   HEX: 2501 ; inline
-: GL_EYE_LINEAR                     HEX: 2400 ; inline
-: GL_EYE_PLANE                      HEX: 2502 ; inline
-: GL_SPHERE_MAP                     HEX: 2402 ; inline
-: GL_DECAL                          HEX: 2101 ; inline
-: GL_MODULATE                       HEX: 2100 ; inline
-: GL_NEAREST                        HEX: 2600 ; inline
-: GL_REPEAT                         HEX: 2901 ; inline
-: GL_CLAMP                          HEX: 2900 ; inline
-: GL_S                              HEX: 2000 ; inline
-: GL_T                              HEX: 2001 ; inline
-: GL_R                              HEX: 2002 ; inline
-: GL_Q                              HEX: 2003 ; inline
-: GL_TEXTURE_GEN_R                  HEX: 0C62 ; inline
-: GL_TEXTURE_GEN_Q                  HEX: 0C63 ; inline
+CONSTANT: GL_TEXTURE_ENV                    HEX: 2300
+CONSTANT: GL_TEXTURE_ENV_MODE               HEX: 2200
+CONSTANT: GL_TEXTURE_1D                     HEX: 0DE0
+CONSTANT: GL_TEXTURE_2D                     HEX: 0DE1
+CONSTANT: GL_TEXTURE_WRAP_S                 HEX: 2802
+CONSTANT: GL_TEXTURE_WRAP_T                 HEX: 2803
+CONSTANT: GL_TEXTURE_MAG_FILTER             HEX: 2800
+CONSTANT: GL_TEXTURE_MIN_FILTER             HEX: 2801
+CONSTANT: GL_TEXTURE_ENV_COLOR              HEX: 2201
+CONSTANT: GL_TEXTURE_GEN_S                  HEX: 0C60
+CONSTANT: GL_TEXTURE_GEN_T                  HEX: 0C61
+CONSTANT: GL_TEXTURE_GEN_MODE               HEX: 2500
+CONSTANT: GL_TEXTURE_BORDER_COLOR           HEX: 1004
+CONSTANT: GL_TEXTURE_WIDTH                  HEX: 1000
+CONSTANT: GL_TEXTURE_HEIGHT                 HEX: 1001
+CONSTANT: GL_TEXTURE_BORDER                 HEX: 1005
+CONSTANT: GL_TEXTURE_COMPONENTS             HEX: 1003
+CONSTANT: GL_TEXTURE_RED_SIZE               HEX: 805C
+CONSTANT: GL_TEXTURE_GREEN_SIZE             HEX: 805D
+CONSTANT: GL_TEXTURE_BLUE_SIZE              HEX: 805E
+CONSTANT: GL_TEXTURE_ALPHA_SIZE             HEX: 805F
+CONSTANT: GL_TEXTURE_LUMINANCE_SIZE         HEX: 8060
+CONSTANT: GL_TEXTURE_INTENSITY_SIZE         HEX: 8061
+CONSTANT: GL_NEAREST_MIPMAP_NEAREST         HEX: 2700
+CONSTANT: GL_NEAREST_MIPMAP_LINEAR          HEX: 2702
+CONSTANT: GL_LINEAR_MIPMAP_NEAREST          HEX: 2701
+CONSTANT: GL_LINEAR_MIPMAP_LINEAR           HEX: 2703
+CONSTANT: GL_OBJECT_LINEAR                  HEX: 2401
+CONSTANT: GL_OBJECT_PLANE                   HEX: 2501
+CONSTANT: GL_EYE_LINEAR                     HEX: 2400
+CONSTANT: GL_EYE_PLANE                      HEX: 2502
+CONSTANT: GL_SPHERE_MAP                     HEX: 2402
+CONSTANT: GL_DECAL                          HEX: 2101
+CONSTANT: GL_MODULATE                       HEX: 2100
+CONSTANT: GL_NEAREST                        HEX: 2600
+CONSTANT: GL_REPEAT                         HEX: 2901
+CONSTANT: GL_CLAMP                          HEX: 2900
+CONSTANT: GL_S                              HEX: 2000
+CONSTANT: GL_T                              HEX: 2001
+CONSTANT: GL_R                              HEX: 2002
+CONSTANT: GL_Q                              HEX: 2003
+CONSTANT: GL_TEXTURE_GEN_R                  HEX: 0C62
+CONSTANT: GL_TEXTURE_GEN_Q                  HEX: 0C63
 
 ! Utility inline
-: GL_VENDOR                         HEX: 1F00 ; inline
-: GL_RENDERER                       HEX: 1F01 ; inline
-: GL_VERSION                        HEX: 1F02 ; inline
-: GL_EXTENSIONS                     HEX: 1F03 ; inline
+CONSTANT: GL_VENDOR                         HEX: 1F00
+CONSTANT: GL_RENDERER                       HEX: 1F01
+CONSTANT: GL_VERSION                        HEX: 1F02
+CONSTANT: GL_EXTENSIONS                     HEX: 1F03
 
 ! Errors inline
-: GL_NO_ERROR                       HEX:    0 ; inline
-: GL_INVALID_VALUE                  HEX: 0501 ; inline
-: GL_INVALID_ENUM                   HEX: 0500 ; inline
-: GL_INVALID_OPERATION              HEX: 0502 ; inline
-: GL_STACK_OVERFLOW                 HEX: 0503 ; inline
-: GL_STACK_UNDERFLOW                HEX: 0504 ; inline
-: GL_OUT_OF_MEMORY                  HEX: 0505 ; inline
+CONSTANT: GL_NO_ERROR                       HEX:    0
+CONSTANT: GL_INVALID_VALUE                  HEX: 0501
+CONSTANT: GL_INVALID_ENUM                   HEX: 0500
+CONSTANT: GL_INVALID_OPERATION              HEX: 0502
+CONSTANT: GL_STACK_OVERFLOW                 HEX: 0503
+CONSTANT: GL_STACK_UNDERFLOW                HEX: 0504
+CONSTANT: GL_OUT_OF_MEMORY                  HEX: 0505
 
 ! glPush/PopAttrib bits
-: GL_CURRENT_BIT                    HEX: 00000001 ; inline
-: GL_POINT_BIT                      HEX: 00000002 ; inline
-: GL_LINE_BIT                       HEX: 00000004 ; inline
-: GL_POLYGON_BIT                    HEX: 00000008 ; inline
-: GL_POLYGON_STIPPLE_BIT            HEX: 00000010 ; inline
-: GL_PIXEL_MODE_BIT                 HEX: 00000020 ; inline
-: GL_LIGHTING_BIT                   HEX: 00000040 ; inline
-: GL_FOG_BIT                        HEX: 00000080 ; inline
-: GL_DEPTH_BUFFER_BIT               HEX: 00000100 ; inline
-: GL_ACCUM_BUFFER_BIT               HEX: 00000200 ; inline
-: GL_STENCIL_BUFFER_BIT             HEX: 00000400 ; inline
-: GL_VIEWPORT_BIT                   HEX: 00000800 ; inline
-: GL_TRANSFORM_BIT                  HEX: 00001000 ; inline
-: GL_ENABLE_BIT                     HEX: 00002000 ; inline
-: GL_COLOR_BUFFER_BIT               HEX: 00004000 ; inline
-: GL_HINT_BIT                       HEX: 00008000 ; inline
-: GL_EVAL_BIT                       HEX: 00010000 ; inline
-: GL_LIST_BIT                       HEX: 00020000 ; inline
-: GL_TEXTURE_BIT                    HEX: 00040000 ; inline
-: GL_SCISSOR_BIT                    HEX: 00080000 ; inline
-: GL_ALL_ATTRIB_BITS                HEX: 000FFFFF ; inline
+CONSTANT: GL_CURRENT_BIT                    HEX: 00000001
+CONSTANT: GL_POINT_BIT                      HEX: 00000002
+CONSTANT: GL_LINE_BIT                       HEX: 00000004
+CONSTANT: GL_POLYGON_BIT                    HEX: 00000008
+CONSTANT: GL_POLYGON_STIPPLE_BIT            HEX: 00000010
+CONSTANT: GL_PIXEL_MODE_BIT                 HEX: 00000020
+CONSTANT: GL_LIGHTING_BIT                   HEX: 00000040
+CONSTANT: GL_FOG_BIT                        HEX: 00000080
+CONSTANT: GL_DEPTH_BUFFER_BIT               HEX: 00000100
+CONSTANT: GL_ACCUM_BUFFER_BIT               HEX: 00000200
+CONSTANT: GL_STENCIL_BUFFER_BIT             HEX: 00000400
+CONSTANT: GL_VIEWPORT_BIT                   HEX: 00000800
+CONSTANT: GL_TRANSFORM_BIT                  HEX: 00001000
+CONSTANT: GL_ENABLE_BIT                     HEX: 00002000
+CONSTANT: GL_COLOR_BUFFER_BIT               HEX: 00004000
+CONSTANT: GL_HINT_BIT                       HEX: 00008000
+CONSTANT: GL_EVAL_BIT                       HEX: 00010000
+CONSTANT: GL_LIST_BIT                       HEX: 00020000
+CONSTANT: GL_TEXTURE_BIT                    HEX: 00040000
+CONSTANT: GL_SCISSOR_BIT                    HEX: 00080000
+CONSTANT: GL_ALL_ATTRIB_BITS                HEX: 000FFFFF
 
 ! OpenGL 1.1
-: GL_PROXY_TEXTURE_1D               HEX: 8063 ; inline
-: GL_PROXY_TEXTURE_2D               HEX: 8064 ; inline
-: GL_TEXTURE_PRIORITY               HEX: 8066 ; inline
-: GL_TEXTURE_RESIDENT               HEX: 8067 ; inline
-: GL_TEXTURE_BINDING_1D             HEX: 8068 ; inline
-: GL_TEXTURE_BINDING_2D             HEX: 8069 ; inline
-: GL_TEXTURE_INTERNAL_FORMAT        HEX: 1003 ; inline
-: GL_ALPHA4                         HEX: 803B ; inline
-: GL_ALPHA8                         HEX: 803C ; inline
-: GL_ALPHA12                        HEX: 803D ; inline
-: GL_ALPHA16                        HEX: 803E ; inline
-: GL_LUMINANCE4                     HEX: 803F ; inline
-: GL_LUMINANCE8                     HEX: 8040 ; inline
-: GL_LUMINANCE12                    HEX: 8041 ; inline
-: GL_LUMINANCE16                    HEX: 8042 ; inline
-: GL_LUMINANCE4_ALPHA4              HEX: 8043 ; inline
-: GL_LUMINANCE6_ALPHA2              HEX: 8044 ; inline
-: GL_LUMINANCE8_ALPHA8              HEX: 8045 ; inline
-: GL_LUMINANCE12_ALPHA4             HEX: 8046 ; inline
-: GL_LUMINANCE12_ALPHA12            HEX: 8047 ; inline
-: GL_LUMINANCE16_ALPHA16            HEX: 8048 ; inline
-: GL_INTENSITY                      HEX: 8049 ; inline
-: GL_INTENSITY4                     HEX: 804A ; inline
-: GL_INTENSITY8                     HEX: 804B ; inline
-: GL_INTENSITY12                    HEX: 804C ; inline
-: GL_INTENSITY16                    HEX: 804D ; inline
-: GL_R3_G3_B2                       HEX: 2A10 ; inline
-: GL_RGB4                           HEX: 804F ; inline
-: GL_RGB5                           HEX: 8050 ; inline
-: GL_RGB8                           HEX: 8051 ; inline
-: GL_RGB10                          HEX: 8052 ; inline
-: GL_RGB12                          HEX: 8053 ; inline
-: GL_RGB16                          HEX: 8054 ; inline
-: GL_RGBA2                          HEX: 8055 ; inline
-: GL_RGBA4                          HEX: 8056 ; inline
-: GL_RGB5_A1                        HEX: 8057 ; inline
-: GL_RGBA8                          HEX: 8058 ; inline
-: GL_RGB10_A2                       HEX: 8059 ; inline
-: GL_RGBA12                         HEX: 805A ; inline
-: GL_RGBA16                         HEX: 805B ; inline
-: GL_CLIENT_PIXEL_STORE_BIT         HEX: 00000001 ; inline
-: GL_CLIENT_VERTEX_ARRAY_BIT        HEX: 00000002 ; inline
-: GL_ALL_CLIENT_ATTRIB_BITS         HEX: FFFFFFFF ; inline
-: GL_CLIENT_ALL_ATTRIB_BITS         HEX: FFFFFFFF ; inline
+CONSTANT: GL_PROXY_TEXTURE_1D               HEX: 8063
+CONSTANT: GL_PROXY_TEXTURE_2D               HEX: 8064
+CONSTANT: GL_TEXTURE_PRIORITY               HEX: 8066
+CONSTANT: GL_TEXTURE_RESIDENT               HEX: 8067
+CONSTANT: GL_TEXTURE_BINDING_1D             HEX: 8068
+CONSTANT: GL_TEXTURE_BINDING_2D             HEX: 8069
+CONSTANT: GL_TEXTURE_INTERNAL_FORMAT        HEX: 1003
+CONSTANT: GL_ALPHA4                         HEX: 803B
+CONSTANT: GL_ALPHA8                         HEX: 803C
+CONSTANT: GL_ALPHA12                        HEX: 803D
+CONSTANT: GL_ALPHA16                        HEX: 803E
+CONSTANT: GL_LUMINANCE4                     HEX: 803F
+CONSTANT: GL_LUMINANCE8                     HEX: 8040
+CONSTANT: GL_LUMINANCE12                    HEX: 8041
+CONSTANT: GL_LUMINANCE16                    HEX: 8042
+CONSTANT: GL_LUMINANCE4_ALPHA4              HEX: 8043
+CONSTANT: GL_LUMINANCE6_ALPHA2              HEX: 8044
+CONSTANT: GL_LUMINANCE8_ALPHA8              HEX: 8045
+CONSTANT: GL_LUMINANCE12_ALPHA4             HEX: 8046
+CONSTANT: GL_LUMINANCE12_ALPHA12            HEX: 8047
+CONSTANT: GL_LUMINANCE16_ALPHA16            HEX: 8048
+CONSTANT: GL_INTENSITY                      HEX: 8049
+CONSTANT: GL_INTENSITY4                     HEX: 804A
+CONSTANT: GL_INTENSITY8                     HEX: 804B
+CONSTANT: GL_INTENSITY12                    HEX: 804C
+CONSTANT: GL_INTENSITY16                    HEX: 804D
+CONSTANT: GL_R3_G3_B2                       HEX: 2A10
+CONSTANT: GL_RGB4                           HEX: 804F
+CONSTANT: GL_RGB5                           HEX: 8050
+CONSTANT: GL_RGB8                           HEX: 8051
+CONSTANT: GL_RGB10                          HEX: 8052
+CONSTANT: GL_RGB12                          HEX: 8053
+CONSTANT: GL_RGB16                          HEX: 8054
+CONSTANT: GL_RGBA2                          HEX: 8055
+CONSTANT: GL_RGBA4                          HEX: 8056
+CONSTANT: GL_RGB5_A1                        HEX: 8057
+CONSTANT: GL_RGBA8                          HEX: 8058
+CONSTANT: GL_RGB10_A2                       HEX: 8059
+CONSTANT: GL_RGBA12                         HEX: 805A
+CONSTANT: GL_RGBA16                         HEX: 805B
+CONSTANT: GL_CLIENT_PIXEL_STORE_BIT         HEX: 00000001
+CONSTANT: GL_CLIENT_VERTEX_ARRAY_BIT        HEX: 00000002
+CONSTANT: GL_ALL_CLIENT_ATTRIB_BITS         HEX: FFFFFFFF
+CONSTANT: GL_CLIENT_ALL_ATTRIB_BITS         HEX: FFFFFFFF
 
 LIBRARY: gl
 
@@ -1123,47 +1119,47 @@ FUNCTION: void glPopName ( ) ;
 
 ! OpenGL 1.2
 
-: GL_SMOOTH_POINT_SIZE_RANGE HEX: 0B12 ; inline
-: GL_SMOOTH_POINT_SIZE_GRANULARITY HEX: 0B13 ; inline
-: GL_SMOOTH_LINE_WIDTH_RANGE HEX: 0B22 ; inline
-: GL_SMOOTH_LINE_WIDTH_GRANULARITY HEX: 0B23 ; inline
-: GL_UNSIGNED_BYTE_3_3_2 HEX: 8032 ; inline
-: GL_UNSIGNED_SHORT_4_4_4_4 HEX: 8033 ; inline
-: GL_UNSIGNED_SHORT_5_5_5_1 HEX: 8034 ; inline
-: GL_UNSIGNED_INT_8_8_8_8 HEX: 8035 ; inline
-: GL_UNSIGNED_INT_10_10_10_2 HEX: 8036 ; inline
-: GL_RESCALE_NORMAL HEX: 803A ; inline
-: GL_TEXTURE_BINDING_3D HEX: 806A ; inline
-: GL_PACK_SKIP_IMAGES HEX: 806B ; inline
-: GL_PACK_IMAGE_HEIGHT HEX: 806C ; inline
-: GL_UNPACK_SKIP_IMAGES HEX: 806D ; inline
-: GL_UNPACK_IMAGE_HEIGHT HEX: 806E ; inline
-: GL_TEXTURE_3D HEX: 806F ; inline
-: GL_PROXY_TEXTURE_3D HEX: 8070 ; inline
-: GL_TEXTURE_DEPTH HEX: 8071 ; inline
-: GL_TEXTURE_WRAP_R HEX: 8072 ; inline
-: GL_MAX_3D_TEXTURE_SIZE HEX: 8073 ; inline
-: GL_BGR HEX: 80E0 ; inline
-: GL_BGRA HEX: 80E1 ; inline
-: GL_MAX_ELEMENTS_VERTICES HEX: 80E8 ; inline
-: GL_MAX_ELEMENTS_INDICES HEX: 80E9 ; inline
-: GL_CLAMP_TO_EDGE HEX: 812F ; inline
-: GL_TEXTURE_MIN_LOD HEX: 813A ; inline
-: GL_TEXTURE_MAX_LOD HEX: 813B ; inline
-: GL_TEXTURE_BASE_LEVEL HEX: 813C ; inline
-: GL_TEXTURE_MAX_LEVEL HEX: 813D ; inline
-: GL_LIGHT_MODEL_COLOR_CONTROL HEX: 81F8 ; inline
-: GL_SINGLE_COLOR HEX: 81F9 ; inline
-: GL_SEPARATE_SPECULAR_COLOR HEX: 81FA ; inline
-: GL_UNSIGNED_BYTE_2_3_3_REV HEX: 8362 ; inline
-: GL_UNSIGNED_SHORT_5_6_5 HEX: 8363 ; inline
-: GL_UNSIGNED_SHORT_5_6_5_REV HEX: 8364 ; inline
-: GL_UNSIGNED_SHORT_4_4_4_4_REV HEX: 8365 ; inline
-: GL_UNSIGNED_SHORT_1_5_5_5_REV HEX: 8366 ; inline
-: GL_UNSIGNED_INT_8_8_8_8_REV HEX: 8367 ; inline
-: GL_UNSIGNED_INT_2_10_10_10_REV HEX: 8368 ; inline
-: GL_ALIASED_POINT_SIZE_RANGE HEX: 846D ; inline
-: GL_ALIASED_LINE_WIDTH_RANGE HEX: 846E ; inline
+CONSTANT: GL_SMOOTH_POINT_SIZE_RANGE HEX: 0B12
+CONSTANT: GL_SMOOTH_POINT_SIZE_GRANULARITY HEX: 0B13
+CONSTANT: GL_SMOOTH_LINE_WIDTH_RANGE HEX: 0B22
+CONSTANT: GL_SMOOTH_LINE_WIDTH_GRANULARITY HEX: 0B23
+CONSTANT: GL_UNSIGNED_BYTE_3_3_2 HEX: 8032
+CONSTANT: GL_UNSIGNED_SHORT_4_4_4_4 HEX: 8033
+CONSTANT: GL_UNSIGNED_SHORT_5_5_5_1 HEX: 8034
+CONSTANT: GL_UNSIGNED_INT_8_8_8_8 HEX: 8035
+CONSTANT: GL_UNSIGNED_INT_10_10_10_2 HEX: 8036
+CONSTANT: GL_RESCALE_NORMAL HEX: 803A
+CONSTANT: GL_TEXTURE_BINDING_3D HEX: 806A
+CONSTANT: GL_PACK_SKIP_IMAGES HEX: 806B
+CONSTANT: GL_PACK_IMAGE_HEIGHT HEX: 806C
+CONSTANT: GL_UNPACK_SKIP_IMAGES HEX: 806D
+CONSTANT: GL_UNPACK_IMAGE_HEIGHT HEX: 806E
+CONSTANT: GL_TEXTURE_3D HEX: 806F
+CONSTANT: GL_PROXY_TEXTURE_3D HEX: 8070
+CONSTANT: GL_TEXTURE_DEPTH HEX: 8071
+CONSTANT: GL_TEXTURE_WRAP_R HEX: 8072
+CONSTANT: GL_MAX_3D_TEXTURE_SIZE HEX: 8073
+CONSTANT: GL_BGR HEX: 80E0
+CONSTANT: GL_BGRA HEX: 80E1
+CONSTANT: GL_MAX_ELEMENTS_VERTICES HEX: 80E8
+CONSTANT: GL_MAX_ELEMENTS_INDICES HEX: 80E9
+CONSTANT: GL_CLAMP_TO_EDGE HEX: 812F
+CONSTANT: GL_TEXTURE_MIN_LOD HEX: 813A
+CONSTANT: GL_TEXTURE_MAX_LOD HEX: 813B
+CONSTANT: GL_TEXTURE_BASE_LEVEL HEX: 813C
+CONSTANT: GL_TEXTURE_MAX_LEVEL HEX: 813D
+CONSTANT: GL_LIGHT_MODEL_COLOR_CONTROL HEX: 81F8
+CONSTANT: GL_SINGLE_COLOR HEX: 81F9
+CONSTANT: GL_SEPARATE_SPECULAR_COLOR HEX: 81FA
+CONSTANT: GL_UNSIGNED_BYTE_2_3_3_REV HEX: 8362
+CONSTANT: GL_UNSIGNED_SHORT_5_6_5 HEX: 8363
+CONSTANT: GL_UNSIGNED_SHORT_5_6_5_REV HEX: 8364
+CONSTANT: GL_UNSIGNED_SHORT_4_4_4_4_REV HEX: 8365
+CONSTANT: GL_UNSIGNED_SHORT_1_5_5_5_REV HEX: 8366
+CONSTANT: GL_UNSIGNED_INT_8_8_8_8_REV HEX: 8367
+CONSTANT: GL_UNSIGNED_INT_2_10_10_10_REV HEX: 8368
+CONSTANT: GL_ALIASED_POINT_SIZE_RANGE HEX: 846D
+CONSTANT: GL_ALIASED_LINE_WIDTH_RANGE HEX: 846E
 
 GL-FUNCTION: void glCopyTexSubImage3D { glCopyTexSubImage3DEXT } ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ) ;
 GL-FUNCTION: void glDrawRangeElements { glDrawRangeElementsEXT } ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLvoid* indices ) ;
@@ -1174,102 +1170,102 @@ GL-FUNCTION: void glTexSubImage3D { glTexSubImage3DEXT } ( GLenum target, GLint
 ! OpenGL 1.3
 
 
-: GL_MULTISAMPLE HEX: 809D ; inline
-: GL_SAMPLE_ALPHA_TO_COVERAGE HEX: 809E ; inline
-: GL_SAMPLE_ALPHA_TO_ONE HEX: 809F ; inline
-: GL_SAMPLE_COVERAGE HEX: 80A0 ; inline
-: GL_SAMPLE_BUFFERS HEX: 80A8 ; inline
-: GL_SAMPLES HEX: 80A9 ; inline
-: GL_SAMPLE_COVERAGE_VALUE HEX: 80AA ; inline
-: GL_SAMPLE_COVERAGE_INVERT HEX: 80AB ; inline
-: GL_CLAMP_TO_BORDER HEX: 812D ; inline
-: GL_TEXTURE0 HEX: 84C0 ; inline
-: GL_TEXTURE1 HEX: 84C1 ; inline
-: GL_TEXTURE2 HEX: 84C2 ; inline
-: GL_TEXTURE3 HEX: 84C3 ; inline
-: GL_TEXTURE4 HEX: 84C4 ; inline
-: GL_TEXTURE5 HEX: 84C5 ; inline
-: GL_TEXTURE6 HEX: 84C6 ; inline
-: GL_TEXTURE7 HEX: 84C7 ; inline
-: GL_TEXTURE8 HEX: 84C8 ; inline
-: GL_TEXTURE9 HEX: 84C9 ; inline
-: GL_TEXTURE10 HEX: 84CA ; inline
-: GL_TEXTURE11 HEX: 84CB ; inline
-: GL_TEXTURE12 HEX: 84CC ; inline
-: GL_TEXTURE13 HEX: 84CD ; inline
-: GL_TEXTURE14 HEX: 84CE ; inline
-: GL_TEXTURE15 HEX: 84CF ; inline
-: GL_TEXTURE16 HEX: 84D0 ; inline
-: GL_TEXTURE17 HEX: 84D1 ; inline
-: GL_TEXTURE18 HEX: 84D2 ; inline
-: GL_TEXTURE19 HEX: 84D3 ; inline
-: GL_TEXTURE20 HEX: 84D4 ; inline
-: GL_TEXTURE21 HEX: 84D5 ; inline
-: GL_TEXTURE22 HEX: 84D6 ; inline
-: GL_TEXTURE23 HEX: 84D7 ; inline
-: GL_TEXTURE24 HEX: 84D8 ; inline
-: GL_TEXTURE25 HEX: 84D9 ; inline
-: GL_TEXTURE26 HEX: 84DA ; inline
-: GL_TEXTURE27 HEX: 84DB ; inline
-: GL_TEXTURE28 HEX: 84DC ; inline
-: GL_TEXTURE29 HEX: 84DD ; inline
-: GL_TEXTURE30 HEX: 84DE ; inline
-: GL_TEXTURE31 HEX: 84DF ; inline
-: GL_ACTIVE_TEXTURE HEX: 84E0 ; inline
-: GL_CLIENT_ACTIVE_TEXTURE HEX: 84E1 ; inline
-: GL_MAX_TEXTURE_UNITS HEX: 84E2 ; inline
-: GL_TRANSPOSE_MODELVIEW_MATRIX HEX: 84E3 ; inline
-: GL_TRANSPOSE_PROJECTION_MATRIX HEX: 84E4 ; inline
-: GL_TRANSPOSE_TEXTURE_MATRIX HEX: 84E5 ; inline
-: GL_TRANSPOSE_COLOR_MATRIX HEX: 84E6 ; inline
-: GL_SUBTRACT HEX: 84E7 ; inline
-: GL_COMPRESSED_ALPHA HEX: 84E9 ; inline
-: GL_COMPRESSED_LUMINANCE HEX: 84EA ; inline
-: GL_COMPRESSED_LUMINANCE_ALPHA HEX: 84EB ; inline
-: GL_COMPRESSED_INTENSITY HEX: 84EC ; inline
-: GL_COMPRESSED_RGB HEX: 84ED ; inline
-: GL_COMPRESSED_RGBA HEX: 84EE ; inline
-: GL_TEXTURE_COMPRESSION_HINT HEX: 84EF ; inline
-: GL_NORMAL_MAP HEX: 8511 ; inline
-: GL_REFLECTION_MAP HEX: 8512 ; inline
-: GL_TEXTURE_CUBE_MAP HEX: 8513 ; inline
-: GL_TEXTURE_BINDING_CUBE_MAP HEX: 8514 ; inline
-: GL_TEXTURE_CUBE_MAP_POSITIVE_X HEX: 8515 ; inline
-: GL_TEXTURE_CUBE_MAP_NEGATIVE_X HEX: 8516 ; inline
-: GL_TEXTURE_CUBE_MAP_POSITIVE_Y HEX: 8517 ; inline
-: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y HEX: 8518 ; inline
-: GL_TEXTURE_CUBE_MAP_POSITIVE_Z HEX: 8519 ; inline
-: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z HEX: 851A ; inline
-: GL_PROXY_TEXTURE_CUBE_MAP HEX: 851B ; inline
-: GL_MAX_CUBE_MAP_TEXTURE_SIZE HEX: 851C ; inline
-: GL_COMBINE HEX: 8570 ; inline
-: GL_COMBINE_RGB HEX: 8571 ; inline
-: GL_COMBINE_ALPHA HEX: 8572 ; inline
-: GL_RGB_SCALE HEX: 8573 ; inline
-: GL_ADD_SIGNED HEX: 8574 ; inline
-: GL_INTERPOLATE HEX: 8575 ; inline
-: GL_CONSTANT HEX: 8576 ; inline
-: GL_PRIMARY_COLOR HEX: 8577 ; inline
-: GL_PREVIOUS HEX: 8578 ; inline
-: GL_SOURCE0_RGB HEX: 8580 ; inline
-: GL_SOURCE1_RGB HEX: 8581 ; inline
-: GL_SOURCE2_RGB HEX: 8582 ; inline
-: GL_SOURCE0_ALPHA HEX: 8588 ; inline
-: GL_SOURCE1_ALPHA HEX: 8589 ; inline
-: GL_SOURCE2_ALPHA HEX: 858A ; inline
-: GL_OPERAND0_RGB HEX: 8590 ; inline
-: GL_OPERAND1_RGB HEX: 8591 ; inline
-: GL_OPERAND2_RGB HEX: 8592 ; inline
-: GL_OPERAND0_ALPHA HEX: 8598 ; inline
-: GL_OPERAND1_ALPHA HEX: 8599 ; inline
-: GL_OPERAND2_ALPHA HEX: 859A ; inline
-: GL_TEXTURE_COMPRESSED_IMAGE_SIZE HEX: 86A0 ; inline
-: GL_TEXTURE_COMPRESSED HEX: 86A1 ; inline
-: GL_NUM_COMPRESSED_TEXTURE_FORMATS HEX: 86A2 ; inline
-: GL_COMPRESSED_TEXTURE_FORMATS HEX: 86A3 ; inline
-: GL_DOT3_RGB HEX: 86AE ; inline
-: GL_DOT3_RGBA HEX: 86AF ; inline
-: GL_MULTISAMPLE_BIT HEX: 20000000 ; inline
+CONSTANT: GL_MULTISAMPLE HEX: 809D
+CONSTANT: GL_SAMPLE_ALPHA_TO_COVERAGE HEX: 809E
+CONSTANT: GL_SAMPLE_ALPHA_TO_ONE HEX: 809F
+CONSTANT: GL_SAMPLE_COVERAGE HEX: 80A0
+CONSTANT: GL_SAMPLE_BUFFERS HEX: 80A8
+CONSTANT: GL_SAMPLES HEX: 80A9
+CONSTANT: GL_SAMPLE_COVERAGE_VALUE HEX: 80AA
+CONSTANT: GL_SAMPLE_COVERAGE_INVERT HEX: 80AB
+CONSTANT: GL_CLAMP_TO_BORDER HEX: 812D
+CONSTANT: GL_TEXTURE0 HEX: 84C0
+CONSTANT: GL_TEXTURE1 HEX: 84C1
+CONSTANT: GL_TEXTURE2 HEX: 84C2
+CONSTANT: GL_TEXTURE3 HEX: 84C3
+CONSTANT: GL_TEXTURE4 HEX: 84C4
+CONSTANT: GL_TEXTURE5 HEX: 84C5
+CONSTANT: GL_TEXTURE6 HEX: 84C6
+CONSTANT: GL_TEXTURE7 HEX: 84C7
+CONSTANT: GL_TEXTURE8 HEX: 84C8
+CONSTANT: GL_TEXTURE9 HEX: 84C9
+CONSTANT: GL_TEXTURE10 HEX: 84CA
+CONSTANT: GL_TEXTURE11 HEX: 84CB
+CONSTANT: GL_TEXTURE12 HEX: 84CC
+CONSTANT: GL_TEXTURE13 HEX: 84CD
+CONSTANT: GL_TEXTURE14 HEX: 84CE
+CONSTANT: GL_TEXTURE15 HEX: 84CF
+CONSTANT: GL_TEXTURE16 HEX: 84D0
+CONSTANT: GL_TEXTURE17 HEX: 84D1
+CONSTANT: GL_TEXTURE18 HEX: 84D2
+CONSTANT: GL_TEXTURE19 HEX: 84D3
+CONSTANT: GL_TEXTURE20 HEX: 84D4
+CONSTANT: GL_TEXTURE21 HEX: 84D5
+CONSTANT: GL_TEXTURE22 HEX: 84D6
+CONSTANT: GL_TEXTURE23 HEX: 84D7
+CONSTANT: GL_TEXTURE24 HEX: 84D8
+CONSTANT: GL_TEXTURE25 HEX: 84D9
+CONSTANT: GL_TEXTURE26 HEX: 84DA
+CONSTANT: GL_TEXTURE27 HEX: 84DB
+CONSTANT: GL_TEXTURE28 HEX: 84DC
+CONSTANT: GL_TEXTURE29 HEX: 84DD
+CONSTANT: GL_TEXTURE30 HEX: 84DE
+CONSTANT: GL_TEXTURE31 HEX: 84DF
+CONSTANT: GL_ACTIVE_TEXTURE HEX: 84E0
+CONSTANT: GL_CLIENT_ACTIVE_TEXTURE HEX: 84E1
+CONSTANT: GL_MAX_TEXTURE_UNITS HEX: 84E2
+CONSTANT: GL_TRANSPOSE_MODELVIEW_MATRIX HEX: 84E3
+CONSTANT: GL_TRANSPOSE_PROJECTION_MATRIX HEX: 84E4
+CONSTANT: GL_TRANSPOSE_TEXTURE_MATRIX HEX: 84E5
+CONSTANT: GL_TRANSPOSE_COLOR_MATRIX HEX: 84E6
+CONSTANT: GL_SUBTRACT HEX: 84E7
+CONSTANT: GL_COMPRESSED_ALPHA HEX: 84E9
+CONSTANT: GL_COMPRESSED_LUMINANCE HEX: 84EA
+CONSTANT: GL_COMPRESSED_LUMINANCE_ALPHA HEX: 84EB
+CONSTANT: GL_COMPRESSED_INTENSITY HEX: 84EC
+CONSTANT: GL_COMPRESSED_RGB HEX: 84ED
+CONSTANT: GL_COMPRESSED_RGBA HEX: 84EE
+CONSTANT: GL_TEXTURE_COMPRESSION_HINT HEX: 84EF
+CONSTANT: GL_NORMAL_MAP HEX: 8511
+CONSTANT: GL_REFLECTION_MAP HEX: 8512
+CONSTANT: GL_TEXTURE_CUBE_MAP HEX: 8513
+CONSTANT: GL_TEXTURE_BINDING_CUBE_MAP HEX: 8514
+CONSTANT: GL_TEXTURE_CUBE_MAP_POSITIVE_X HEX: 8515
+CONSTANT: GL_TEXTURE_CUBE_MAP_NEGATIVE_X HEX: 8516
+CONSTANT: GL_TEXTURE_CUBE_MAP_POSITIVE_Y HEX: 8517
+CONSTANT: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y HEX: 8518
+CONSTANT: GL_TEXTURE_CUBE_MAP_POSITIVE_Z HEX: 8519
+CONSTANT: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z HEX: 851A
+CONSTANT: GL_PROXY_TEXTURE_CUBE_MAP HEX: 851B
+CONSTANT: GL_MAX_CUBE_MAP_TEXTURE_SIZE HEX: 851C
+CONSTANT: GL_COMBINE HEX: 8570
+CONSTANT: GL_COMBINE_RGB HEX: 8571
+CONSTANT: GL_COMBINE_ALPHA HEX: 8572
+CONSTANT: GL_RGB_SCALE HEX: 8573
+CONSTANT: GL_ADD_SIGNED HEX: 8574
+CONSTANT: GL_INTERPOLATE HEX: 8575
+CONSTANT: GL_CONSTANT HEX: 8576
+CONSTANT: GL_PRIMARY_COLOR HEX: 8577
+CONSTANT: GL_PREVIOUS HEX: 8578
+CONSTANT: GL_SOURCE0_RGB HEX: 8580
+CONSTANT: GL_SOURCE1_RGB HEX: 8581
+CONSTANT: GL_SOURCE2_RGB HEX: 8582
+CONSTANT: GL_SOURCE0_ALPHA HEX: 8588
+CONSTANT: GL_SOURCE1_ALPHA HEX: 8589
+CONSTANT: GL_SOURCE2_ALPHA HEX: 858A
+CONSTANT: GL_OPERAND0_RGB HEX: 8590
+CONSTANT: GL_OPERAND1_RGB HEX: 8591
+CONSTANT: GL_OPERAND2_RGB HEX: 8592
+CONSTANT: GL_OPERAND0_ALPHA HEX: 8598
+CONSTANT: GL_OPERAND1_ALPHA HEX: 8599
+CONSTANT: GL_OPERAND2_ALPHA HEX: 859A
+CONSTANT: GL_TEXTURE_COMPRESSED_IMAGE_SIZE HEX: 86A0
+CONSTANT: GL_TEXTURE_COMPRESSED HEX: 86A1
+CONSTANT: GL_NUM_COMPRESSED_TEXTURE_FORMATS HEX: 86A2
+CONSTANT: GL_COMPRESSED_TEXTURE_FORMATS HEX: 86A3
+CONSTANT: GL_DOT3_RGB HEX: 86AE
+CONSTANT: GL_DOT3_RGBA HEX: 86AF
+CONSTANT: GL_MULTISAMPLE_BIT HEX: 20000000
 
 GL-FUNCTION: void glActiveTexture { glActiveTextureARB } ( GLenum texture ) ;
 GL-FUNCTION: void glClientActiveTexture { glClientActiveTextureARB } ( GLenum texture ) ;
@@ -1322,45 +1318,45 @@ GL-FUNCTION: void glSampleCoverage { glSampleCoverageARB } ( GLclampf value, GLb
 ! OpenGL 1.4
 
 
-: GL_BLEND_DST_RGB HEX: 80C8 ; inline
-: GL_BLEND_SRC_RGB HEX: 80C9 ; inline
-: GL_BLEND_DST_ALPHA HEX: 80CA ; inline
-: GL_BLEND_SRC_ALPHA HEX: 80CB ; inline
-: GL_POINT_SIZE_MIN HEX: 8126 ; inline
-: GL_POINT_SIZE_MAX HEX: 8127 ; inline
-: GL_POINT_FADE_THRESHOLD_SIZE HEX: 8128 ; inline
-: GL_POINT_DISTANCE_ATTENUATION HEX: 8129 ; inline
-: GL_GENERATE_MIPMAP HEX: 8191 ; inline
-: GL_GENERATE_MIPMAP_HINT HEX: 8192 ; inline
-: GL_DEPTH_COMPONENT16 HEX: 81A5 ; inline
-: GL_DEPTH_COMPONENT24 HEX: 81A6 ; inline
-: GL_DEPTH_COMPONENT32 HEX: 81A7 ; inline
-: GL_MIRRORED_REPEAT HEX: 8370 ; inline
-: GL_FOG_COORDINATE_SOURCE HEX: 8450 ; inline
-: GL_FOG_COORDINATE HEX: 8451 ; inline
-: GL_FRAGMENT_DEPTH HEX: 8452 ; inline
-: GL_CURRENT_FOG_COORDINATE HEX: 8453 ; inline
-: GL_FOG_COORDINATE_ARRAY_TYPE HEX: 8454 ; inline
-: GL_FOG_COORDINATE_ARRAY_STRIDE HEX: 8455 ; inline
-: GL_FOG_COORDINATE_ARRAY_POINTER HEX: 8456 ; inline
-: GL_FOG_COORDINATE_ARRAY HEX: 8457 ; inline
-: GL_COLOR_SUM HEX: 8458 ; inline
-: GL_CURRENT_SECONDARY_COLOR HEX: 8459 ; inline
-: GL_SECONDARY_COLOR_ARRAY_SIZE HEX: 845A ; inline
-: GL_SECONDARY_COLOR_ARRAY_TYPE HEX: 845B ; inline
-: GL_SECONDARY_COLOR_ARRAY_STRIDE HEX: 845C ; inline
-: GL_SECONDARY_COLOR_ARRAY_POINTER HEX: 845D ; inline
-: GL_SECONDARY_COLOR_ARRAY HEX: 845E ; inline
-: GL_MAX_TEXTURE_LOD_BIAS HEX: 84FD ; inline
-: GL_TEXTURE_FILTER_CONTROL HEX: 8500 ; inline
-: GL_TEXTURE_LOD_BIAS HEX: 8501 ; inline
-: GL_INCR_WRAP HEX: 8507 ; inline
-: GL_DECR_WRAP HEX: 8508 ; inline
-: GL_TEXTURE_DEPTH_SIZE HEX: 884A ; inline
-: GL_DEPTH_TEXTURE_MODE HEX: 884B ; inline
-: GL_TEXTURE_COMPARE_MODE HEX: 884C ; inline
-: GL_TEXTURE_COMPARE_FUNC HEX: 884D ; inline
-: GL_COMPARE_R_TO_TEXTURE HEX: 884E ; inline
+CONSTANT: GL_BLEND_DST_RGB HEX: 80C8
+CONSTANT: GL_BLEND_SRC_RGB HEX: 80C9
+CONSTANT: GL_BLEND_DST_ALPHA HEX: 80CA
+CONSTANT: GL_BLEND_SRC_ALPHA HEX: 80CB
+CONSTANT: GL_POINT_SIZE_MIN HEX: 8126
+CONSTANT: GL_POINT_SIZE_MAX HEX: 8127
+CONSTANT: GL_POINT_FADE_THRESHOLD_SIZE HEX: 8128
+CONSTANT: GL_POINT_DISTANCE_ATTENUATION HEX: 8129
+CONSTANT: GL_GENERATE_MIPMAP HEX: 8191
+CONSTANT: GL_GENERATE_MIPMAP_HINT HEX: 8192
+CONSTANT: GL_DEPTH_COMPONENT16 HEX: 81A5
+CONSTANT: GL_DEPTH_COMPONENT24 HEX: 81A6
+CONSTANT: GL_DEPTH_COMPONENT32 HEX: 81A7
+CONSTANT: GL_MIRRORED_REPEAT HEX: 8370
+CONSTANT: GL_FOG_COORDINATE_SOURCE HEX: 8450
+CONSTANT: GL_FOG_COORDINATE HEX: 8451
+CONSTANT: GL_FRAGMENT_DEPTH HEX: 8452
+CONSTANT: GL_CURRENT_FOG_COORDINATE HEX: 8453
+CONSTANT: GL_FOG_COORDINATE_ARRAY_TYPE HEX: 8454
+CONSTANT: GL_FOG_COORDINATE_ARRAY_STRIDE HEX: 8455
+CONSTANT: GL_FOG_COORDINATE_ARRAY_POINTER HEX: 8456
+CONSTANT: GL_FOG_COORDINATE_ARRAY HEX: 8457
+CONSTANT: GL_COLOR_SUM HEX: 8458
+CONSTANT: GL_CURRENT_SECONDARY_COLOR HEX: 8459
+CONSTANT: GL_SECONDARY_COLOR_ARRAY_SIZE HEX: 845A
+CONSTANT: GL_SECONDARY_COLOR_ARRAY_TYPE HEX: 845B
+CONSTANT: GL_SECONDARY_COLOR_ARRAY_STRIDE HEX: 845C
+CONSTANT: GL_SECONDARY_COLOR_ARRAY_POINTER HEX: 845D
+CONSTANT: GL_SECONDARY_COLOR_ARRAY HEX: 845E
+CONSTANT: GL_MAX_TEXTURE_LOD_BIAS HEX: 84FD
+CONSTANT: GL_TEXTURE_FILTER_CONTROL HEX: 8500
+CONSTANT: GL_TEXTURE_LOD_BIAS HEX: 8501
+CONSTANT: GL_INCR_WRAP HEX: 8507
+CONSTANT: GL_DECR_WRAP HEX: 8508
+CONSTANT: GL_TEXTURE_DEPTH_SIZE HEX: 884A
+CONSTANT: GL_DEPTH_TEXTURE_MODE HEX: 884B
+CONSTANT: GL_TEXTURE_COMPARE_MODE HEX: 884C
+CONSTANT: GL_TEXTURE_COMPARE_FUNC HEX: 884D
+CONSTANT: GL_COMPARE_R_TO_TEXTURE HEX: 884E
 
 GL-FUNCTION: void glBlendColor { glBlendColorEXT } ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ) ;
 GL-FUNCTION: void glBlendEquation { glBlendEquationEXT } ( GLenum mode ) ;
@@ -1410,56 +1406,56 @@ GL-FUNCTION: void glWindowPos3sv { glWindowPos3svARB } ( GLshort* p ) ;
 
 ! OpenGL 1.5
 
-: GL_BUFFER_SIZE HEX: 8764 ; inline
-: GL_BUFFER_USAGE HEX: 8765 ; inline
-: GL_QUERY_COUNTER_BITS HEX: 8864 ; inline
-: GL_CURRENT_QUERY HEX: 8865 ; inline
-: GL_QUERY_RESULT HEX: 8866 ; inline
-: GL_QUERY_RESULT_AVAILABLE HEX: 8867 ; inline
-: GL_ARRAY_BUFFER HEX: 8892 ; inline
-: GL_ELEMENT_ARRAY_BUFFER HEX: 8893 ; inline
-: GL_ARRAY_BUFFER_BINDING HEX: 8894 ; inline
-: GL_ELEMENT_ARRAY_BUFFER_BINDING HEX: 8895 ; inline
-: GL_VERTEX_ARRAY_BUFFER_BINDING HEX: 8896 ; inline
-: GL_NORMAL_ARRAY_BUFFER_BINDING HEX: 8897 ; inline
-: GL_COLOR_ARRAY_BUFFER_BINDING HEX: 8898 ; inline
-: GL_INDEX_ARRAY_BUFFER_BINDING HEX: 8899 ; inline
-: GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING HEX: 889A ; inline
-: GL_EDGE_FLAG_ARRAY_BUFFER_BINDING HEX: 889B ; inline
-: GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING HEX: 889C ; inline
-: GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING HEX: 889D ; inline
-: GL_WEIGHT_ARRAY_BUFFER_BINDING HEX: 889E ; inline
-: GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING HEX: 889F ; inline
-: GL_READ_ONLY HEX: 88B8 ; inline
-: GL_WRITE_ONLY HEX: 88B9 ; inline
-: GL_READ_WRITE HEX: 88BA ; inline
-: GL_BUFFER_ACCESS HEX: 88BB ; inline
-: GL_BUFFER_MAPPED HEX: 88BC ; inline
-: GL_BUFFER_MAP_POINTER HEX: 88BD ; inline
-: GL_STREAM_DRAW HEX: 88E0 ; inline
-: GL_STREAM_READ HEX: 88E1 ; inline
-: GL_STREAM_COPY HEX: 88E2 ; inline
-: GL_STATIC_DRAW HEX: 88E4 ; inline
-: GL_STATIC_READ HEX: 88E5 ; inline
-: GL_STATIC_COPY HEX: 88E6 ; inline
-: GL_DYNAMIC_DRAW HEX: 88E8 ; inline
-: GL_DYNAMIC_READ HEX: 88E9 ; inline
-: GL_DYNAMIC_COPY HEX: 88EA ; inline
-: GL_SAMPLES_PASSED HEX: 8914 ; inline
-: GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE ; inline
-: GL_FOG_COORD GL_FOG_COORDINATE ; inline
-: GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY ; inline
-: GL_SRC0_RGB GL_SOURCE0_RGB ; inline
-: GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER ; inline
-: GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE ; inline
-: GL_SRC1_ALPHA GL_SOURCE1_ALPHA ; inline
-: GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE ; inline
-: GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE ; inline
-: GL_SRC0_ALPHA GL_SOURCE0_ALPHA ; inline
-: GL_SRC1_RGB GL_SOURCE1_RGB ; inline
-: GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING ; inline
-: GL_SRC2_ALPHA GL_SOURCE2_ALPHA ; inline
-: GL_SRC2_RGB GL_SOURCE2_RGB ; inline
+CONSTANT: GL_BUFFER_SIZE HEX: 8764
+CONSTANT: GL_BUFFER_USAGE HEX: 8765
+CONSTANT: GL_QUERY_COUNTER_BITS HEX: 8864
+CONSTANT: GL_CURRENT_QUERY HEX: 8865
+CONSTANT: GL_QUERY_RESULT HEX: 8866
+CONSTANT: GL_QUERY_RESULT_AVAILABLE HEX: 8867
+CONSTANT: GL_ARRAY_BUFFER HEX: 8892
+CONSTANT: GL_ELEMENT_ARRAY_BUFFER HEX: 8893
+CONSTANT: GL_ARRAY_BUFFER_BINDING HEX: 8894
+CONSTANT: GL_ELEMENT_ARRAY_BUFFER_BINDING HEX: 8895
+CONSTANT: GL_VERTEX_ARRAY_BUFFER_BINDING HEX: 8896
+CONSTANT: GL_NORMAL_ARRAY_BUFFER_BINDING HEX: 8897
+CONSTANT: GL_COLOR_ARRAY_BUFFER_BINDING HEX: 8898
+CONSTANT: GL_INDEX_ARRAY_BUFFER_BINDING HEX: 8899
+CONSTANT: GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING HEX: 889A
+CONSTANT: GL_EDGE_FLAG_ARRAY_BUFFER_BINDING HEX: 889B
+CONSTANT: GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING HEX: 889C
+CONSTANT: GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING HEX: 889D
+CONSTANT: GL_WEIGHT_ARRAY_BUFFER_BINDING HEX: 889E
+CONSTANT: GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING HEX: 889F
+CONSTANT: GL_READ_ONLY HEX: 88B8
+CONSTANT: GL_WRITE_ONLY HEX: 88B9
+CONSTANT: GL_READ_WRITE HEX: 88BA
+CONSTANT: GL_BUFFER_ACCESS HEX: 88BB
+CONSTANT: GL_BUFFER_MAPPED HEX: 88BC
+CONSTANT: GL_BUFFER_MAP_POINTER HEX: 88BD
+CONSTANT: GL_STREAM_DRAW HEX: 88E0
+CONSTANT: GL_STREAM_READ HEX: 88E1
+CONSTANT: GL_STREAM_COPY HEX: 88E2
+CONSTANT: GL_STATIC_DRAW HEX: 88E4
+CONSTANT: GL_STATIC_READ HEX: 88E5
+CONSTANT: GL_STATIC_COPY HEX: 88E6
+CONSTANT: GL_DYNAMIC_DRAW HEX: 88E8
+CONSTANT: GL_DYNAMIC_READ HEX: 88E9
+CONSTANT: GL_DYNAMIC_COPY HEX: 88EA
+CONSTANT: GL_SAMPLES_PASSED HEX: 8914
+ALIAS: GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE
+ALIAS: GL_FOG_COORD GL_FOG_COORDINATE
+ALIAS: GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY
+ALIAS: GL_SRC0_RGB GL_SOURCE0_RGB
+ALIAS: GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER
+ALIAS: GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE
+ALIAS: GL_SRC1_ALPHA GL_SOURCE1_ALPHA
+ALIAS: GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE
+ALIAS: GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE
+ALIAS: GL_SRC0_ALPHA GL_SOURCE0_ALPHA
+ALIAS: GL_SRC1_RGB GL_SOURCE1_RGB
+ALIAS: GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+ALIAS: GL_SRC2_ALPHA GL_SOURCE2_ALPHA
+ALIAS: GL_SRC2_RGB GL_SOURCE2_RGB
 
 TYPEDEF: ptrdiff_t GLsizeiptr
 TYPEDEF: ptrdiff_t GLintptr
@@ -1488,91 +1484,91 @@ GL-FUNCTION: GLboolean glUnmapBuffer { glUnmapBufferARB } ( GLenum target ) ;
 ! OpenGL 2.0
 
 
-: GL_VERTEX_ATTRIB_ARRAY_ENABLED HEX: 8622 ; inline
-: GL_VERTEX_ATTRIB_ARRAY_SIZE HEX: 8623 ; inline
-: GL_VERTEX_ATTRIB_ARRAY_STRIDE HEX: 8624 ; inline
-: GL_VERTEX_ATTRIB_ARRAY_TYPE HEX: 8625 ; inline
-: GL_CURRENT_VERTEX_ATTRIB HEX: 8626 ; inline
-: GL_VERTEX_PROGRAM_POINT_SIZE HEX: 8642 ; inline
-: GL_VERTEX_PROGRAM_TWO_SIDE HEX: 8643 ; inline
-: GL_VERTEX_ATTRIB_ARRAY_POINTER HEX: 8645 ; inline
-: GL_STENCIL_BACK_FUNC HEX: 8800 ; inline
-: GL_STENCIL_BACK_FAIL HEX: 8801 ; inline
-: GL_STENCIL_BACK_PASS_DEPTH_FAIL HEX: 8802 ; inline
-: GL_STENCIL_BACK_PASS_DEPTH_PASS HEX: 8803 ; inline
-: GL_MAX_DRAW_BUFFERS HEX: 8824 ; inline
-: GL_DRAW_BUFFER0 HEX: 8825 ; inline
-: GL_DRAW_BUFFER1 HEX: 8826 ; inline
-: GL_DRAW_BUFFER2 HEX: 8827 ; inline
-: GL_DRAW_BUFFER3 HEX: 8828 ; inline
-: GL_DRAW_BUFFER4 HEX: 8829 ; inline
-: GL_DRAW_BUFFER5 HEX: 882A ; inline
-: GL_DRAW_BUFFER6 HEX: 882B ; inline
-: GL_DRAW_BUFFER7 HEX: 882C ; inline
-: GL_DRAW_BUFFER8 HEX: 882D ; inline
-: GL_DRAW_BUFFER9 HEX: 882E ; inline
-: GL_DRAW_BUFFER10 HEX: 882F ; inline
-: GL_DRAW_BUFFER11 HEX: 8830 ; inline
-: GL_DRAW_BUFFER12 HEX: 8831 ; inline
-: GL_DRAW_BUFFER13 HEX: 8832 ; inline
-: GL_DRAW_BUFFER14 HEX: 8833 ; inline
-: GL_DRAW_BUFFER15 HEX: 8834 ; inline
-: GL_BLEND_EQUATION_ALPHA HEX: 883D ; inline
-: GL_POINT_SPRITE HEX: 8861 ; inline
-: GL_COORD_REPLACE HEX: 8862 ; inline
-: GL_MAX_VERTEX_ATTRIBS HEX: 8869 ; inline
-: GL_VERTEX_ATTRIB_ARRAY_NORMALIZED HEX: 886A ; inline
-: GL_MAX_TEXTURE_COORDS HEX: 8871 ; inline
-: GL_MAX_TEXTURE_IMAGE_UNITS HEX: 8872 ; inline
-: GL_FRAGMENT_SHADER HEX: 8B30 ; inline
-: GL_VERTEX_SHADER HEX: 8B31 ; inline
-: GL_MAX_FRAGMENT_UNIFORM_COMPONENTS HEX: 8B49 ; inline
-: GL_MAX_VERTEX_UNIFORM_COMPONENTS HEX: 8B4A ; inline
-: GL_MAX_VARYING_FLOATS HEX: 8B4B ; inline
-: GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS HEX: 8B4C ; inline
-: GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS HEX: 8B4D ; inline
-: GL_SHADER_TYPE HEX: 8B4F ; inline
-: GL_FLOAT_VEC2 HEX: 8B50 ; inline
-: GL_FLOAT_VEC3 HEX: 8B51 ; inline
-: GL_FLOAT_VEC4 HEX: 8B52 ; inline
-: GL_INT_VEC2 HEX: 8B53 ; inline
-: GL_INT_VEC3 HEX: 8B54 ; inline
-: GL_INT_VEC4 HEX: 8B55 ; inline
-: GL_BOOL HEX: 8B56 ; inline
-: GL_BOOL_VEC2 HEX: 8B57 ; inline
-: GL_BOOL_VEC3 HEX: 8B58 ; inline
-: GL_BOOL_VEC4 HEX: 8B59 ; inline
-: GL_FLOAT_MAT2 HEX: 8B5A ; inline
-: GL_FLOAT_MAT3 HEX: 8B5B ; inline
-: GL_FLOAT_MAT4 HEX: 8B5C ; inline
-: GL_SAMPLER_1D HEX: 8B5D ; inline
-: GL_SAMPLER_2D HEX: 8B5E ; inline
-: GL_SAMPLER_3D HEX: 8B5F ; inline
-: GL_SAMPLER_CUBE HEX: 8B60 ; inline
-: GL_SAMPLER_1D_SHADOW HEX: 8B61 ; inline
-: GL_SAMPLER_2D_SHADOW HEX: 8B62 ; inline
-: GL_DELETE_STATUS HEX: 8B80 ; inline
-: GL_COMPILE_STATUS HEX: 8B81 ; inline
-: GL_LINK_STATUS HEX: 8B82 ; inline
-: GL_VALIDATE_STATUS HEX: 8B83 ; inline
-: GL_INFO_LOG_LENGTH HEX: 8B84 ; inline
-: GL_ATTACHED_SHADERS HEX: 8B85 ; inline
-: GL_ACTIVE_UNIFORMS HEX: 8B86 ; inline
-: GL_ACTIVE_UNIFORM_MAX_LENGTH HEX: 8B87 ; inline
-: GL_SHADER_SOURCE_LENGTH HEX: 8B88 ; inline
-: GL_ACTIVE_ATTRIBUTES HEX: 8B89 ; inline
-: GL_ACTIVE_ATTRIBUTE_MAX_LENGTH HEX: 8B8A ; inline
-: GL_FRAGMENT_SHADER_DERIVATIVE_HINT HEX: 8B8B ; inline
-: GL_SHADING_LANGUAGE_VERSION HEX: 8B8C ; inline
-: GL_CURRENT_PROGRAM HEX: 8B8D ; inline
-: GL_POINT_SPRITE_COORD_ORIGIN HEX: 8CA0 ; inline
-: GL_LOWER_LEFT HEX: 8CA1 ; inline
-: GL_UPPER_LEFT HEX: 8CA2 ; inline
-: GL_STENCIL_BACK_REF HEX: 8CA3 ; inline
-: GL_STENCIL_BACK_VALUE_MASK HEX: 8CA4 ; inline
-: GL_STENCIL_BACK_WRITEMASK HEX: 8CA5 ; inline
-: GL_BLEND_EQUATION HEX: 8009 ; inline
-: GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION ; inline
+CONSTANT: GL_VERTEX_ATTRIB_ARRAY_ENABLED HEX: 8622
+CONSTANT: GL_VERTEX_ATTRIB_ARRAY_SIZE HEX: 8623
+CONSTANT: GL_VERTEX_ATTRIB_ARRAY_STRIDE HEX: 8624
+CONSTANT: GL_VERTEX_ATTRIB_ARRAY_TYPE HEX: 8625
+CONSTANT: GL_CURRENT_VERTEX_ATTRIB HEX: 8626
+CONSTANT: GL_VERTEX_PROGRAM_POINT_SIZE HEX: 8642
+CONSTANT: GL_VERTEX_PROGRAM_TWO_SIDE HEX: 8643
+CONSTANT: GL_VERTEX_ATTRIB_ARRAY_POINTER HEX: 8645
+CONSTANT: GL_STENCIL_BACK_FUNC HEX: 8800
+CONSTANT: GL_STENCIL_BACK_FAIL HEX: 8801
+CONSTANT: GL_STENCIL_BACK_PASS_DEPTH_FAIL HEX: 8802
+CONSTANT: GL_STENCIL_BACK_PASS_DEPTH_PASS HEX: 8803
+CONSTANT: GL_MAX_DRAW_BUFFERS HEX: 8824
+CONSTANT: GL_DRAW_BUFFER0 HEX: 8825
+CONSTANT: GL_DRAW_BUFFER1 HEX: 8826
+CONSTANT: GL_DRAW_BUFFER2 HEX: 8827
+CONSTANT: GL_DRAW_BUFFER3 HEX: 8828
+CONSTANT: GL_DRAW_BUFFER4 HEX: 8829
+CONSTANT: GL_DRAW_BUFFER5 HEX: 882A
+CONSTANT: GL_DRAW_BUFFER6 HEX: 882B
+CONSTANT: GL_DRAW_BUFFER7 HEX: 882C
+CONSTANT: GL_DRAW_BUFFER8 HEX: 882D
+CONSTANT: GL_DRAW_BUFFER9 HEX: 882E
+CONSTANT: GL_DRAW_BUFFER10 HEX: 882F
+CONSTANT: GL_DRAW_BUFFER11 HEX: 8830
+CONSTANT: GL_DRAW_BUFFER12 HEX: 8831
+CONSTANT: GL_DRAW_BUFFER13 HEX: 8832
+CONSTANT: GL_DRAW_BUFFER14 HEX: 8833
+CONSTANT: GL_DRAW_BUFFER15 HEX: 8834
+CONSTANT: GL_BLEND_EQUATION_ALPHA HEX: 883D
+CONSTANT: GL_POINT_SPRITE HEX: 8861
+CONSTANT: GL_COORD_REPLACE HEX: 8862
+CONSTANT: GL_MAX_VERTEX_ATTRIBS HEX: 8869
+CONSTANT: GL_VERTEX_ATTRIB_ARRAY_NORMALIZED HEX: 886A
+CONSTANT: GL_MAX_TEXTURE_COORDS HEX: 8871
+CONSTANT: GL_MAX_TEXTURE_IMAGE_UNITS HEX: 8872
+CONSTANT: GL_FRAGMENT_SHADER HEX: 8B30
+CONSTANT: GL_VERTEX_SHADER HEX: 8B31
+CONSTANT: GL_MAX_FRAGMENT_UNIFORM_COMPONENTS HEX: 8B49
+CONSTANT: GL_MAX_VERTEX_UNIFORM_COMPONENTS HEX: 8B4A
+CONSTANT: GL_MAX_VARYING_FLOATS HEX: 8B4B
+CONSTANT: GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS HEX: 8B4C
+CONSTANT: GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS HEX: 8B4D
+CONSTANT: GL_SHADER_TYPE HEX: 8B4F
+CONSTANT: GL_FLOAT_VEC2 HEX: 8B50
+CONSTANT: GL_FLOAT_VEC3 HEX: 8B51
+CONSTANT: GL_FLOAT_VEC4 HEX: 8B52
+CONSTANT: GL_INT_VEC2 HEX: 8B53
+CONSTANT: GL_INT_VEC3 HEX: 8B54
+CONSTANT: GL_INT_VEC4 HEX: 8B55
+CONSTANT: GL_BOOL HEX: 8B56
+CONSTANT: GL_BOOL_VEC2 HEX: 8B57
+CONSTANT: GL_BOOL_VEC3 HEX: 8B58
+CONSTANT: GL_BOOL_VEC4 HEX: 8B59
+CONSTANT: GL_FLOAT_MAT2 HEX: 8B5A
+CONSTANT: GL_FLOAT_MAT3 HEX: 8B5B
+CONSTANT: GL_FLOAT_MAT4 HEX: 8B5C
+CONSTANT: GL_SAMPLER_1D HEX: 8B5D
+CONSTANT: GL_SAMPLER_2D HEX: 8B5E
+CONSTANT: GL_SAMPLER_3D HEX: 8B5F
+CONSTANT: GL_SAMPLER_CUBE HEX: 8B60
+CONSTANT: GL_SAMPLER_1D_SHADOW HEX: 8B61
+CONSTANT: GL_SAMPLER_2D_SHADOW HEX: 8B62
+CONSTANT: GL_DELETE_STATUS HEX: 8B80
+CONSTANT: GL_COMPILE_STATUS HEX: 8B81
+CONSTANT: GL_LINK_STATUS HEX: 8B82
+CONSTANT: GL_VALIDATE_STATUS HEX: 8B83
+CONSTANT: GL_INFO_LOG_LENGTH HEX: 8B84
+CONSTANT: GL_ATTACHED_SHADERS HEX: 8B85
+CONSTANT: GL_ACTIVE_UNIFORMS HEX: 8B86
+CONSTANT: GL_ACTIVE_UNIFORM_MAX_LENGTH HEX: 8B87
+CONSTANT: GL_SHADER_SOURCE_LENGTH HEX: 8B88
+CONSTANT: GL_ACTIVE_ATTRIBUTES HEX: 8B89
+CONSTANT: GL_ACTIVE_ATTRIBUTE_MAX_LENGTH HEX: 8B8A
+CONSTANT: GL_FRAGMENT_SHADER_DERIVATIVE_HINT HEX: 8B8B
+CONSTANT: GL_SHADING_LANGUAGE_VERSION HEX: 8B8C
+CONSTANT: GL_CURRENT_PROGRAM HEX: 8B8D
+CONSTANT: GL_POINT_SPRITE_COORD_ORIGIN HEX: 8CA0
+CONSTANT: GL_LOWER_LEFT HEX: 8CA1
+CONSTANT: GL_UPPER_LEFT HEX: 8CA2
+CONSTANT: GL_STENCIL_BACK_REF HEX: 8CA3
+CONSTANT: GL_STENCIL_BACK_VALUE_MASK HEX: 8CA4
+CONSTANT: GL_STENCIL_BACK_WRITEMASK HEX: 8CA5
+CONSTANT: GL_BLEND_EQUATION HEX: 8009
+ALIAS: GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION
 
 TYPEDEF: char GLchar
 
@@ -1674,23 +1670,23 @@ GL-FUNCTION: void glVertexAttribPointer { glVertexAttribPointerARB } ( GLuint in
 ! OpenGL 2.1
 
 
-: GL_CURRENT_RASTER_SECONDARY_COLOR HEX: 845F ; inline
-: GL_PIXEL_PACK_BUFFER HEX: 88EB ; inline
-: GL_PIXEL_UNPACK_BUFFER HEX: 88EC ; inline
-: GL_PIXEL_PACK_BUFFER_BINDING HEX: 88ED ; inline
-: GL_PIXEL_UNPACK_BUFFER_BINDING HEX: 88EF ; inline
-: GL_SRGB HEX: 8C40 ; inline
-: GL_SRGB8 HEX: 8C41 ; inline
-: GL_SRGB_ALPHA HEX: 8C42 ; inline
-: GL_SRGB8_ALPHA8 HEX: 8C43 ; inline
-: GL_SLUMINANCE_ALPHA HEX: 8C44 ; inline
-: GL_SLUMINANCE8_ALPHA8 HEX: 8C45 ; inline
-: GL_SLUMINANCE HEX: 8C46 ; inline
-: GL_SLUMINANCE8 HEX: 8C47 ; inline
-: GL_COMPRESSED_SRGB HEX: 8C48 ; inline
-: GL_COMPRESSED_SRGB_ALPHA HEX: 8C49 ; inline
-: GL_COMPRESSED_SLUMINANCE HEX: 8C4A ; inline
-: GL_COMPRESSED_SLUMINANCE_ALPHA HEX: 8C4B ; inline
+CONSTANT: GL_CURRENT_RASTER_SECONDARY_COLOR HEX: 845F
+CONSTANT: GL_PIXEL_PACK_BUFFER HEX: 88EB
+CONSTANT: GL_PIXEL_UNPACK_BUFFER HEX: 88EC
+CONSTANT: GL_PIXEL_PACK_BUFFER_BINDING HEX: 88ED
+CONSTANT: GL_PIXEL_UNPACK_BUFFER_BINDING HEX: 88EF
+CONSTANT: GL_SRGB HEX: 8C40
+CONSTANT: GL_SRGB8 HEX: 8C41
+CONSTANT: GL_SRGB_ALPHA HEX: 8C42
+CONSTANT: GL_SRGB8_ALPHA8 HEX: 8C43
+CONSTANT: GL_SLUMINANCE_ALPHA HEX: 8C44
+CONSTANT: GL_SLUMINANCE8_ALPHA8 HEX: 8C45
+CONSTANT: GL_SLUMINANCE HEX: 8C46
+CONSTANT: GL_SLUMINANCE8 HEX: 8C47
+CONSTANT: GL_COMPRESSED_SRGB HEX: 8C48
+CONSTANT: GL_COMPRESSED_SRGB_ALPHA HEX: 8C49
+CONSTANT: GL_COMPRESSED_SLUMINANCE HEX: 8C4A
+CONSTANT: GL_COMPRESSED_SLUMINANCE_ALPHA HEX: 8C4B
 
 GL-FUNCTION: void glUniformMatrix2x3fv { } ( GLint location, GLsizei count, GLboolean transpose, GLfloat* value ) ;
 GL-FUNCTION: void glUniformMatrix2x4fv { } ( GLint location, GLsizei count, GLboolean transpose, GLfloat* value ) ;
@@ -1703,57 +1699,57 @@ GL-FUNCTION: void glUniformMatrix4x3fv { } ( GLint location, GLsizei count, GLbo
 ! GL_EXT_framebuffer_object
 
 
-: GL_INVALID_FRAMEBUFFER_OPERATION_EXT HEX: 0506 ; inline
-: GL_MAX_RENDERBUFFER_SIZE_EXT HEX: 84E8 ; inline
-: GL_FRAMEBUFFER_BINDING_EXT HEX: 8CA6 ; inline
-: GL_RENDERBUFFER_BINDING_EXT HEX: 8CA7 ; inline
-: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT HEX: 8CD0 ; inline
-: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT HEX: 8CD1 ; inline
-: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT HEX: 8CD2 ; inline
-: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT HEX: 8CD3 ; inline
-: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT HEX: 8CD4 ; inline
-: GL_FRAMEBUFFER_COMPLETE_EXT HEX: 8CD5 ; inline
-: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT HEX: 8CD6 ; inline
-: GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT HEX: 8CD7 ; inline
-: GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT HEX: 8CD9 ; inline
-: GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT HEX: 8CDA ; inline
-: GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT HEX: 8CDB ; inline
-: GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT HEX: 8CDC ; inline
-: GL_FRAMEBUFFER_UNSUPPORTED_EXT HEX: 8CDD ; inline
-: GL_MAX_COLOR_ATTACHMENTS_EXT HEX: 8CDF ; inline
-: GL_COLOR_ATTACHMENT0_EXT HEX: 8CE0 ; inline
-: GL_COLOR_ATTACHMENT1_EXT HEX: 8CE1 ; inline
-: GL_COLOR_ATTACHMENT2_EXT HEX: 8CE2 ; inline
-: GL_COLOR_ATTACHMENT3_EXT HEX: 8CE3 ; inline
-: GL_COLOR_ATTACHMENT4_EXT HEX: 8CE4 ; inline
-: GL_COLOR_ATTACHMENT5_EXT HEX: 8CE5 ; inline
-: GL_COLOR_ATTACHMENT6_EXT HEX: 8CE6 ; inline
-: GL_COLOR_ATTACHMENT7_EXT HEX: 8CE7 ; inline
-: GL_COLOR_ATTACHMENT8_EXT HEX: 8CE8 ; inline
-: GL_COLOR_ATTACHMENT9_EXT HEX: 8CE9 ; inline
-: GL_COLOR_ATTACHMENT10_EXT HEX: 8CEA ; inline
-: GL_COLOR_ATTACHMENT11_EXT HEX: 8CEB ; inline
-: GL_COLOR_ATTACHMENT12_EXT HEX: 8CEC ; inline
-: GL_COLOR_ATTACHMENT13_EXT HEX: 8CED ; inline
-: GL_COLOR_ATTACHMENT14_EXT HEX: 8CEE ; inline
-: GL_COLOR_ATTACHMENT15_EXT HEX: 8CEF ; inline
-: GL_DEPTH_ATTACHMENT_EXT HEX: 8D00 ; inline
-: GL_STENCIL_ATTACHMENT_EXT HEX: 8D20 ; inline
-: GL_FRAMEBUFFER_EXT HEX: 8D40 ; inline
-: GL_RENDERBUFFER_EXT HEX: 8D41 ; inline
-: GL_RENDERBUFFER_WIDTH_EXT HEX: 8D42 ; inline
-: GL_RENDERBUFFER_HEIGHT_EXT HEX: 8D43 ; inline
-: GL_RENDERBUFFER_INTERNAL_FORMAT_EXT HEX: 8D44 ; inline
-: GL_STENCIL_INDEX1_EXT HEX: 8D46 ; inline
-: GL_STENCIL_INDEX4_EXT HEX: 8D47 ; inline
-: GL_STENCIL_INDEX8_EXT HEX: 8D48 ; inline
-: GL_STENCIL_INDEX16_EXT HEX: 8D49 ; inline
-: GL_RENDERBUFFER_RED_SIZE_EXT HEX: 8D50 ; inline
-: GL_RENDERBUFFER_GREEN_SIZE_EXT HEX: 8D51 ; inline
-: GL_RENDERBUFFER_BLUE_SIZE_EXT HEX: 8D52 ; inline
-: GL_RENDERBUFFER_ALPHA_SIZE_EXT HEX: 8D53 ; inline
-: GL_RENDERBUFFER_DEPTH_SIZE_EXT HEX: 8D54 ; inline
-: GL_RENDERBUFFER_STENCIL_SIZE_EXT HEX: 8D55 ; inline
+CONSTANT: GL_INVALID_FRAMEBUFFER_OPERATION_EXT HEX: 0506
+CONSTANT: GL_MAX_RENDERBUFFER_SIZE_EXT HEX: 84E8
+CONSTANT: GL_FRAMEBUFFER_BINDING_EXT HEX: 8CA6
+CONSTANT: GL_RENDERBUFFER_BINDING_EXT HEX: 8CA7
+CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT HEX: 8CD0
+CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT HEX: 8CD1
+CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT HEX: 8CD2
+CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT HEX: 8CD3
+CONSTANT: GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT HEX: 8CD4
+CONSTANT: GL_FRAMEBUFFER_COMPLETE_EXT HEX: 8CD5
+CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT HEX: 8CD6
+CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT HEX: 8CD7
+CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT HEX: 8CD9
+CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT HEX: 8CDA
+CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT HEX: 8CDB
+CONSTANT: GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT HEX: 8CDC
+CONSTANT: GL_FRAMEBUFFER_UNSUPPORTED_EXT HEX: 8CDD
+CONSTANT: GL_MAX_COLOR_ATTACHMENTS_EXT HEX: 8CDF
+CONSTANT: GL_COLOR_ATTACHMENT0_EXT HEX: 8CE0
+CONSTANT: GL_COLOR_ATTACHMENT1_EXT HEX: 8CE1
+CONSTANT: GL_COLOR_ATTACHMENT2_EXT HEX: 8CE2
+CONSTANT: GL_COLOR_ATTACHMENT3_EXT HEX: 8CE3
+CONSTANT: GL_COLOR_ATTACHMENT4_EXT HEX: 8CE4
+CONSTANT: GL_COLOR_ATTACHMENT5_EXT HEX: 8CE5
+CONSTANT: GL_COLOR_ATTACHMENT6_EXT HEX: 8CE6
+CONSTANT: GL_COLOR_ATTACHMENT7_EXT HEX: 8CE7
+CONSTANT: GL_COLOR_ATTACHMENT8_EXT HEX: 8CE8
+CONSTANT: GL_COLOR_ATTACHMENT9_EXT HEX: 8CE9
+CONSTANT: GL_COLOR_ATTACHMENT10_EXT HEX: 8CEA
+CONSTANT: GL_COLOR_ATTACHMENT11_EXT HEX: 8CEB
+CONSTANT: GL_COLOR_ATTACHMENT12_EXT HEX: 8CEC
+CONSTANT: GL_COLOR_ATTACHMENT13_EXT HEX: 8CED
+CONSTANT: GL_COLOR_ATTACHMENT14_EXT HEX: 8CEE
+CONSTANT: GL_COLOR_ATTACHMENT15_EXT HEX: 8CEF
+CONSTANT: GL_DEPTH_ATTACHMENT_EXT HEX: 8D00
+CONSTANT: GL_STENCIL_ATTACHMENT_EXT HEX: 8D20
+CONSTANT: GL_FRAMEBUFFER_EXT HEX: 8D40
+CONSTANT: GL_RENDERBUFFER_EXT HEX: 8D41
+CONSTANT: GL_RENDERBUFFER_WIDTH_EXT HEX: 8D42
+CONSTANT: GL_RENDERBUFFER_HEIGHT_EXT HEX: 8D43
+CONSTANT: GL_RENDERBUFFER_INTERNAL_FORMAT_EXT HEX: 8D44
+CONSTANT: GL_STENCIL_INDEX1_EXT HEX: 8D46
+CONSTANT: GL_STENCIL_INDEX4_EXT HEX: 8D47
+CONSTANT: GL_STENCIL_INDEX8_EXT HEX: 8D48
+CONSTANT: GL_STENCIL_INDEX16_EXT HEX: 8D49
+CONSTANT: GL_RENDERBUFFER_RED_SIZE_EXT HEX: 8D50
+CONSTANT: GL_RENDERBUFFER_GREEN_SIZE_EXT HEX: 8D51
+CONSTANT: GL_RENDERBUFFER_BLUE_SIZE_EXT HEX: 8D52
+CONSTANT: GL_RENDERBUFFER_ALPHA_SIZE_EXT HEX: 8D53
+CONSTANT: GL_RENDERBUFFER_DEPTH_SIZE_EXT HEX: 8D54
+CONSTANT: GL_RENDERBUFFER_STENCIL_SIZE_EXT HEX: 8D55
 
 GL-FUNCTION: void glBindFramebufferEXT { } ( GLenum target, GLuint framebuffer ) ;
 GL-FUNCTION: void glBindRenderbufferEXT { } ( GLenum target, GLuint renderbuffer ) ;
@@ -1777,24 +1773,24 @@ GL-FUNCTION: void glRenderbufferStorageEXT { } ( GLenum target, GLenum internalf
 ! GL_ARB_texture_float
 
 
-: GL_RGBA32F_ARB HEX: 8814 ; inline
-: GL_RGB32F_ARB HEX: 8815 ; inline
-: GL_ALPHA32F_ARB HEX: 8816 ; inline
-: GL_INTENSITY32F_ARB HEX: 8817 ; inline
-: GL_LUMINANCE32F_ARB HEX: 8818 ; inline
-: GL_LUMINANCE_ALPHA32F_ARB HEX: 8819 ; inline
-: GL_RGBA16F_ARB HEX: 881A ; inline
-: GL_RGB16F_ARB HEX: 881B ; inline
-: GL_ALPHA16F_ARB HEX: 881C ; inline
-: GL_INTENSITY16F_ARB HEX: 881D ; inline
-: GL_LUMINANCE16F_ARB HEX: 881E ; inline
-: GL_LUMINANCE_ALPHA16F_ARB HEX: 881F ; inline
-: GL_TEXTURE_RED_TYPE_ARB HEX: 8C10 ; inline
-: GL_TEXTURE_GREEN_TYPE_ARB HEX: 8C11 ; inline
-: GL_TEXTURE_BLUE_TYPE_ARB HEX: 8C12 ; inline
-: GL_TEXTURE_ALPHA_TYPE_ARB HEX: 8C13 ; inline
-: GL_TEXTURE_LUMINANCE_TYPE_ARB HEX: 8C14 ; inline
-: GL_TEXTURE_INTENSITY_TYPE_ARB HEX: 8C15 ; inline
-: GL_TEXTURE_DEPTH_TYPE_ARB HEX: 8C16 ; inline
-: GL_UNSIGNED_NORMALIZED_ARB HEX: 8C17 ; inline
+CONSTANT: GL_RGBA32F_ARB HEX: 8814
+CONSTANT: GL_RGB32F_ARB HEX: 8815
+CONSTANT: GL_ALPHA32F_ARB HEX: 8816
+CONSTANT: GL_INTENSITY32F_ARB HEX: 8817
+CONSTANT: GL_LUMINANCE32F_ARB HEX: 8818
+CONSTANT: GL_LUMINANCE_ALPHA32F_ARB HEX: 8819
+CONSTANT: GL_RGBA16F_ARB HEX: 881A
+CONSTANT: GL_RGB16F_ARB HEX: 881B
+CONSTANT: GL_ALPHA16F_ARB HEX: 881C
+CONSTANT: GL_INTENSITY16F_ARB HEX: 881D
+CONSTANT: GL_LUMINANCE16F_ARB HEX: 881E
+CONSTANT: GL_LUMINANCE_ALPHA16F_ARB HEX: 881F
+CONSTANT: GL_TEXTURE_RED_TYPE_ARB HEX: 8C10
+CONSTANT: GL_TEXTURE_GREEN_TYPE_ARB HEX: 8C11
+CONSTANT: GL_TEXTURE_BLUE_TYPE_ARB HEX: 8C12
+CONSTANT: GL_TEXTURE_ALPHA_TYPE_ARB HEX: 8C13
+CONSTANT: GL_TEXTURE_LUMINANCE_TYPE_ARB HEX: 8C14
+CONSTANT: GL_TEXTURE_INTENSITY_TYPE_ARB HEX: 8C15
+CONSTANT: GL_TEXTURE_DEPTH_TYPE_ARB HEX: 8C16
+CONSTANT: GL_UNSIGNED_NORMALIZED_ARB HEX: 8C17
 
diff --git a/basis/opengl/shaders/authors.txt b/basis/opengl/shaders/authors.txt
new file mode 100644 (file)
index 0000000..6a0dc72
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
\ No newline at end of file
diff --git a/basis/opengl/shaders/shaders-docs.factor b/basis/opengl/shaders/shaders-docs.factor
new file mode 100644 (file)
index 0000000..1a10071
--- /dev/null
@@ -0,0 +1,101 @@
+USING: help.markup help.syntax io kernel math quotations
+opengl.gl multiline assocs strings ;
+IN: opengl.shaders
+
+HELP: gl-shader
+{ $class-description { $snippet "gl-shader" } " is a predicate class comprising values returned by OpenGL to represent shader objects. The following words are provided for creating and manipulating these objects:"
+    { $list
+        { { $link <gl-shader> } " - Compile GLSL code into a shader object" }
+        { { $link gl-shader-ok? } " - Check whether a shader object compiled successfully" }
+        { { $link check-gl-shader } " - Throw an error unless a shader object compiled successfully" }
+        { { $link gl-shader-info-log } " - Retrieve the info log of messages generated by the GLSL compiler" }
+        { { $link delete-gl-shader } " - Invalidate a shader object" }
+    }
+  "The derived predicate classes " { $link vertex-shader } " and " { $link fragment-shader } " are also defined for the two standard kinds of shader defined by the OpenGL specification." } ;
+
+HELP: vertex-shader
+{ $class-description { $snippet "vertex-shader" } " is the predicate class of " { $link gl-shader } " objects that refer to shaders of type " { $snippet "GL_VERTEX_SHADER" } ". In addition to the " { $snippet "gl-shader" } " words, the following vertex shader-specific functions are defined:"
+    { $list
+        { { $link <vertex-shader> } " - Compile GLSL code into a vertex shader object "}
+    }
+} ;
+
+HELP: fragment-shader
+{ $class-description { $snippet "fragment-shader" } " is the predicate class of " { $link gl-shader } " objects that refer to shaders of type " { $snippet "GL_FRAGMENT_SHADER" } ". In addition to the " { $snippet "gl-shader" } " words, the following fragment shader-specific functions are defined:"
+    { $list
+        { { $link <fragment-shader> } " - Compile GLSL code into a fragment shader object "}
+    }
+} ;
+
+HELP: <gl-shader>
+{ $values { "source" "The GLSL source code to compile" } { "kind" "The kind of shader to compile, such as " { $snippet "GL_VERTEX_SHADER" } " or " { $snippet "GL_FRAGMENT_SHADER" } } { "shader" "a new " { $link gl-shader } } }
+{ $description "Tries to compile the given GLSL source into a shader object. The returned object can be checked for validity by " { $link check-gl-shader } " or " { $link gl-shader-ok? } ". Errors and warnings generated by the GLSL compiler will be collected in the info log, available from " { $link gl-shader-info-log } ".\n\nWhen the shader object is no longer needed, it should be deleted using " { $link delete-gl-shader } " or else be attached to a " { $link gl-program } " object deleted using " { $link delete-gl-program } "." } ;
+
+HELP: <vertex-shader>
+{ $values { "source" "The GLSL source code to compile" } { "vertex-shader" "a new " { $link vertex-shader } } }
+{ $description "Tries to compile the given GLSL source into a vertex shader object. Equivalent to " { $snippet "GL_VERTEX_SHADER <gl-shader>" } "." } ;
+
+HELP: <fragment-shader>
+{ $values { "source" "The GLSL source code to compile" } { "fragment-shader" "a new " { $link fragment-shader } } }
+{ $description "Tries to compile the given GLSL source into a fragment shader object. Equivalent to " { $snippet "GL_FRAGMENT_SHADER <gl-shader>" } "." } ;
+
+HELP: gl-shader-ok?
+{ $values { "shader" "A " { $link gl-shader } " object" } { "?" "a boolean" } }
+{ $description "Returns a boolean value indicating whether the given shader object compiled successfully. Compilation errors and warnings are available in the shader's info log, which can be gotten using " { $link gl-shader-info-log } "." } ;
+
+HELP: check-gl-shader
+{ $values { "shader" "A " { $link gl-shader } " object" } }
+{ $description "Throws an error containing the " { $link gl-shader-info-log } " for the shader object if it failed to compile. Otherwise, the shader object is left on the stack." } ;
+
+HELP: delete-gl-shader
+{ $values { "shader" "A " { $link gl-shader } " object" } }
+{ $description "Deletes the shader object, invalidating it and releasing any resources allocated for it by the OpenGL implementation." } ;
+
+HELP: gl-shader-info-log
+{ $values { "shader" "A " { $link gl-shader } " object" } { "shader" "a new " { $link gl-shader } } { "log" string } }
+{ $description "Retrieves the info log for " { $snippet "shader" } ", including any errors or warnings generated in compiling the shader object." } ;
+
+HELP: gl-program
+{ $class-description { $snippet "gl-program" } " is a predicate class comprising values returned by OpenGL to represent proram objects. The following words are provided for creating and manipulating these objects:"
+    { $list
+        { { $link <gl-program> } ", " { $link <simple-gl-program> } " - Link a set of shaders into a GLSL program" }
+        { { $link gl-program-ok? } " - Check whether a program object linked successfully" }
+        { { $link check-gl-program } " - Throw an error unless a program object linked successfully" }
+        { { $link gl-program-info-log } " - Retrieve the info log of messages generated by the GLSL linker" }
+        { { $link gl-program-shaders } " - Retrieve the set of shader objects composing the GLSL program" }
+        { { $link delete-gl-program } " - Invalidate a program object and all its attached shaders" }
+        { { $link with-gl-program } " - Use a program object" }
+    }
+} ;
+
+HELP: <gl-program>
+{ $values { "shaders" "A sequence of " { $link gl-shader } " objects." } { "program" "a new " { $link gl-program } } } 
+{ $description "Creates a new GLSL program object, attaches all the shader objects in the " { $snippet "shaders" } " sequence, and attempts to link them. The returned object can be checked for validity by " { $link check-gl-program } " or " { $link gl-program-ok? } ". Errors and warnings generated by the GLSL linker will be collected in the info log, available from " { $link gl-program-info-log } ".\n\nWhen the program object and its attached shaders are no longer needed, it should be deleted using " { $link delete-gl-program } "." } ;
+
+HELP: <simple-gl-program>
+{ $values { "vertex-shader-source" "A string containing GLSL vertex shader source" } { "fragment-shader-source" "A string containing GLSL fragment shader source" } { "program" "a new " { $link gl-program } } }
+{ $description "Wrapper for " { $link <gl-program> } " for the simple case of compiling a single vertex shader and fragment shader and linking them into a GLSL program. Throws an exception if compiling or linking fails." } ;
+
+{ <gl-program> <simple-gl-program> } related-words
+
+HELP: gl-program-ok?
+{ $values { "program" "A " { $link gl-program } " object" } { "?" "a boolean" } }
+{ $description "Returns a boolean value indicating whether the given program object linked successfully. Link errors and warnings are available in the program's info log, which can be gotten using " { $link gl-program-info-log } "." } ;
+
+HELP: check-gl-program
+{ $values { "program" "A " { $link gl-program } " object" } }
+{ $description "Throws an error containing the " { $link gl-program-info-log } " for the program object if it failed to link. Otherwise, the program object is left on the stack." } ;
+
+HELP: gl-program-info-log
+{ $values { "program" "A " { $link gl-program } " object" } { "log" string } }
+{ $description "Retrieves the info log for " { $snippet "program" } ", including any errors or warnings generated in linking the program object." } ;
+
+HELP: delete-gl-program
+{ $values { "program" "A " { $link gl-program } " object" } }
+{ $description "Deletes the program object, invalidating it and releasing any resources allocated for it by the OpenGL implementation. Any attached " { $link gl-shader } "s are also deleted.\n\nIf the shader objects should be preserved, they should each be detached using " { $link detach-gl-program-shader } ". The program object can then be destroyed alone using " { $link delete-gl-program-only } "." } ;
+
+HELP: with-gl-program
+{ $values { "program" "A " { $link gl-program } " object" } { "quot" "A quotation with stack effect " { $snippet "( program -- )" } } }
+{ $description "Enables " { $snippet "program" } " for all OpenGL calls made in the dynamic extent of " { $snippet "quot" } ". " { $snippet "program" } " is left on the top of the stack when " { $snippet "quot" } " is called. The fixed-function pipeline is restored at the end of " { $snippet "quot" } "." } ;
+
+ABOUT: "gl-utilities"
diff --git a/basis/opengl/shaders/shaders.factor b/basis/opengl/shaders/shaders.factor
new file mode 100755 (executable)
index 0000000..eb5bbb0
--- /dev/null
@@ -0,0 +1,121 @@
+! Copyright (C) 2008 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel opengl.gl alien.c-types continuations namespaces
+assocs alien alien.strings libc opengl math sequences combinators
+macros arrays io.encodings.ascii fry specialized-arrays.uint
+destructors accessors ;
+IN: opengl.shaders
+
+: with-gl-shader-source-ptr ( string quot -- )
+    swap ascii malloc-string [ <void*> swap call ] keep free ; inline
+
+: <gl-shader> ( source kind -- shader )
+    glCreateShader dup rot
+    [ 1 swap f glShaderSource ] with-gl-shader-source-ptr
+    [ glCompileShader ] keep
+    gl-error ;
+
+: (gl-shader?) ( object -- ? )
+    dup integer? [ glIsShader c-bool> ] [ drop f ] if ;
+
+: gl-shader-get-int ( shader enum -- value )
+    0 <int> [ glGetShaderiv ] keep *int ;
+
+: gl-shader-ok? ( shader -- ? )
+    GL_COMPILE_STATUS gl-shader-get-int c-bool> ;
+
+: <vertex-shader> ( source -- vertex-shader )
+    GL_VERTEX_SHADER <gl-shader> ; inline
+
+: (vertex-shader?) ( object -- ? )
+    dup (gl-shader?)
+    [ GL_SHADER_TYPE gl-shader-get-int GL_VERTEX_SHADER = ]
+    [ drop f ] if ;
+
+: <fragment-shader> ( source -- fragment-shader )
+    GL_FRAGMENT_SHADER <gl-shader> ; inline
+
+: (fragment-shader?) ( object -- ? )
+    dup (gl-shader?)
+    [ GL_SHADER_TYPE gl-shader-get-int GL_FRAGMENT_SHADER = ]
+    [ drop f ] if ;
+
+: gl-shader-info-log-length ( shader -- log-length )
+    GL_INFO_LOG_LENGTH gl-shader-get-int ; inline
+
+: gl-shader-info-log ( shader -- log )
+    dup gl-shader-info-log-length dup [
+        1 calloc &free
+        [ 0 <int> swap glGetShaderInfoLog ] keep
+        ascii alien>string
+    ] with-destructors ;
+
+: check-gl-shader ( shader -- shader )
+    dup gl-shader-ok? [ dup gl-shader-info-log throw ] unless ;
+
+: delete-gl-shader ( shader -- ) glDeleteShader ; inline
+
+PREDICATE: gl-shader < integer (gl-shader?) ;
+PREDICATE: vertex-shader < gl-shader (vertex-shader?) ;
+PREDICATE: fragment-shader < gl-shader (fragment-shader?) ;
+
+! Programs
+
+: <gl-program> ( shaders -- program )
+    glCreateProgram swap
+    [ dupd glAttachShader ] each
+    [ glLinkProgram ] keep
+    gl-error ;
+    
+: (gl-program?) ( object -- ? )
+    dup integer? [ glIsProgram c-bool> ] [ drop f ] if ;
+
+: gl-program-get-int ( program enum -- value )
+    0 <int> [ glGetProgramiv ] keep *int ;
+
+: gl-program-ok? ( program -- ? )
+    GL_LINK_STATUS gl-program-get-int c-bool> ;
+
+: gl-program-info-log-length ( program -- log-length )
+    GL_INFO_LOG_LENGTH gl-program-get-int ; inline
+
+: gl-program-info-log ( program -- log )
+    dup gl-program-info-log-length dup [
+        1 calloc &free
+        [ 0 <int> swap glGetProgramInfoLog ] keep
+        ascii alien>string
+    ] with-destructors ;
+
+: check-gl-program ( program -- program )
+    dup gl-program-ok? [ dup gl-program-info-log throw ] unless ;
+
+: gl-program-shaders-length ( program -- shaders-length )
+    GL_ATTACHED_SHADERS gl-program-get-int ; inline
+
+: gl-program-shaders ( program -- shaders )
+    dup gl-program-shaders-length
+    0 <int>
+    over <uint-array>
+    [ underlying>> glGetAttachedShaders ] keep ;
+
+: delete-gl-program-only ( program -- )
+    glDeleteProgram ; inline
+
+: detach-gl-program-shader ( program shader -- )
+    glDetachShader ; inline
+
+: delete-gl-program ( program -- )
+    dup gl-program-shaders [
+        2dup detach-gl-program-shader delete-gl-shader
+    ] each delete-gl-program-only ;
+
+: with-gl-program ( program quot -- )
+    over glUseProgram [ 0 glUseProgram ] [ ] cleanup ; inline
+
+PREDICATE: gl-program < integer (gl-program?) ;
+
+: <simple-gl-program> ( vertex-shader-source fragment-shader-source -- program )
+    [ <vertex-shader> check-gl-shader ]
+    [ <fragment-shader> check-gl-shader ] bi*
+    2array <gl-program> check-gl-program ;
+
diff --git a/basis/opengl/shaders/summary.txt b/basis/opengl/shaders/summary.txt
new file mode 100644 (file)
index 0000000..c55f766
--- /dev/null
@@ -0,0 +1 @@
+OpenGL Shading Language (GLSL) support
\ No newline at end of file
diff --git a/basis/opengl/shaders/tags.txt b/basis/opengl/shaders/tags.txt
new file mode 100755 (executable)
index 0000000..21154b6
--- /dev/null
@@ -0,0 +1,2 @@
+opengl
+bindings
\ No newline at end of file
index 30501a61056979e1b3938acf6f4a094e4e62c170..e512e3134c66e644de062a9e8826fc1c02c2ab48 100644 (file)
@@ -13,64 +13,64 @@ IN: openssl.libssl
     { [ os unix? ] [ "libssl" "libssl.so" "cdecl" add-library ] }
 } cond >>
 
-: X509_FILETYPE_PEM       1 ; inline
-: X509_FILETYPE_ASN1      2 ; inline
-: X509_FILETYPE_DEFAULT   3 ; inline
-
-: SSL_FILETYPE_ASN1  X509_FILETYPE_ASN1 ; inline
-: SSL_FILETYPE_PEM   X509_FILETYPE_PEM ; inline
-
-: SSL_CTRL_NEED_TMP_RSA             1 ; inline
-: SSL_CTRL_SET_TMP_RSA              2 ; inline
-: SSL_CTRL_SET_TMP_DH               3 ; inline
-: SSL_CTRL_SET_TMP_RSA_CB           4 ; inline
-: SSL_CTRL_SET_TMP_DH_CB            5 ; inline
-
-: SSL_CTRL_GET_SESSION_REUSED       6 ; inline
-: SSL_CTRL_GET_CLIENT_CERT_REQUEST  7 ; inline
-: SSL_CTRL_GET_NUM_RENEGOTIATIONS   8 ; inline
-: SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 9 ; inline
-: SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 10 ; inline
-: SSL_CTRL_GET_FLAGS                11 ; inline
-: SSL_CTRL_EXTRA_CHAIN_CERT         12 ; inline
-
-: SSL_CTRL_SET_MSG_CALLBACK         13 ; inline
-: SSL_CTRL_SET_MSG_CALLBACK_ARG     14 ; inline
-
-: SSL_CTRL_SESS_NUMBER              20 ; inline
-: SSL_CTRL_SESS_CONNECT             21 ; inline
-: SSL_CTRL_SESS_CONNECT_GOOD        22 ; inline
-: SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 ; inline
-: SSL_CTRL_SESS_ACCEPT              24 ; inline
-: SSL_CTRL_SESS_ACCEPT_GOOD         25 ; inline
-: SSL_CTRL_SESS_ACCEPT_RENEGOTIATE  26 ; inline
-: SSL_CTRL_SESS_HIT                 27 ; inline
-: SSL_CTRL_SESS_CB_HIT              28 ; inline
-: SSL_CTRL_SESS_MISSES              29 ; inline
-: SSL_CTRL_SESS_TIMEOUTS            30 ; inline
-: SSL_CTRL_SESS_CACHE_FULL          31 ; inline
-: SSL_CTRL_OPTIONS                  32 ; inline
-: SSL_CTRL_MODE                     33 ; inline
-
-: SSL_CTRL_GET_READ_AHEAD           40 ; inline
-: SSL_CTRL_SET_READ_AHEAD           41 ; inline
-: SSL_CTRL_SET_SESS_CACHE_SIZE      42 ; inline
-: SSL_CTRL_GET_SESS_CACHE_SIZE      43 ; inline
-: SSL_CTRL_SET_SESS_CACHE_MODE      44 ; inline
-: SSL_CTRL_GET_SESS_CACHE_MODE      45 ; inline
-
-: SSL_CTRL_GET_MAX_CERT_LIST        50 ; inline
-: SSL_CTRL_SET_MAX_CERT_LIST        51 ; inline
-
-: SSL_ERROR_NONE             0 ; inline
-: SSL_ERROR_SSL              1 ; inline
-: SSL_ERROR_WANT_READ        2 ; inline
-: SSL_ERROR_WANT_WRITE       3 ; inline
-: SSL_ERROR_WANT_X509_LOOKUP 4 ; inline
-: SSL_ERROR_SYSCALL          5 ; inline ! consult errno for details
-: SSL_ERROR_ZERO_RETURN      6 ; inline
-: SSL_ERROR_WANT_CONNECT     7 ; inline
-: SSL_ERROR_WANT_ACCEPT      8 ; inline
+CONSTANT: X509_FILETYPE_PEM       1
+CONSTANT: X509_FILETYPE_ASN1      2
+CONSTANT: X509_FILETYPE_DEFAULT   3
+
+ALIAS: SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1
+ALIAS: SSL_FILETYPE_PEM  X509_FILETYPE_PEM
+
+CONSTANT: SSL_CTRL_NEED_TMP_RSA   1
+CONSTANT: SSL_CTRL_SET_TMP_RSA    2
+CONSTANT: SSL_CTRL_SET_TMP_DH     3
+CONSTANT: SSL_CTRL_SET_TMP_RSA_CB 4
+CONSTANT: SSL_CTRL_SET_TMP_DH_CB  5
+
+CONSTANT: SSL_CTRL_GET_SESSION_REUSED       6 
+CONSTANT: SSL_CTRL_GET_CLIENT_CERT_REQUEST  7 
+CONSTANT: SSL_CTRL_GET_NUM_RENEGOTIATIONS   8 
+CONSTANT: SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 9 
+CONSTANT: SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 10
+CONSTANT: SSL_CTRL_GET_FLAGS                11
+CONSTANT: SSL_CTRL_EXTRA_CHAIN_CERT         12
+
+CONSTANT: SSL_CTRL_SET_MSG_CALLBACK         13
+CONSTANT: SSL_CTRL_SET_MSG_CALLBACK_ARG     14
+
+CONSTANT: SSL_CTRL_SESS_NUMBER              20
+CONSTANT: SSL_CTRL_SESS_CONNECT             21
+CONSTANT: SSL_CTRL_SESS_CONNECT_GOOD        22
+CONSTANT: SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23
+CONSTANT: SSL_CTRL_SESS_ACCEPT              24
+CONSTANT: SSL_CTRL_SESS_ACCEPT_GOOD         25
+CONSTANT: SSL_CTRL_SESS_ACCEPT_RENEGOTIATE  26
+CONSTANT: SSL_CTRL_SESS_HIT                 27
+CONSTANT: SSL_CTRL_SESS_CB_HIT              28
+CONSTANT: SSL_CTRL_SESS_MISSES              29
+CONSTANT: SSL_CTRL_SESS_TIMEOUTS            30
+CONSTANT: SSL_CTRL_SESS_CACHE_FULL          31
+CONSTANT: SSL_CTRL_OPTIONS                  32
+CONSTANT: SSL_CTRL_MODE                     33
+
+CONSTANT: SSL_CTRL_GET_READ_AHEAD           40
+CONSTANT: SSL_CTRL_SET_READ_AHEAD           41
+CONSTANT: SSL_CTRL_SET_SESS_CACHE_SIZE      42
+CONSTANT: SSL_CTRL_GET_SESS_CACHE_SIZE      43
+CONSTANT: SSL_CTRL_SET_SESS_CACHE_MODE      44
+CONSTANT: SSL_CTRL_GET_SESS_CACHE_MODE      45
+
+CONSTANT: SSL_CTRL_GET_MAX_CERT_LIST        50
+CONSTANT: SSL_CTRL_SET_MAX_CERT_LIST        51
+
+CONSTANT: SSL_ERROR_NONE             0
+CONSTANT: SSL_ERROR_SSL              1
+CONSTANT: SSL_ERROR_WANT_READ        2
+CONSTANT: SSL_ERROR_WANT_WRITE       3
+CONSTANT: SSL_ERROR_WANT_X509_LOOKUP 4
+CONSTANT: SSL_ERROR_SYSCALL          5 ! consult errno for details
+CONSTANT: SSL_ERROR_ZERO_RETURN      6
+CONSTANT: SSL_ERROR_WANT_CONNECT     7
+CONSTANT: SSL_ERROR_WANT_ACCEPT      8
 
 ! Error messages table
 : error-messages ( -- hash )
@@ -157,8 +157,8 @@ FUNCTION: int SSL_read ( SSL* ssl, void* buf, int num ) ;
 
 FUNCTION: int SSL_shutdown ( SSL* ssl ) ;
 
-: SSL_SENT_SHUTDOWN 1 ;
-: SSL_RECEIVED_SHUTDOWN 2 ;
+CONSTANT: SSL_SENT_SHUTDOWN 1
+CONSTANT: SSL_RECEIVED_SHUTDOWN 2
 
 FUNCTION: int SSL_get_shutdown ( SSL* ssl ) ;
 
@@ -172,10 +172,10 @@ FUNCTION: void SSL_SESSION_free ( SSL_SESSION* ses ) ;
 
 FUNCTION: int SSL_want ( SSL* ssl ) ;
 
-: SSL_NOTHING 1 ; inline
-: SSL_WRITING 2 ; inline
-: SSL_READING 3 ; inline
-: SSL_X509_LOOKUP 4 ; inline
+CONSTANT: SSL_NOTHING 1
+CONSTANT: SSL_WRITING 2
+CONSTANT: SSL_READING 3
+CONSTANT: SSL_X509_LOOKUP 4
 
 FUNCTION: long SSL_get_verify_result ( SSL* ssl ) ;
 
@@ -199,10 +199,10 @@ FUNCTION: int SSL_CTX_load_verify_locations ( SSL_CTX* ctx, char* CAfile,
 
 FUNCTION: int SSL_CTX_set_default_verify_paths ( SSL_CTX* ctx ) ;
 
-: SSL_VERIFY_NONE 0 ; inline
-: SSL_VERIFY_PEER 1 ; inline
-: SSL_VERIFY_FAIL_IF_NO_PEER_CERT 2 ; inline
-: SSL_VERIFY_CLIENT_ONCE 4 ; inline
+CONSTANT: SSL_VERIFY_NONE 0
+CONSTANT: SSL_VERIFY_PEER 1
+CONSTANT: SSL_VERIFY_FAIL_IF_NO_PEER_CERT 2
+CONSTANT: SSL_VERIFY_CLIENT_ONCE 4
 
 FUNCTION: void SSL_CTX_set_verify ( SSL_CTX* ctx, int mode, void* callback ) ;
 
@@ -242,16 +242,16 @@ FUNCTION: void* BIO_f_ssl (  ) ;
 : SSL_CTX_set_session_cache_mode ( ctx mode -- n )
     [ SSL_CTRL_SET_SESS_CACHE_MODE ] dip f SSL_CTX_ctrl ;
 
-: SSL_SESS_CACHE_OFF                      HEX: 0000 ; inline
-: SSL_SESS_CACHE_CLIENT                   HEX: 0001 ; inline
-: SSL_SESS_CACHE_SERVER                   HEX: 0002 ; inline
+CONSTANT: SSL_SESS_CACHE_OFF    HEX: 0000
+CONSTANT: SSL_SESS_CACHE_CLIENT HEX: 0001
+CONSTANT: SSL_SESS_CACHE_SERVER HEX: 0002
 
 : SSL_SESS_CACHE_BOTH ( -- n )
     { SSL_SESS_CACHE_CLIENT SSL_SESS_CACHE_SERVER } flags ; inline
 
-: SSL_SESS_CACHE_NO_AUTO_CLEAR            HEX: 0080 ; inline
-: SSL_SESS_CACHE_NO_INTERNAL_LOOKUP       HEX: 0100 ; inline
-: SSL_SESS_CACHE_NO_INTERNAL_STORE        HEX: 0200 ; inline
+CONSTANT: SSL_SESS_CACHE_NO_AUTO_CLEAR      HEX: 0080
+CONSTANT: SSL_SESS_CACHE_NO_INTERNAL_LOOKUP HEX: 0100
+CONSTANT: SSL_SESS_CACHE_NO_INTERNAL_STORE  HEX: 0200
 
 : SSL_SESS_CACHE_NO_INTERNAL ( -- n )
     { SSL_SESS_CACHE_NO_INTERNAL_LOOKUP SSL_SESS_CACHE_NO_INTERNAL_STORE } flags ; inline
@@ -282,8 +282,9 @@ H{ } clone verify-messages set-global
 : X509_V_:
     scan "X509_V_" prepend create-in
     scan-word
-    [ 1quotation define-inline ]
-    [ verify-messages get set-at ] 2bi ; parsing
+    [ 1quotation (( -- value )) define-inline ]
+    [ verify-messages get set-at ]
+    2bi ; parsing
 
 >>
 
@@ -333,4 +334,4 @@ X509_V_: ERR_APPLICATION_VERIFICATION 50
 ! obj_mac.h
 ! ===============================================
 
-: NID_commonName 13 ; inline
+CONSTANT: NID_commonName 13
diff --git a/basis/pack/authors.txt b/basis/pack/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/pack/pack-tests.factor b/basis/pack/pack-tests.factor
new file mode 100755 (executable)
index 0000000..b1a354c
--- /dev/null
@@ -0,0 +1,48 @@
+USING: io io.streams.string kernel namespaces make
+pack strings tools.test ;
+
+[ B{ 1 0 2 0 0 3 0 0 0 4 0 0 0 0 0 0 0 5 } ] [
+    { 1 2 3 4 5 }
+    "cstiq" pack-be
+] unit-test
+
+[ { 1 2 3 4 5 } ] [
+    { 1 2 3 4 5 }
+    "cstiq" [ pack-be ] keep unpack-be
+] unit-test
+
+[ B{ 1 2 0 3 0 0 4 0 0 0 5 0 0 0 0 0 0 0 } ] [
+    [
+        { 1 2 3 4 5 } "cstiq" pack-le
+    ] with-scope
+] unit-test
+
+[ { 1 2 3 4 5 } ] [
+    { 1 2 3 4 5 }
+    "cstiq" [ pack-le ] keep unpack-le
+] unit-test
+
+[ { -1 -2 -3 -4 -5 } ] [
+    { -1 -2 -3 -4 -5 }
+    "cstiq" [ pack-le ] keep unpack-le
+] unit-test
+
+[ { -1 -2 -3 -4 -5 3.14 } ] [
+    { -1 -2 -3 -4 -5 3.14 }
+    "cstiqd" [ pack-be ] keep unpack-be
+] unit-test
+
+[ { -1 -2 -3 -4 -5 } ] [
+    { -1 -2 -3 -4 -5 }
+    "cstiq" [ pack-native ] keep unpack-native
+] unit-test
+
+[ 2 ] [
+    [ 2 "int" b, ] B{ } make
+    <string-reader> [ "int" read-native ] with-input-stream
+] unit-test
+
+[ "FRAM" ] [ "FRAM\0" [ read-c-string ] with-string-reader ] unit-test
+[ f ] [ "" [ read-c-string ] with-string-reader ] unit-test
+[ 5 ] [ "FRAM\0\u000005\0\0\0\0\0\0\0" [ read-c-string drop read-u64 ] with-string-reader ] unit-test
+
diff --git a/basis/pack/pack.factor b/basis/pack/pack.factor
new file mode 100755 (executable)
index 0000000..0e5cb7d
--- /dev/null
@@ -0,0 +1,174 @@
+USING: alien alien.c-types arrays assocs byte-arrays io
+io.binary io.streams.string kernel math math.parser namespaces
+make parser prettyprint quotations sequences strings vectors
+words macros math.functions math.bitwise ;
+IN: pack
+
+SYMBOL: big-endian
+
+: big-endian? ( -- ? )
+    1 <int> *char zero? ;
+
+: >endian ( obj n -- str )
+    big-endian get [ >be ] [ >le ] if ; inline
+
+: endian> ( obj -- str )
+    big-endian get [ be> ] [ le> ] if ; inline
+
+GENERIC: b, ( n obj -- )
+M: integer b, ( m n -- ) >endian % ;
+
+! for doing native, platform-dependent sized values
+M: string b, ( n string -- ) heap-size b, ;
+: read-native ( string -- n ) heap-size read endian> ;
+
+! Portable
+: s8, ( n -- ) 1 b, ;
+: u8, ( n -- ) 1 b, ;
+: s16, ( n -- ) 2 b, ;
+: u16, ( n -- ) 2 b, ;
+: s24, ( n -- ) 3 b, ;
+: u24, ( n -- ) 3 b, ;
+: s32, ( n -- ) 4 b, ;
+: u32, ( n -- ) 4 b, ;
+: s64, ( n -- ) 8 b, ;
+: u64, ( n -- ) 8 b, ;
+: s128, ( n -- ) 16 b, ;
+: u128, ( n -- ) 16 b, ;
+: float, ( n -- ) float>bits 4 b, ;
+: double, ( n -- ) double>bits 8 b, ;
+: c-string, ( str -- ) % 0 u8, ;
+
+: (>128-ber) ( n -- )
+    dup 0 > [
+        [ HEX: 7f bitand HEX: 80 bitor , ] keep -7 shift
+        (>128-ber)
+    ] [
+        drop
+    ] if ;
+
+: >128-ber ( n -- str )
+    [
+        [ HEX: 7f bitand , ] keep -7 shift
+        (>128-ber)
+    ] { } make reverse ;
+
+: >signed ( x n -- y )
+    2dup neg 1+ shift 1 = [ 2^ - ] [ drop ] if ;
+
+: read-signed ( n -- str )
+    dup read endian> swap 8 * >signed ;
+
+: read-unsigned ( n -- m ) read endian> ;
+
+: read-s8 ( -- n ) 1 read-signed ;
+: read-u8 ( -- n ) 1 read-unsigned ;
+: read-s16 ( -- n ) 2 read-signed ;
+: read-u16 ( -- n ) 2 read-unsigned ;
+: read-s24 ( -- n ) 3 read-signed ;
+: read-u24 ( -- n ) 3 read-unsigned ;
+: read-s32 ( -- n ) 4 read-signed ;
+: read-u32 ( -- n ) 4 read-unsigned ;
+: read-s64 ( -- n ) 8 read-signed ;
+: read-u64 ( -- n ) 8 read-signed ;
+: read-s128 ( -- n ) 16 read-signed ;
+: read-u128 ( -- n ) 16 read-unsigned ;
+
+: read-float ( -- n )
+    4 read endian> bits>float ;
+
+: read-double ( -- n )
+    8 read endian> bits>double ;
+
+: read-c-string ( -- str/f )
+    "\0" read-until [ drop f ] unless ;
+
+: read-c-string* ( n -- str/f )
+    read [ zero? ] trim-right [ f ] when-empty ;
+
+: (read-128-ber) ( n -- n )
+    read1
+    [ [ 7 shift ] [ 7 clear-bit ] bi* bitor ] keep
+    7 bit? [ (read-128-ber) ] when ;
+    
+: read-128-ber ( -- n )
+    0 (read-128-ber) ;
+
+: pack-table ( -- hash )
+    H{
+        { CHAR: c s8, }
+        { CHAR: C u8, }
+        { CHAR: s s16, }
+        { CHAR: S u16, }
+        { CHAR: t s24, }
+        { CHAR: T u24, }
+        { CHAR: i s32, }
+        { CHAR: I u32, }
+        { CHAR: q s64, }
+        { CHAR: Q u64, }
+        { CHAR: f float, }
+        { CHAR: F float, }
+        { CHAR: d double, }
+        { CHAR: D double, }
+    } ;
+
+: unpack-table ( -- hash )
+    H{
+        { CHAR: c read-s8 }
+        { CHAR: C read-u8 }
+        { CHAR: s read-s16 }
+        { CHAR: S read-u16 }
+        { CHAR: t read-s24 }
+        { CHAR: T read-u24 }
+        { CHAR: i read-s32 }
+        { CHAR: I read-u32 }
+        { CHAR: q read-s64 }
+        { CHAR: Q read-u64 }
+        { CHAR: f read-float }
+        { CHAR: F read-float }
+        { CHAR: d read-double }
+        { CHAR: D read-double }
+    } ;
+
+MACRO: (pack) ( seq str -- quot )
+    [
+        [
+            [
+                swap , pack-table at ,
+            ] 2each
+        ] [ ] make 1quotation %
+       [ B{ } make ] %
+    ] [ ] make ;
+
+: pack-native ( seq str -- seq )
+    [
+        big-endian? big-endian set (pack)
+    ] with-scope ;
+
+: pack-be ( seq str -- seq )
+    [ big-endian on (pack) ] with-scope ;
+
+: pack-le ( seq str -- seq )
+    [ big-endian off (pack) ] with-scope ;
+
+
+MACRO: (unpack) ( str -- quot )
+    [
+        [
+            [ unpack-table at , \ , , ] each
+        ] [ ] make
+        1quotation [ { } make ] append
+        1quotation %
+        \ with-string-reader ,
+    ] [ ] make ;
+
+: unpack-native ( seq str -- seq )
+    [
+        big-endian? big-endian set (unpack)
+    ] with-scope ;
+
+: unpack-be ( seq str -- seq )
+    [ big-endian on (unpack) ] with-scope ;
+
+: unpack-le ( seq str -- seq )
+    [ big-endian off (unpack) ] with-scope ;
index 83c4a196d90c8e779d5e6c528e7c7aa1027d7188..be63d807b9796aca54e38fdb224b88795c63b095 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyback (C) 2008 Daniel Ehrenberg
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel accessors math qualified ;
+USING: kernel accessors math ;
 QUALIFIED: sequences
 IN: persistent.deques
 
@@ -14,7 +14,7 @@ C: <cons> cons
 
 : each ( list quot: ( elt -- ) -- )
     over
-    [ [ >r car>> r> call ] [ >r cdr>> r> ] 2bi each ]
+    [ [ [ car>> ] dip call ] [ [ cdr>> ] dip ] 2bi each ]
     [ 2drop ] if ; inline recursive
 
 : reduce ( list start quot -- end )
@@ -27,7 +27,7 @@ C: <cons> cons
     0 [ drop 1+ ] reduce ;
 
 : cut ( list index -- back front-reversed )
-    f swap [ >r [ cdr>> ] [ car>> ] bi r> <cons> ] times ;
+    f swap [ [ [ cdr>> ] [ car>> ] bi ] dip <cons> ] times ;
 
 : split-reverse ( list -- back-reversed front )
     dup length 2/ cut [ reverse ] bi@ ;
@@ -41,7 +41,7 @@ TUPLE: deque { front read-only } { back read-only } ;
     [ back>> ] [ front>> ] bi deque boa ;
 
 : flipped ( deque quot -- newdeque )
-    >r flip r> call flip ;
+    [ flip ] dip call flip ;
 PRIVATE>
 
 : deque-empty? ( deque -- ? )
index 6381b91dc31c3aa37dd4753d21effe71f6b43d74..f6d38b5b2504a578e31c46b127a953fc25bdf87c 100644 (file)
@@ -32,7 +32,7 @@ PRIVATE>
     [ >branch< swap remove-left -rot [ <branch> ] 2dip rot ] if ;
 
 : both-with? ( obj a b quot -- ? )
-   swap >r with r> swap both? ; inline
+   swap [ with ] dip swap both? ; inline
 
 GENERIC: sift-down ( value prio left right -- heap )
 
index cd8e7c49e0b29c090c3e9b9f8fc6868e907522a1..554db08e703890f2feb6f8f7e187a3b45dce7add 100644 (file)
@@ -22,9 +22,9 @@ M: persistent-vector length count>> ;
 
 : node-size 32 ; inline
 
-: node-mask node-size mod ; inline
+: node-mask ( m -- n ) node-size mod ; inline
 
-: node-shift -5 * shift ; inline
+: node-shift ( m n -- x ) -5 * shift ; inline
 
 : node-nth ( i node -- obj )
     [ node-mask ] [ children>> ] bi* nth ;
diff --git a/basis/porter-stemmer/authors.txt b/basis/porter-stemmer/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/porter-stemmer/porter-stemmer-docs.factor b/basis/porter-stemmer/porter-stemmer-docs.factor
new file mode 100644 (file)
index 0000000..e16190f
--- /dev/null
@@ -0,0 +1,74 @@
+IN: porter-stemmer
+USING: help.markup help.syntax ;
+
+HELP: step1a
+{ $values { "str" "a string" } { "newstr" "a new string" } }
+{ $description "Gets rid of plurals." }
+{ $examples
+    { $table
+        { "Input:" "Output:" }
+        { "caresses" "caress" }
+        { "ponies" "poni" }
+        { "ties" "ti" }
+        { "caress" "caress" }
+        { "cats" "cat" }
+    }
+} ;
+
+HELP: step1b
+{ $values { "str" "a string" } { "newstr" "a new string" } }
+{ $description "Gets rid of \"-ed\" and \"-ing\" suffixes." }
+{ $examples
+    { $table
+        { "Input:" "Output:" }
+        { "feed"  "feed" }
+        { "agreed"  "agree" }
+        { "disabled"  "disable" }
+        { "matting"  "mat" }
+        { "mating"  "mate" }
+        { "meeting"  "meet" }
+        { "milling"  "mill" }
+        { "messing"  "mess" }
+        { "meetings"  "meet" }
+    }
+} ;
+
+HELP: step1c
+{ $values { "str" "a string" } { "newstr" "a new string" } }
+{ $description "Turns a terminal y to i when there is another vowel in the stem." } ;
+
+HELP: step2
+{ $values { "str" "a string" } { "newstr" "a new string" } }
+{ $description "Maps double suffices to single ones. so -ization maps to -ize etc. note that the string before the suffix must give positive " { $link consonant-seq } "." } ;
+
+HELP: step3
+{ $values { "str" "a string" } { "newstr" "a new string" } }
+{ $description "Deals with -c-, -full, -ness, etc. Similar strategy to " { $link step2 } "." } ;
+
+HELP: step5
+{ $values { "str" "a string" } { "newstr" "a new string" } }
+{ $description "Removes a final -e and changes a final -ll to -l if " { $link consonant-seq } " is greater than 1," } ;
+
+HELP: stem
+{ $values { "str" "a string" } { "newstr" "a new string" } }
+{ $description "Applies the Porter stemming algorithm to the input string." } ;
+
+ARTICLE: "porter-stemmer" "Porter stemming algorithm"
+"The help system uses the Porter stemming algorithm to normalize words when building the full-text search index."
+$nl
+"The Factor implementation of the algorithm is based on the Common Lisp version, which was hand-translated from ANSI C by Steven M. Haflich. The original ANSI C was written by Martin Porter."
+$nl
+"A detailed description of the algorithm, along with implementations in various languages, can be at in " { $url "http://www.tartarus.org/~martin/PorterStemmer" } "."
+$nl
+"The main word of the algorithm takes an English word as input and outputs its stem:"
+{ $subsection stem }
+"The algorithm consists of a number of steps:"
+{ $subsection step1a }
+{ $subsection step1b }
+{ $subsection step1c }
+{ $subsection step2 }
+{ $subsection step3 }
+{ $subsection step4 }
+{ $subsection step5 } ;
+
+ABOUT: "porter-stemmer"
diff --git a/basis/porter-stemmer/porter-stemmer-tests.factor b/basis/porter-stemmer/porter-stemmer-tests.factor
new file mode 100644 (file)
index 0000000..72bf5c0
--- /dev/null
@@ -0,0 +1,64 @@
+IN: porter-stemmer.tests
+USING: arrays io kernel porter-stemmer sequences tools.test
+io.files io.encodings.utf8 ;
+
+[ 0 ] [ "xa" consonant-seq ] unit-test
+[ 0 ] [ "xxaa" consonant-seq ] unit-test
+[ 1 ] [ "xaxa" consonant-seq ] unit-test
+[ 2 ] [ "xaxaxa" consonant-seq ] unit-test
+[ 3 ] [ "xaxaxaxa" consonant-seq ] unit-test
+[ 3 ] [ "zzzzxaxaxaxaeee" consonant-seq ] unit-test
+
+[ t ] [ 0 "fish" consonant? ] unit-test
+[ f ] [ 0 "and" consonant? ] unit-test
+[ t ] [ 0 "yes" consonant? ] unit-test
+[ f ] [ 1 "gym" consonant? ] unit-test
+
+[ t ] [ 5 "splitting" double-consonant? ] unit-test
+[ f ] [ 2 "feel" double-consonant? ] unit-test
+
+[ f ] [ "xxxz" stem-vowel? ] unit-test
+[ t ] [ "baobab" stem-vowel? ] unit-test
+
+[ t ] [ "hop" cvc? ] unit-test
+[ t ] [ "cav" cvc? ] unit-test
+[ t ] [ "lov" cvc? ] unit-test
+[ t ] [ "crim" cvc? ] unit-test
+[ f ] [ "show" cvc? ] unit-test
+[ f ] [ "box" cvc? ] unit-test
+[ f ] [ "tray" cvc? ] unit-test
+[ f ] [ "meet" cvc? ] unit-test
+
+[ "caress" ] [ "caresses" step1a step1b "" like ] unit-test
+[ "poni" ] [ "ponies" step1a step1b "" like ] unit-test
+[ "ti" ] [ "ties" step1a step1b "" like ] unit-test
+[ "caress" ] [ "caress" step1a step1b "" like ] unit-test
+[ "cat" ] [ "cats" step1a step1b "" like ] unit-test
+[ "feed" ] [ "feed" step1a step1b "" like ] unit-test
+[ "agree" ] [ "agreed" step1a step1b "" like ] unit-test
+[ "disable" ] [ "disabled" step1a step1b "" like ] unit-test
+[ "mat" ] [ "matting" step1a step1b "" like ] unit-test
+[ "mate" ] [ "mating" step1a step1b "" like ] unit-test
+[ "meet" ] [ "meeting" step1a step1b "" like ] unit-test
+[ "mill" ] [ "milling" step1a step1b "" like ] unit-test
+[ "mess" ] [ "messing" step1a step1b "" like ] unit-test
+[ "meet" ] [ "meetings" step1a step1b "" like ] unit-test
+
+[ "fishi" ] [ "fishy" step1c ] unit-test
+[ "by" ] [ "by" step1c ] unit-test
+
+[ "realizat" ] [ "realization" step4 ] unit-test
+[ "ion" ] [ "ion" step4 ] unit-test
+[ "able" ] [ "able" step4 ] unit-test
+
+[ "fear" ] [ "feare" step5 "" like ] unit-test
+[ "mate" ] [ "mate" step5 "" like ] unit-test
+[ "hell" ] [ "hell" step5 "" like ] unit-test
+[ "mate" ] [ "mate" step5 "" like ] unit-test
+
+[ { } ] [
+    "resource:basis/porter-stemmer/test/voc.txt" utf8 file-lines
+    [ stem ] map
+    "resource:basis/porter-stemmer/test/output.txt" utf8 file-lines
+    [ 2array ] 2map [ first2 = not ] filter
+] unit-test
diff --git a/basis/porter-stemmer/porter-stemmer.factor b/basis/porter-stemmer/porter-stemmer.factor
new file mode 100644 (file)
index 0000000..b6eb0ff
--- /dev/null
@@ -0,0 +1,219 @@
+IN: porter-stemmer
+USING: kernel math parser sequences combinators splitting ;
+
+: consonant? ( i str -- ? )
+    2dup nth dup "aeiou" member? [
+        3drop f
+    ] [
+        CHAR: y = [
+            over zero?
+            [ 2drop t ] [ [ 1- ] dip consonant? not ] if
+        ] [
+            2drop t
+        ] if
+    ] if ;
+
+: skip-vowels ( i str -- i str )
+    2dup bounds-check? [
+        2dup consonant? [ [ 1+ ] dip skip-vowels ] unless
+    ] when ;
+
+: skip-consonants ( i str -- i str )
+    2dup bounds-check? [
+        2dup consonant? [ [ 1+ ] dip skip-consonants ] when
+    ] when ;
+
+: (consonant-seq) ( n i str -- n )
+    skip-vowels
+    2dup bounds-check? [
+        [ 1+ ] [ 1+ ] [ ] tri* skip-consonants [ 1+ ] dip
+        (consonant-seq)
+    ] [
+        2drop
+    ] if ;
+
+: consonant-seq ( str -- n )
+    0 0 rot skip-consonants (consonant-seq) ;
+
+: stem-vowel? ( str -- ? )
+    [ length ] keep [ consonant? ] curry all? not ;
+
+: double-consonant? ( i str -- ? )
+    over 1 < [
+        2drop f
+    ] [
+        2dup nth [ over 1- over nth ] dip = [
+            consonant?
+        ] [
+            2drop f
+        ] if
+    ] if ;
+
+: consonant-end? ( n seq -- ? )
+    [ length swap - ] keep consonant? ;
+
+: last-is? ( str possibilities -- ? ) [ peek ] dip member? ;
+
+: cvc? ( str -- ? )
+    {
+        { [ dup length 3 < ] [ drop f ] }
+        { [ 1 over consonant-end? not ] [ drop f ] }
+        { [ 2 over consonant-end? ] [ drop f ] }
+        { [ 3 over consonant-end? not ] [ drop f ] }
+        [ "wxy" last-is? not ]
+    } cond ;
+
+: r ( str oldsuffix newsuffix -- str )
+    pick consonant-seq 0 > [ nip ] [ drop ] if append ;
+
+: step1a ( str -- newstr )
+    dup peek CHAR: s = [
+        {
+            { [ "sses" ?tail ] [ "ss" append ] }
+            { [ "ies" ?tail ] [ "i" append ] }
+            { [ dup "ss" tail? ] [ ] }
+            { [ "s" ?tail ] [ ] }
+            [ ]
+        } cond
+    ] when ;
+
+: -eed ( str -- str )
+    dup consonant-seq 0 > "ee" "eed" ? append ;
+
+: -ed ( str -- str ? )
+    dup stem-vowel? [ [ "ed" append ] unless ] keep ;
+
+: -ing ( str -- str ? )
+    dup stem-vowel? [ [ "ing" append ] unless ] keep ;
+
+: -ed/ing ( str -- str )
+    {
+        { [ "at" ?tail ] [ "ate" append ] }
+        { [ "bl" ?tail ] [ "ble" append ] }
+        { [ "iz" ?tail ] [ "ize" append ] }
+        {
+            [ dup length 1- over double-consonant? ]
+            [ dup "lsz" last-is? [ but-last-slice ] unless ]
+        }
+        {
+            [ t ]
+            [
+                dup consonant-seq 1 = over cvc? and
+                [ "e" append ] when
+            ]
+        }
+    } cond ;
+
+: step1b ( str -- newstr )
+    {
+        { [ "eed" ?tail ] [ -eed ] }
+        {
+            [
+                {
+                    { [ "ed" ?tail ] [ -ed ] }
+                    { [ "ing" ?tail ] [ -ing ] }
+                    [ f ]
+                } cond
+            ] [ -ed/ing ]
+        }
+        [ ]
+    } cond ;
+
+: step1c ( str -- newstr )
+    dup but-last-slice stem-vowel? [
+        "y" ?tail [ "i" append ] when
+    ] when ;
+
+: step2 ( str -- newstr )
+    {
+        { [ "ational" ?tail ] [ "ational" "ate"  r ] }
+        { [ "tional"  ?tail ] [ "tional"  "tion" r ] }
+        { [ "enci"    ?tail ] [ "enci"    "ence" r ] }
+        { [ "anci"    ?tail ] [ "anci"    "ance" r ] }
+        { [ "izer"    ?tail ] [ "izer"    "ize"  r ] }
+        { [ "bli"     ?tail ] [ "bli"     "ble"  r ] }
+        { [ "alli"    ?tail ] [ "alli"    "al"   r ] }
+        { [ "entli"   ?tail ] [ "entli"   "ent"  r ] }
+        { [ "eli"     ?tail ] [ "eli"     "e"    r ] }
+        { [ "ousli"   ?tail ] [ "ousli"   "ous"  r ] }
+        { [ "ization" ?tail ] [ "ization" "ize"  r ] }
+        { [ "ation"   ?tail ] [ "ation"   "ate"  r ] }
+        { [ "ator"    ?tail ] [ "ator"    "ate"  r ] }
+        { [ "alism"   ?tail ] [ "alism"   "al"   r ] }
+        { [ "iveness" ?tail ] [ "iveness" "ive"  r ] }
+        { [ "fulness" ?tail ] [ "fulness" "ful"  r ] }
+        { [ "ousness" ?tail ] [ "ousness" "ous"  r ] }
+        { [ "aliti"   ?tail ] [ "aliti"   "al"   r ] }
+        { [ "iviti"   ?tail ] [ "iviti"   "ive"  r ] }
+        { [ "biliti"  ?tail ] [ "biliti"  "ble"  r ] }
+        { [ "logi"    ?tail ] [ "logi"    "log"  r ] }
+        [ ]
+    } cond ;
+
+: step3 ( str -- newstr )
+    {
+        { [ "icate" ?tail ] [ "icate" "ic" r ] }
+        { [ "ative" ?tail ] [ "ative" ""   r ] }
+        { [ "alize" ?tail ] [ "alize" "al" r ] }
+        { [ "iciti" ?tail ] [ "iciti" "ic" r ] }
+        { [ "ical"  ?tail ] [ "ical"  "ic" r ] }
+        { [ "ful"   ?tail ] [ "ful"   ""   r ] }
+        { [ "ness"  ?tail ] [ "ness"  ""   r ] }
+        [ ]
+    } cond ;
+
+: -ion ( str -- newstr )
+    [
+        "ion"
+    ] [
+        dup "st" last-is? [ "ion" append ] unless
+    ] if-empty ;
+
+: step4 ( str -- newstr )
+    dup {
+        { [ "al"    ?tail ] [ ] }
+        { [ "ance"  ?tail ] [ ] }
+        { [ "ence"  ?tail ] [ ] }
+        { [ "er"    ?tail ] [ ] }
+        { [ "ic"    ?tail ] [ ] }
+        { [ "able"  ?tail ] [ ] }
+        { [ "ible"  ?tail ] [ ] }
+        { [ "ant"   ?tail ] [ ] }
+        { [ "ement" ?tail ] [ ] }
+        { [ "ment"  ?tail ] [ ] }
+        { [ "ent"   ?tail ] [ ] }
+        { [ "ion"   ?tail ] [ -ion ] }
+        { [ "ou"    ?tail ] [ ] }
+        { [ "ism"   ?tail ] [ ] }
+        { [ "ate"   ?tail ] [ ] }
+        { [ "iti"   ?tail ] [ ] }
+        { [ "ous"   ?tail ] [ ] }
+        { [ "ive"   ?tail ] [ ] }
+        { [ "ize"   ?tail ] [ ] }
+        [ ]
+    } cond dup consonant-seq 1 > [ nip ] [ drop ] if ;
+
+: remove-e? ( str -- ? )
+    dup consonant-seq dup 1 >
+    [ 2drop t ]
+    [ 1 = [ but-last-slice cvc? not ] [ drop f ] if ] if ;
+
+: remove-e ( str -- newstr )
+    dup peek CHAR: e = [
+        dup remove-e? [ but-last-slice ] when
+    ] when ;
+
+: ll->l ( str -- newstr )
+    {
+        { [ dup peek CHAR: l = not ] [ ] }
+        { [ dup length 1- over double-consonant? not ] [ ] }
+        { [ dup consonant-seq 1 > ] [ but-last-slice ] }
+        [ ]
+    } cond ;
+
+: step5 ( str -- newstr ) remove-e ll->l ;
+
+: stem ( str -- newstr )
+    dup length 2 <= [
+        step1a step1b step1c step2 step3 step4 step5 "" like
+    ] unless ;
diff --git a/basis/porter-stemmer/summary.txt b/basis/porter-stemmer/summary.txt
new file mode 100644 (file)
index 0000000..dd7746b
--- /dev/null
@@ -0,0 +1 @@
+Porter stemming algorithm
diff --git a/basis/porter-stemmer/test/output.txt b/basis/porter-stemmer/test/output.txt
new file mode 100644 (file)
index 0000000..595cb67
--- /dev/null
@@ -0,0 +1,23531 @@
+a
+aaron
+abaissiez
+abandon
+abandon
+abas
+abash
+abat
+abat
+abat
+abat
+abat
+abbess
+abbei
+abbei
+abbomin
+abbot
+abbot
+abbrevi
+ab
+abel
+aberga
+abergavenni
+abet
+abet
+abhomin
+abhor
+abhorr
+abhor
+abhor
+abhor
+abhorson
+abid
+abid
+abil
+abil
+abject
+abjectli
+abject
+abjur
+abjur
+abl
+abler
+aboard
+abod
+abod
+abod
+abod
+abomin
+abomin
+abomin
+abort
+abort
+abound
+abound
+about
+abov
+abr
+abraham
+abram
+abreast
+abridg
+abridg
+abridg
+abridg
+abroach
+abroad
+abrog
+abrook
+abrupt
+abrupt
+abruptli
+absenc
+absent
+absei
+absolut
+absolut
+absolv
+absolv
+abstain
+abstemi
+abstin
+abstract
+absurd
+absyrtu
+abund
+abund
+abundantli
+abu
+abus
+abus
+abus
+abus
+abus
+abut
+abi
+abysm
+ac
+academ
+academ
+accent
+accent
+accept
+accept
+accept
+accept
+accept
+access
+accessari
+access
+accid
+accid
+accident
+accident
+accid
+accit
+accit
+accit
+acclam
+accommod
+accommod
+accommod
+accommod
+accommodo
+accompani
+accompani
+accompani
+accomplic
+accomplish
+accomplish
+accomplish
+accomplish
+accompt
+accord
+accord
+accord
+accordeth
+accord
+accordingli
+accord
+accost
+accost
+account
+account
+account
+account
+accoutr
+accoutr
+accoutr
+accru
+accumul
+accumul
+accumul
+accur
+accurs
+accurst
+accu
+accus
+accus
+accus
+accusativo
+accus
+accus
+accus
+accus
+accus
+accuseth
+accus
+accustom
+accustom
+ac
+acerb
+ach
+acheron
+ach
+achiev
+achiev
+achiev
+achiev
+achiev
+achiev
+achiev
+achiev
+achil
+ach
+achitophel
+acknowledg
+acknowledg
+acknowledg
+acknowledg
+acknown
+acold
+aconitum
+acordo
+acorn
+acquaint
+acquaint
+acquaint
+acquaint
+acquir
+acquir
+acquisit
+acquit
+acquitt
+acquitt
+acquit
+acr
+acr
+across
+act
+actaeon
+act
+act
+action
+action
+actium
+activ
+activ
+activ
+actor
+actor
+act
+actual
+actur
+acut
+acut
+ad
+adag
+adalla
+adam
+adam
+add
+ad
+adder
+adder
+addeth
+addict
+addict
+addict
+ad
+addit
+addit
+addl
+address
+address
+addrest
+add
+adher
+adher
+adieu
+adieu
+adjac
+adjoin
+adjoin
+adjourn
+adjudg
+adjudg
+adjunct
+administ
+administr
+admir
+admir
+admir
+admir
+admir
+admir
+admir
+admir
+admiringli
+admiss
+admit
+admit
+admitt
+admit
+admit
+admonish
+admonish
+admonish
+admonish
+admonit
+ado
+adoni
+adopt
+adopt
+adoptedli
+adopt
+adopti
+adopt
+ador
+ador
+ador
+ador
+ador
+ador
+adorest
+adoreth
+ador
+adorn
+adorn
+adorn
+adorn
+adorn
+adown
+adramadio
+adrian
+adriana
+adriano
+adriat
+adsum
+adul
+adulter
+adulter
+adulter
+adulteress
+adulteri
+adulter
+adulteri
+adultress
+advanc
+advanc
+advanc
+advanc
+advanc
+advanc
+advanc
+advantag
+advantag
+advantag
+advantag
+advantag
+advantag
+advent
+adventur
+adventur
+adventur
+adventur
+adventur
+adventur
+adversari
+adversari
+advers
+advers
+advers
+advers
+adverti
+advertis
+advertis
+advertis
+advertis
+advic
+advi
+advis
+advis
+advisedli
+advis
+advis
+advoc
+advoc
+aeacida
+aeacid
+aedil
+aedil
+aegeon
+aegion
+aegl
+aemelia
+aemilia
+aemiliu
+aenea
+aeolu
+aer
+aerial
+aeri
+aesculapiu
+aeson
+aesop
+aetna
+afar
+afear
+afeard
+affabl
+affabl
+affair
+affair
+affair
+affect
+affect
+affect
+affect
+affectedli
+affecteth
+affect
+affect
+affection
+affection
+affect
+affect
+affeer
+affianc
+affianc
+affianc
+affi
+affin
+affin
+affin
+affirm
+affirm
+affirm
+afflict
+afflict
+afflict
+afflict
+afflict
+afford
+affordeth
+afford
+affrai
+affright
+affright
+affright
+affront
+affront
+affi
+afield
+afir
+afloat
+afoot
+afor
+aforehand
+aforesaid
+afraid
+afresh
+afric
+africa
+african
+afront
+after
+afternoon
+afterward
+afterward
+ag
+again
+against
+agamemmon
+agamemnon
+agat
+agaz
+ag
+ag
+agenor
+agent
+agent
+ag
+aggrav
+aggrief
+agil
+agincourt
+agit
+aglet
+agniz
+ago
+agon
+agoni
+agre
+agre
+agre
+agreement
+agre
+agrippa
+aground
+agu
+aguecheek
+agu
+aguefac
+agu
+ah
+aha
+ahungri
+ai
+aialvolio
+aiaria
+aid
+aidanc
+aidant
+aid
+aid
+aidless
+aid
+ail
+aim
+aim
+aimest
+aim
+aim
+ainsi
+aio
+air
+air
+airless
+air
+airi
+ajax
+akil
+al
+alabast
+alack
+alacr
+alarbu
+alarm
+alarm
+alarum
+alarum
+ala
+alb
+alban
+alban
+albani
+albeit
+albion
+alchemist
+alchemi
+alcibiad
+alcid
+alder
+alderman
+aldermen
+al
+alecto
+alehous
+alehous
+alencon
+alengon
+aleppo
+al
+alewif
+alexand
+alexand
+alexandria
+alexandrian
+alexa
+alia
+alic
+alien
+aliena
+alight
+alight
+alight
+alii
+alik
+alisand
+aliv
+all
+alla
+allai
+allai
+allai
+allay
+allay
+allai
+alleg
+alleg
+alleg
+alleg
+allegi
+allegi
+allei
+allei
+allhallowma
+allianc
+allicholi
+alli
+alli
+allig
+allig
+allon
+allot
+allot
+allot
+allotteri
+allow
+allow
+allow
+allow
+allow
+allur
+allur
+allur
+allur
+allus
+alli
+allycholli
+almain
+almanac
+almanack
+almanac
+almighti
+almond
+almost
+alm
+almsman
+alo
+aloft
+alon
+along
+alonso
+aloof
+aloud
+alphabet
+alphabet
+alphonso
+alp
+alreadi
+also
+alt
+altar
+altar
+alter
+alter
+alter
+alter
+althaea
+although
+altitud
+altogeth
+alton
+alwai
+alwai
+am
+amaimon
+amain
+amak
+amamon
+amaz
+amaz
+amaz
+amazedli
+amazed
+amaz
+amaz
+amazeth
+amaz
+amazon
+amazonian
+amazon
+ambassador
+ambassador
+amber
+ambiguid
+ambigu
+ambigu
+ambit
+ambit
+ambiti
+ambiti
+ambl
+ambl
+ambl
+ambl
+ambo
+ambuscado
+ambush
+amen
+amend
+amend
+amend
+amend
+amerc
+america
+am
+amiabl
+amid
+amidst
+amien
+ami
+amiss
+amiti
+amiti
+amnipot
+among
+amongst
+amor
+amor
+amort
+amount
+amount
+amour
+amphimacu
+ampl
+ampler
+amplest
+amplifi
+amplifi
+ampli
+ampthil
+amurath
+amynta
+an
+anatomiz
+anatom
+anatomi
+ancestor
+ancestor
+ancestri
+anchis
+anchor
+anchorag
+anchor
+anchor
+anchor
+anchovi
+ancient
+ancientri
+ancient
+ancu
+and
+andiron
+andpholu
+andren
+andrew
+andromach
+andronici
+andronicu
+anew
+ang
+angel
+angelica
+angel
+angelo
+angel
+anger
+angerli
+anger
+ang
+angier
+angl
+anglai
+angl
+angler
+angleterr
+anglia
+angl
+anglish
+angrili
+angri
+anguish
+angu
+anim
+anim
+animi
+anjou
+ankl
+anna
+annal
+ann
+annex
+annex
+annexion
+annex
+annothan
+announc
+annoi
+annoy
+annoi
+annual
+anoint
+anoint
+anon
+anoth
+anselmo
+answer
+answer
+answer
+answerest
+answer
+answer
+ant
+ant
+antenor
+antenorid
+anteroom
+anthem
+anthem
+anthoni
+anthropophagi
+anthropophaginian
+antiat
+antic
+anticip
+anticip
+anticipatest
+anticip
+anticip
+antick
+anticli
+antic
+antidot
+antidot
+antigonu
+antiopa
+antipathi
+antipholu
+antipholus
+antipod
+antiquari
+antiqu
+antiqu
+antium
+antoniad
+antonio
+antoniu
+antoni
+antr
+anvil
+ani
+anybodi
+anyon
+anyth
+anywher
+ap
+apac
+apart
+apart
+apart
+ap
+apemantu
+apennin
+ap
+apiec
+apish
+apollinem
+apollo
+apollodoru
+apolog
+apoplex
+apoplexi
+apostl
+apostl
+apostropha
+apoth
+apothecari
+appal
+appal
+appal
+appal
+apparel
+apparel
+apparel
+appar
+appar
+apparit
+apparit
+appeach
+appeal
+appeal
+appear
+appear
+appear
+appeareth
+appear
+appear
+appea
+appeas
+appeas
+appel
+appel
+appele
+appel
+appelez
+appel
+appel
+appelon
+appendix
+apperil
+appertain
+appertain
+appertain
+appertain
+appertin
+appertin
+appetit
+appetit
+applaud
+applaud
+applaud
+applaus
+applaus
+appl
+appl
+appletart
+applianc
+applianc
+applic
+appli
+appli
+appli
+appli
+appoint
+appoint
+appoint
+appoint
+appoint
+apprehend
+apprehend
+apprehend
+apprehens
+apprehens
+apprehens
+apprendr
+apprenn
+apprenticehood
+appri
+approach
+approach
+approach
+approacheth
+approach
+approb
+approof
+appropri
+approv
+approv
+approv
+approv
+approv
+appurten
+appurten
+apricock
+april
+apron
+apron
+apt
+apter
+aptest
+aptli
+apt
+aqua
+aquilon
+aquitain
+arabia
+arabian
+arais
+arbitr
+arbitr
+arbitr
+arbitr
+arbor
+arbour
+arc
+arch
+archbishop
+archbishopr
+archdeacon
+arch
+archelau
+archer
+archer
+archeri
+archibald
+archidamu
+architect
+arcu
+ard
+arden
+ardent
+ardour
+ar
+argal
+argier
+argo
+argosi
+argosi
+argu
+argu
+argu
+argu
+argu
+argument
+argument
+argu
+ariachn
+ariadn
+ariel
+ari
+aright
+arinado
+arini
+arion
+aris
+aris
+ariseth
+aris
+aristod
+aristotl
+arithmet
+arithmetician
+ark
+arm
+arma
+armado
+armado
+armagnac
+arm
+arm
+armenia
+armi
+armigero
+arm
+armipot
+armor
+armour
+armour
+armour
+armour
+armouri
+arm
+armi
+arn
+aroint
+aros
+arous
+arous
+arragon
+arraign
+arraign
+arraign
+arraign
+arrant
+arra
+arrai
+arrearag
+arrest
+arrest
+arrest
+arriv
+arriv
+arriv
+arriv
+arriv
+arriv
+arriv
+arrog
+arrog
+arrog
+arrow
+arrow
+art
+artemidoru
+arteri
+arthur
+articl
+articl
+articul
+artific
+artifici
+artilleri
+artir
+artist
+artist
+artless
+artoi
+art
+artu
+arviragu
+as
+asaph
+ascaniu
+ascend
+ascend
+ascendeth
+ascend
+ascens
+ascent
+ascrib
+ascrib
+ash
+asham
+asham
+asher
+ash
+ashford
+ashor
+ashout
+ashi
+asia
+asid
+ask
+askanc
+ask
+asker
+asketh
+ask
+ask
+aslant
+asleep
+asmath
+asp
+aspect
+aspect
+aspen
+aspers
+aspic
+aspici
+aspic
+aspir
+aspir
+aspir
+aspir
+asquint
+ass
+assail
+assail
+assail
+assail
+assail
+assaileth
+assail
+assail
+assassin
+assault
+assault
+assault
+assai
+assai
+assai
+assembl
+assembl
+assembl
+assembl
+assembl
+assent
+ass
+assez
+assign
+assign
+assign
+assinico
+assist
+assist
+assist
+assist
+assist
+assist
+assist
+associ
+associ
+associ
+assuag
+assubjug
+assum
+assum
+assum
+assumpt
+assur
+assur
+assur
+assur
+assuredli
+assur
+assyrian
+astonish
+astonish
+astraea
+astrai
+astrea
+astronom
+astronom
+astronom
+astronomi
+asund
+at
+atalanta
+at
+at
+athenian
+athenian
+athen
+athol
+athversari
+athwart
+atla
+atomi
+atomi
+aton
+aton
+aton
+atropo
+attach
+attach
+attach
+attain
+attaind
+attain
+attaint
+attaint
+attaintur
+attempt
+attempt
+attempt
+attempt
+attempt
+attend
+attend
+attend
+attend
+attend
+attend
+attendeth
+attend
+attend
+attent
+attent
+attent
+attentiven
+attest
+attest
+attir
+attir
+attir
+attir
+attornei
+attornei
+attornei
+attorneyship
+attract
+attract
+attract
+attract
+attribut
+attribut
+attribut
+attribut
+attribut
+atwain
+au
+aubrei
+auburn
+aucun
+audaci
+audaci
+audac
+audibl
+audienc
+audi
+audit
+auditor
+auditor
+auditori
+audr
+audrei
+aufidiu
+aufidius
+auger
+aught
+augment
+augment
+augment
+augment
+augur
+augur
+augur
+augur
+augur
+auguri
+august
+augustu
+auld
+aumerl
+aunchient
+aunt
+aunt
+auricular
+aurora
+auspici
+aussi
+auster
+auster
+auster
+auster
+austria
+aut
+authent
+author
+author
+author
+author
+author
+author
+autolycu
+autr
+autumn
+auvergn
+avail
+avail
+avaric
+avarici
+avaunt
+av
+aveng
+aveng
+aveng
+aver
+avert
+av
+avez
+avi
+avoid
+avoid
+avoid
+avoid
+avoirdupoi
+avouch
+avouch
+avouch
+avouch
+avow
+aw
+await
+await
+awak
+awak
+awak
+awaken
+awaken
+awaken
+awak
+awak
+award
+award
+awasi
+awai
+aw
+aweari
+aweless
+aw
+awhil
+awkward
+awl
+awoo
+awork
+awri
+ax
+axl
+axletre
+ay
+ay
+ayez
+ayli
+azur
+azur
+b
+ba
+baa
+babbl
+babbl
+babbl
+babe
+babe
+babi
+baboon
+baboon
+babi
+babylon
+bacar
+bacchan
+bacchu
+bach
+bachelor
+bachelor
+back
+backbit
+backbitten
+back
+back
+backward
+backwardli
+backward
+bacon
+bacon
+bad
+bade
+badg
+badg
+badg
+badli
+bad
+bae
+baffl
+baffl
+baffl
+bag
+baggag
+bagot
+bagpip
+bag
+bail
+bailiff
+baillez
+baili
+baisant
+baise
+baiser
+bait
+bait
+bait
+bait
+bait
+bajazet
+bak
+bake
+bake
+baker
+baker
+bake
+bake
+bal
+balanc
+balanc
+balconi
+bald
+baldrick
+bale
+bale
+balk
+ball
+ballad
+ballad
+ballast
+ballast
+ballet
+ballow
+ball
+balm
+balm
+balmi
+balsam
+balsamum
+balth
+balthasar
+balthazar
+bame
+ban
+banburi
+band
+bandi
+band
+bandit
+banditti
+banditto
+band
+bandi
+bandi
+bane
+bane
+bang
+bangor
+banish
+banish
+banish
+banish
+banist
+bank
+bankrout
+bankrupt
+bankrupt
+bank
+banner
+banneret
+banner
+ban
+bann
+banquet
+banquet
+banquet
+banquet
+banquo
+ban
+baptism
+baptista
+baptiz
+bar
+barbarian
+barbarian
+barbar
+barbar
+barbari
+barbason
+barb
+barber
+barbermong
+bard
+bardolph
+bard
+bare
+bare
+barefac
+barefac
+barefoot
+barehead
+bare
+bare
+bar
+bargain
+bargain
+barg
+bargulu
+bare
+bark
+bark
+barkloughli
+bark
+barki
+barlei
+barm
+barn
+barnacl
+barnardin
+barn
+barn
+barnet
+barn
+baron
+baron
+baroni
+barr
+barraba
+barrel
+barrel
+barren
+barrenli
+barren
+barricado
+barricado
+barrow
+bar
+barson
+barter
+bartholomew
+ba
+basan
+base
+baseless
+base
+base
+baser
+base
+basest
+bash
+bash
+basilisco
+basilisk
+basilisk
+basimecu
+basin
+basingstok
+basin
+basi
+bask
+basket
+basket
+bass
+bassanio
+basset
+bassianu
+basta
+bastard
+bastard
+bastardli
+bastard
+bastardi
+bast
+bast
+bastinado
+bast
+bat
+batail
+batch
+bate
+bate
+bate
+bath
+bath
+bath
+bath
+bath
+bate
+batler
+bat
+batt
+battalia
+battalion
+batten
+batter
+batter
+batter
+batteri
+battl
+battl
+battlefield
+battlement
+battl
+batti
+baubl
+baubl
+baubl
+baulk
+bavin
+bawcock
+bawd
+bawdri
+bawd
+bawdi
+bawl
+bawl
+bai
+bai
+baynard
+bayonn
+bai
+be
+beach
+beach
+beachi
+beacon
+bead
+bead
+beadl
+beadl
+bead
+beadsmen
+beagl
+beagl
+beak
+beak
+beam
+beam
+beam
+bean
+bean
+bear
+beard
+beard
+beardless
+beard
+bearer
+bearer
+bearest
+beareth
+bear
+bear
+beast
+beastliest
+beastli
+beastli
+beast
+beat
+beat
+beaten
+beat
+beatric
+beat
+beau
+beaufort
+beaumond
+beaumont
+beauteou
+beauti
+beauti
+beautifi
+beauti
+beautifi
+beauti
+beaver
+beaver
+becam
+becaus
+bechanc
+bechanc
+bechanc
+beck
+beckon
+beckon
+beck
+becom
+becom
+becom
+becom
+becom
+becom
+bed
+bedabbl
+bedash
+bedaub
+bedazzl
+bedchamb
+bedcloth
+bed
+bedeck
+bedeck
+bedew
+bedfellow
+bedfellow
+bedford
+bedlam
+bedrench
+bedrid
+bed
+bedtim
+bedward
+bee
+beef
+beef
+beehiv
+been
+beer
+bee
+beest
+beetl
+beetl
+beev
+befal
+befallen
+befal
+befel
+befit
+befit
+befit
+befor
+befor
+beforehand
+befortun
+befriend
+befriend
+befriend
+beg
+began
+beget
+beget
+beget
+begg
+beggar
+beggar
+beggarli
+beggarman
+beggar
+beggari
+beg
+begin
+beginn
+begin
+begin
+begin
+begnawn
+begon
+begot
+begotten
+begrim
+beg
+beguil
+beguil
+beguil
+beguil
+beguil
+begun
+behalf
+behalf
+behav
+behav
+behavedst
+behavior
+behavior
+behaviour
+behaviour
+behead
+behead
+beheld
+behest
+behest
+behind
+behold
+behold
+behold
+beholdest
+behold
+behold
+behoof
+behoofful
+behoov
+behov
+behov
+behowl
+be
+bel
+belariu
+belch
+belch
+beldam
+beldam
+beldam
+bele
+belgia
+beli
+beli
+belief
+beliest
+believ
+believ
+believ
+believ
+believest
+believ
+belik
+bell
+bellario
+bell
+belli
+belli
+bellman
+bellona
+bellow
+bellow
+bellow
+bellow
+bell
+belli
+belly
+belman
+belmont
+belock
+belong
+belong
+belong
+belong
+belov
+belov
+belov
+below
+belt
+belzebub
+bemad
+bemet
+bemet
+bemoan
+bemoan
+bemock
+bemoil
+bemonst
+ben
+bench
+bencher
+bench
+bend
+bend
+bend
+bend
+bene
+beneath
+benedicit
+benedick
+benedict
+benedictu
+benefactor
+benefic
+benefici
+benefit
+benefit
+benefit
+benet
+benevol
+benevol
+beni
+benison
+bennet
+bent
+bentii
+bentivolii
+bent
+benumb
+benvolio
+bepaint
+beprai
+bequeath
+bequeath
+bequeath
+bequest
+ber
+berard
+berattl
+berai
+bere
+bereav
+bereav
+bereav
+bereft
+bergamo
+bergomask
+berhym
+berhym
+berkelei
+bermooth
+bernardo
+berod
+berown
+berri
+berri
+berrord
+berri
+bertram
+berwick
+bescreen
+beseech
+beseech
+beseech
+beseech
+beseek
+beseem
+beseemeth
+beseem
+beseem
+beset
+beshrew
+besid
+besid
+besieg
+besieg
+besieg
+beslubb
+besmear
+besmear
+besmirch
+besom
+besort
+besot
+bespak
+bespeak
+bespic
+bespok
+bespot
+bess
+bessi
+best
+bestain
+best
+bestial
+bestir
+bestirr
+bestow
+bestow
+bestow
+bestow
+bestraught
+bestrew
+bestrid
+bestrid
+bestrid
+bet
+betak
+beteem
+bethink
+bethought
+bethroth
+bethump
+betid
+betid
+betideth
+betim
+betim
+betoken
+betook
+betoss
+betrai
+betrai
+betrai
+betrai
+betrim
+betroth
+betroth
+betroth
+bett
+bet
+better
+better
+better
+better
+bet
+bettr
+between
+betwixt
+bevel
+beverag
+bevi
+bevi
+bewail
+bewail
+bewail
+bewail
+bewar
+bewast
+beweep
+bewept
+bewet
+bewhor
+bewitch
+bewitch
+bewitch
+bewrai
+beyond
+bezonian
+bezonian
+bianca
+bianco
+bia
+bibbl
+bicker
+bid
+bidden
+bid
+bid
+biddi
+bide
+bide
+bide
+bid
+bien
+bier
+bifold
+big
+bigami
+biggen
+bigger
+big
+bigot
+bilberri
+bilbo
+bilbo
+bilbow
+bill
+billet
+billet
+billiard
+bill
+billow
+billow
+bill
+bin
+bind
+bindeth
+bind
+bind
+biondello
+birch
+bird
+bird
+birdlim
+bird
+birnam
+birth
+birthdai
+birthdom
+birthplac
+birthright
+birthright
+birth
+bi
+biscuit
+bishop
+bishop
+bisson
+bit
+bitch
+bite
+biter
+bite
+bite
+bit
+bitt
+bitten
+bitter
+bitterest
+bitterli
+bitter
+blab
+blabb
+blab
+blab
+black
+blackamoor
+blackamoor
+blackberri
+blackberri
+blacker
+blackest
+blackfriar
+blackheath
+blackmer
+black
+black
+bladder
+bladder
+blade
+blade
+blade
+blain
+blam
+blame
+blame
+blame
+blameless
+blame
+blanc
+blanca
+blanch
+blank
+blanket
+blank
+blasphem
+blasphem
+blasphem
+blasphemi
+blast
+blast
+blast
+blastment
+blast
+blaz
+blaze
+blaze
+blaze
+blazon
+blazon
+blazon
+bleach
+bleach
+bleak
+blear
+blear
+bleat
+bleat
+bleat
+bled
+bleed
+bleedest
+bleedeth
+bleed
+bleed
+blemish
+blemish
+blench
+blench
+blend
+blend
+blent
+bless
+bless
+blessedli
+blessed
+bless
+blesseth
+bless
+bless
+blest
+blew
+blind
+blind
+blindfold
+blind
+blindli
+blind
+blind
+blink
+blink
+bliss
+blist
+blister
+blister
+blith
+blithild
+bloat
+block
+blockish
+block
+bloi
+blood
+blood
+bloodhound
+bloodi
+bloodier
+bloodiest
+bloodili
+bloodless
+blood
+bloodsh
+bloodshed
+bloodstain
+bloodi
+bloom
+bloom
+blossom
+blossom
+blossom
+blot
+blot
+blot
+blot
+blount
+blow
+blow
+blower
+blowest
+blow
+blown
+blow
+blows
+blubb
+blubber
+blubber
+blue
+bluecap
+bluest
+blunt
+blunt
+blunter
+bluntest
+blunt
+bluntli
+blunt
+blunt
+blur
+blurr
+blur
+blush
+blush
+blushest
+blush
+blust
+bluster
+bluster
+bluster
+bo
+boar
+board
+board
+board
+board
+boarish
+boar
+boast
+boast
+boast
+boast
+boast
+boat
+boat
+boatswain
+bob
+bobb
+boblibindo
+bobtail
+bocchu
+bode
+bode
+bodement
+bode
+bodg
+bodi
+bodi
+bodiless
+bodili
+bode
+bodkin
+bodi
+bodykin
+bog
+boggl
+boggler
+bog
+bohemia
+bohemian
+bohun
+boil
+boil
+boil
+boist
+boister
+boister
+boitier
+bold
+bolden
+bolder
+boldest
+boldli
+bold
+bold
+bolingbrok
+bolster
+bolt
+bolt
+bolter
+bolter
+bolt
+bolt
+bombard
+bombard
+bombast
+bon
+bona
+bond
+bondag
+bond
+bondmaid
+bondman
+bondmen
+bond
+bondslav
+bone
+boneless
+bone
+bonfir
+bonfir
+bonjour
+bonn
+bonnet
+bonnet
+bonni
+bono
+bonto
+bonvil
+bood
+book
+bookish
+book
+boon
+boor
+boorish
+boor
+boot
+boot
+booti
+bootless
+boot
+booti
+bor
+bora
+borachio
+bordeaux
+border
+border
+border
+border
+bore
+borea
+bore
+bore
+born
+born
+borough
+borough
+borrow
+borrow
+borrow
+borrow
+borrow
+bosko
+bosko
+boski
+bosom
+bosom
+boson
+boss
+bosworth
+botch
+botcher
+botch
+botchi
+both
+bot
+bottl
+bottl
+bottl
+bottom
+bottomless
+bottom
+bouciqualt
+boug
+bough
+bough
+bought
+bounc
+bounc
+bound
+bound
+bounden
+boundeth
+bound
+boundless
+bound
+bounteou
+bounteous
+bounti
+bounti
+bountifulli
+bounti
+bourbier
+bourbon
+bourchier
+bourdeaux
+bourn
+bout
+bout
+bove
+bow
+bowcas
+bow
+bowel
+bower
+bow
+bowl
+bowler
+bowl
+bowl
+bow
+bowsprit
+bowstr
+box
+box
+boi
+boyet
+boyish
+boi
+brabant
+brabantio
+brabbl
+brabbler
+brac
+brace
+bracelet
+bracelet
+brach
+braci
+brag
+bragg
+braggard
+braggard
+braggart
+braggart
+brag
+brag
+bragless
+brag
+braid
+braid
+brain
+brain
+brainford
+brainish
+brainless
+brain
+brainsick
+brainsickli
+brake
+brakenburi
+brake
+brambl
+bran
+branch
+branch
+branchless
+brand
+brand
+brandish
+brandon
+brand
+bra
+brass
+brassi
+brat
+brat
+brav
+brave
+brave
+brave
+braver
+braveri
+brave
+bravest
+brave
+brawl
+brawler
+brawl
+brawl
+brawn
+brawn
+brai
+brai
+braz
+brazen
+brazier
+breach
+breach
+bread
+breadth
+break
+breaker
+breakfast
+break
+break
+breast
+breast
+breast
+breastplat
+breast
+breath
+breath
+breath
+breather
+breather
+breath
+breathest
+breath
+breathless
+breath
+brecknock
+bred
+breech
+breech
+breech
+breed
+breeder
+breeder
+breed
+breed
+brees
+breez
+breff
+bretagn
+brethen
+bretheren
+brethren
+brevi
+breviti
+brew
+brewag
+brewer
+brewer
+brew
+brew
+briareu
+briar
+brib
+bribe
+briber
+bribe
+brick
+bricklay
+brick
+bridal
+bride
+bridegroom
+bridegroom
+bride
+bridg
+bridgenorth
+bridg
+bridget
+bridl
+bridl
+brief
+briefer
+briefest
+briefli
+brief
+brier
+brier
+brigandin
+bright
+brighten
+brightest
+brightli
+bright
+brim
+brim
+brim
+brimston
+brind
+brine
+bring
+bringer
+bringeth
+bring
+bring
+bring
+brinish
+brink
+brisk
+briski
+bristl
+bristl
+bristli
+bristol
+bristow
+britain
+britain
+britain
+british
+briton
+briton
+brittani
+brittl
+broach
+broach
+broad
+broader
+broadsid
+broca
+brock
+brogu
+broil
+broil
+broil
+broke
+broken
+brokenli
+broker
+broker
+broke
+broke
+brooch
+brooch
+brood
+brood
+brood
+brook
+brook
+broom
+broomstaff
+broth
+brothel
+brother
+brotherhood
+brotherhood
+brotherli
+brother
+broth
+brought
+brow
+brown
+browner
+brownist
+browni
+brow
+brows
+brows
+brui
+bruis
+bruis
+bruis
+bruis
+bruit
+bruit
+brundusium
+brunt
+brush
+brush
+brute
+brutish
+brutu
+bubbl
+bubbl
+bubbl
+bubukl
+buck
+bucket
+bucket
+buck
+buckingham
+buckl
+buckl
+buckler
+buckler
+bucklersburi
+buckl
+buckram
+buck
+bud
+bud
+bud
+budg
+budger
+budget
+bud
+buff
+buffet
+buffet
+buffet
+bug
+bugbear
+bugl
+bug
+build
+build
+buildeth
+build
+build
+build
+built
+bulk
+bulk
+bull
+bullcalf
+bullen
+bullen
+bullet
+bullet
+bullock
+bull
+bulli
+bulmer
+bulwark
+bulwark
+bum
+bumbast
+bump
+bumper
+bum
+bunch
+bunch
+bundl
+bung
+bunghol
+bungl
+bunt
+buoi
+bur
+burbolt
+burd
+burden
+burden
+burden
+burden
+burden
+burgh
+burgher
+burgher
+burglari
+burgomast
+burgonet
+burgundi
+burial
+buri
+burier
+buriest
+burli
+burn
+burn
+burnet
+burneth
+burn
+burnish
+burn
+burnt
+burr
+burrow
+bur
+burst
+burst
+burst
+burthen
+burthen
+burton
+buri
+buri
+bush
+bushel
+bush
+bushi
+busi
+busili
+busin
+busi
+busi
+buskin
+buski
+buss
+buss
+buss
+bustl
+bustl
+busi
+but
+butche
+butcher
+butcher
+butcheri
+butcherli
+butcher
+butcheri
+butler
+butt
+butter
+butter
+butterfli
+butterfli
+butterwoman
+butteri
+buttock
+buttock
+button
+buttonhol
+button
+buttress
+buttri
+butt
+buxom
+bui
+buyer
+bui
+bui
+buzz
+buzzard
+buzzard
+buzzer
+buzz
+by
+bye
+byzantium
+c
+ca
+cabbag
+cabilero
+cabin
+cabin
+cabl
+cabl
+cackl
+cacodemon
+caddi
+caddiss
+cade
+cadenc
+cadent
+cade
+cadmu
+caduceu
+cadwal
+cadwallad
+caeliu
+caelo
+caesar
+caesarion
+caesar
+cage
+cage
+cagion
+cain
+caith
+caitiff
+caitiff
+caiu
+cak
+cake
+cake
+calab
+calai
+calam
+calam
+calcha
+calcul
+calen
+calendar
+calendar
+calf
+caliban
+caliban
+calipoli
+caliti
+caliv
+call
+callat
+call
+callet
+call
+call
+calm
+calmest
+calmli
+calm
+calm
+calpurnia
+calumni
+calumni
+calumni
+calumni
+calv
+calv
+calv
+calveskin
+calydon
+cam
+cambio
+cambria
+cambric
+cambric
+cambridg
+cambys
+came
+camel
+camelot
+camel
+camest
+camillo
+camlet
+camomil
+camp
+campeiu
+camp
+camp
+can
+canakin
+canari
+canari
+cancel
+cancel
+cancel
+cancel
+cancel
+cancer
+candidatu
+candi
+candl
+candl
+candlestick
+candi
+canidiu
+cank
+canker
+cankerblossom
+canker
+cannib
+cannib
+cannon
+cannon
+cannon
+cannot
+canon
+canoniz
+canon
+canon
+canon
+canopi
+canopi
+canopi
+canst
+canstick
+canterburi
+cantl
+canton
+canu
+canva
+canvass
+canzonet
+cap
+capabl
+capabl
+capac
+capac
+caparison
+capdv
+cape
+capel
+capel
+caper
+caper
+capet
+caphi
+capilet
+capitain
+capit
+capit
+capitol
+capitul
+capocchia
+capon
+capon
+capp
+cappadocia
+capriccio
+caprici
+cap
+capt
+captain
+captain
+captainship
+captiou
+captiv
+captiv
+captiv
+captiv
+captiv
+captiv
+captum
+capuciu
+capulet
+capulet
+car
+carack
+carack
+carat
+carawai
+carbonado
+carbuncl
+carbuncl
+carbuncl
+carcanet
+carcas
+carcas
+carcass
+carcass
+card
+cardecu
+card
+carder
+cardin
+cardin
+cardin
+cardmak
+card
+carduu
+care
+care
+career
+career
+care
+carefulli
+careless
+carelessli
+careless
+care
+caret
+cargo
+carl
+carlisl
+carlot
+carman
+carmen
+carnal
+carnal
+carnarvonshir
+carnat
+carnat
+carol
+carou
+carous
+carous
+carous
+carous
+carp
+carpent
+carper
+carpet
+carpet
+carp
+carriag
+carriag
+carri
+carrier
+carrier
+carri
+carrion
+carrion
+carri
+carri
+car
+cart
+carter
+carthag
+cart
+carv
+carv
+carv
+carver
+carv
+carv
+ca
+casa
+casaer
+casca
+case
+casement
+casement
+case
+cash
+cashier
+case
+cask
+casket
+casket
+casket
+casqu
+casqu
+cassado
+cassandra
+cassibelan
+cassio
+cassiu
+cassock
+cast
+castalion
+castawai
+castawai
+cast
+caster
+castig
+castig
+castil
+castiliano
+cast
+castl
+castl
+cast
+casual
+casual
+casualti
+casualti
+cat
+cataian
+catalogu
+cataplasm
+cataract
+catarrh
+catastroph
+catch
+catcher
+catch
+catch
+cate
+catechis
+catech
+catech
+cater
+caterpillar
+cater
+caterwaul
+cate
+catesbi
+cathedr
+catlik
+catl
+catl
+cato
+cat
+cattl
+caucasu
+caudl
+cauf
+caught
+cauldron
+cau
+caus
+caus
+causeless
+causer
+caus
+causest
+causeth
+cautel
+cautel
+cautel
+cauter
+caution
+caution
+cavaleiro
+cavaleri
+cavali
+cave
+cavern
+cavern
+cave
+caveto
+caviari
+cavil
+cavil
+cawdor
+cawdron
+caw
+ce
+cea
+ceas
+ceas
+ceaseth
+cedar
+cedar
+cediu
+celebr
+celebr
+celebr
+celebr
+celer
+celesti
+celia
+cell
+cellar
+cellarag
+celsa
+cement
+censer
+censor
+censorinu
+censur
+censur
+censur
+censur
+censur
+censur
+centaur
+centaur
+centr
+cent
+centuri
+centurion
+centurion
+centuri
+cerberu
+cerecloth
+cerement
+ceremoni
+ceremoni
+ceremoni
+ceremoni
+ceremoni
+cere
+cern
+certain
+certain
+certainli
+certainti
+certainti
+cert
+certif
+certifi
+certifi
+certifi
+ce
+cesario
+cess
+cess
+cestern
+cetera
+cett
+chace
+chaf
+chafe
+chafe
+chafe
+chaff
+chaffless
+chafe
+chain
+chain
+chair
+chair
+chalic
+chalic
+chalic
+chalk
+chalk
+chalki
+challeng
+challeng
+challeng
+challeng
+challeng
+challeng
+cham
+chamber
+chamber
+chamberlain
+chamberlain
+chambermaid
+chambermaid
+chamber
+chameleon
+champ
+champagn
+champain
+champain
+champion
+champion
+chanc
+chanc
+chanc
+chancellor
+chanc
+chandler
+chang
+chang
+changeabl
+chang
+chang
+changel
+changel
+changer
+chang
+changest
+chang
+channel
+channel
+chanson
+chant
+chanticl
+chant
+chantri
+chantri
+chant
+chao
+chap
+chape
+chapel
+chapeless
+chapel
+chaplain
+chaplain
+chapless
+chaplet
+chapmen
+chap
+chapter
+charact
+charact
+characterless
+charact
+characteri
+charact
+charbon
+chare
+chare
+charg
+charg
+charg
+charg
+charg
+chargeth
+charg
+chariest
+chari
+chare
+chariot
+chariot
+charit
+charit
+chariti
+chariti
+charlemain
+charl
+charm
+charm
+charmer
+charmeth
+charmian
+charm
+charmingli
+charm
+charneco
+charnel
+charoloi
+charon
+charter
+charter
+chartreux
+chari
+charybdi
+cha
+chase
+chase
+chaser
+chaseth
+chase
+chast
+chast
+chasti
+chastis
+chastis
+chastis
+chastiti
+chat
+chatham
+chatillon
+chat
+chatt
+chattel
+chatter
+chatter
+chattl
+chaud
+chaunt
+chaw
+chawdron
+che
+cheap
+cheapen
+cheaper
+cheapest
+cheapli
+cheapsid
+cheat
+cheat
+cheater
+cheater
+cheat
+cheat
+check
+check
+checker
+check
+check
+cheek
+cheek
+cheer
+cheer
+cheerer
+cheer
+cheerfulli
+cheer
+cheerless
+cheerli
+cheer
+chees
+chequer
+cher
+cherish
+cherish
+cherish
+cherish
+cherish
+cherri
+cherri
+cherrypit
+chertsei
+cherub
+cherubim
+cherubin
+cherubin
+cheshu
+chess
+chest
+chester
+chestnut
+chestnut
+chest
+cheta
+chev
+cheval
+chevali
+chevali
+cheveril
+chew
+chew
+chewet
+chew
+chez
+chi
+chick
+chicken
+chicken
+chicurmurco
+chid
+chidden
+chide
+chider
+chide
+chide
+chief
+chiefest
+chiefli
+chien
+child
+child
+childer
+childhood
+childhood
+child
+childish
+childish
+childlik
+child
+children
+chill
+chill
+chime
+chime
+chimnei
+chimneypiec
+chimnei
+chimurcho
+chin
+china
+chine
+chine
+chink
+chink
+chin
+chipp
+chipper
+chip
+chiron
+chirp
+chirrah
+chirurgeonli
+chisel
+chitoph
+chivalr
+chivalri
+choic
+choic
+choicest
+choir
+choir
+chok
+choke
+choke
+choke
+choke
+choler
+choler
+choler
+chollor
+choos
+chooser
+choos
+chooseth
+choos
+chop
+chopin
+choplog
+chopp
+chop
+chop
+choppi
+chop
+chopt
+chor
+chorist
+choru
+chose
+chosen
+chough
+chough
+chrish
+christ
+christen
+christendom
+christendom
+christen
+christen
+christian
+christianlik
+christian
+christma
+christom
+christoph
+christophero
+chronicl
+chronicl
+chronicl
+chronicl
+chronicl
+chrysolit
+chuck
+chuck
+chud
+chuff
+church
+church
+churchman
+churchmen
+churchyard
+churchyard
+churl
+churlish
+churlishli
+churl
+churn
+chu
+cicatric
+cicatric
+cice
+cicero
+cicet
+ciel
+ciitzen
+cilicia
+cimber
+cimmerian
+cinabl
+cinctur
+cinder
+cine
+cinna
+cinqu
+cipher
+cipher
+circa
+circ
+circl
+circl
+circlet
+circl
+circuit
+circum
+circumcis
+circumfer
+circummur
+circumscrib
+circumscrib
+circumscript
+circumspect
+circumst
+circumstanc
+circumst
+circumstanti
+circumv
+circumvent
+cistern
+citadel
+cital
+cite
+cite
+cite
+citi
+cite
+citizen
+citizen
+cittern
+citi
+civet
+civil
+civil
+civilli
+clack
+clad
+claim
+claim
+claim
+clamb
+clamber
+clammer
+clamor
+clamor
+clamor
+clamour
+clamour
+clang
+clangor
+clap
+clapp
+clap
+clapper
+clap
+clap
+clare
+clarenc
+claret
+claribel
+clasp
+clasp
+clatter
+claud
+claudio
+claudiu
+claus
+claw
+claw
+claw
+claw
+clai
+clai
+clean
+cleanliest
+cleanli
+clean
+cleans
+cleans
+clear
+clearer
+clearest
+clearli
+clear
+clear
+cleav
+cleav
+clef
+cleft
+cleitu
+clemenc
+clement
+cleomen
+cleopatpa
+cleopatra
+clepeth
+clept
+clerestori
+clergi
+clergyman
+clergymen
+clerk
+clerkli
+clerk
+clew
+client
+client
+cliff
+clifford
+clifford
+cliff
+clifton
+climat
+climatur
+climb
+climb
+climber
+climbeth
+climb
+climb
+clime
+cling
+clink
+clink
+clinquant
+clip
+clipp
+clipper
+clippeth
+clip
+clipt
+clitu
+clo
+cloak
+cloakbag
+cloak
+clock
+clock
+clod
+cloddi
+clodpol
+clog
+clog
+clog
+cloister
+cloistress
+cloquenc
+clo
+close
+close
+close
+close
+closer
+close
+closest
+closet
+close
+closur
+cloten
+cloten
+cloth
+clothair
+clothariu
+cloth
+cloth
+clothier
+clothier
+cloth
+cloth
+clotpol
+clotpol
+cloud
+cloud
+cloudi
+cloud
+cloudi
+clout
+clout
+clout
+cloven
+clover
+clove
+clovest
+clowder
+clown
+clownish
+clown
+cloi
+cloi
+cloi
+cloyless
+cloyment
+cloi
+club
+club
+cluck
+clung
+clust
+cluster
+clutch
+clyster
+cneiu
+cnemi
+co
+coach
+coach
+coachmak
+coact
+coactiv
+coagul
+coal
+coal
+coars
+coars
+coast
+coast
+coast
+coat
+coat
+coat
+cobbl
+cobbl
+cobbler
+cobham
+cobloaf
+cobweb
+cobweb
+cock
+cockatric
+cockatric
+cockl
+cockl
+cocknei
+cockpit
+cock
+cocksur
+coctu
+cocytu
+cod
+cod
+codl
+codpiec
+codpiec
+cod
+coelestibu
+coesar
+coeur
+coffer
+coffer
+coffin
+coffin
+cog
+cog
+cogit
+cogit
+cognit
+cogniz
+cogscomb
+cohabit
+coher
+coher
+coher
+coher
+cohort
+coif
+coign
+coil
+coin
+coinag
+coiner
+coin
+coin
+col
+colbrand
+colcho
+cold
+colder
+coldest
+coldli
+cold
+coldspur
+colebrook
+colic
+collar
+collar
+collater
+colleagu
+collect
+collect
+collect
+colleg
+colleg
+colli
+collier
+collier
+collop
+collus
+colm
+colmekil
+coloquintida
+color
+color
+colossu
+colour
+colour
+colour
+colour
+colour
+colt
+colt
+colt
+columbin
+columbin
+colvil
+com
+comagen
+comart
+comb
+combat
+combat
+combat
+combat
+combat
+combin
+combin
+combin
+combin
+combin
+combless
+combust
+come
+comedian
+comedian
+comedi
+comeli
+come
+comer
+comer
+come
+comest
+comet
+cometh
+comet
+comfect
+comfit
+comfit
+comfort
+comfort
+comfort
+comfort
+comfort
+comfortless
+comfort
+comic
+comic
+come
+come
+cominiu
+comma
+command
+command
+command
+command
+command
+command
+command
+command
+command
+comm
+commenc
+commenc
+commenc
+commenc
+commenc
+commenc
+commend
+commend
+commend
+commend
+commend
+commend
+commend
+comment
+commentari
+comment
+comment
+commerc
+commingl
+commiser
+commiss
+commission
+commiss
+commit
+commit
+committ
+commit
+commit
+commix
+commix
+commixt
+commixtur
+commodi
+commod
+commod
+common
+commonalti
+common
+common
+commonli
+common
+commonw
+commonwealth
+commot
+commot
+commun
+communicat
+commun
+commun
+commun
+commun
+comonti
+compact
+compani
+companion
+companion
+companionship
+compani
+compar
+compar
+compar
+compar
+compar
+comparison
+comparison
+compartn
+compass
+compass
+compass
+compass
+compassion
+compeer
+compel
+compel
+compel
+compel
+compel
+compens
+compet
+compet
+compet
+competitor
+competitor
+compil
+compil
+compil
+complain
+complain
+complainest
+complain
+complain
+complain
+complaint
+complaint
+complement
+complement
+complet
+complexion
+complexion
+complexion
+complic
+compli
+compliment
+compliment
+compliment
+complot
+complot
+complot
+compli
+compo
+compos
+compos
+composit
+compost
+compostur
+composur
+compound
+compound
+compound
+comprehend
+comprehend
+comprehend
+compremis
+compri
+compris
+compromi
+compromis
+compt
+comptibl
+comptrol
+compulsatori
+compuls
+compuls
+compuncti
+comput
+comrad
+comrad
+comutu
+con
+concav
+concav
+conceal
+conceal
+conceal
+conceal
+conceal
+conceal
+conceit
+conceit
+conceitless
+conceit
+conceiv
+conceiv
+conceiv
+conceiv
+conceiv
+concept
+concept
+concepti
+concern
+concern
+concerneth
+concern
+concern
+concern
+conclav
+conclud
+conclud
+conclud
+conclud
+conclud
+conclus
+conclus
+concolinel
+concord
+concubin
+concupisc
+concupi
+concur
+concur
+concur
+condemn
+condemn
+condemn
+condemn
+condemn
+condescend
+condign
+condit
+condition
+condit
+condol
+condol
+condol
+conduc
+conduct
+conduct
+conduct
+conductor
+conduit
+conduit
+conect
+conei
+confect
+confectionari
+confect
+confederaci
+confeder
+confeder
+confer
+confer
+conferr
+confer
+confess
+confess
+confess
+confesseth
+confess
+confess
+confess
+confessor
+confid
+confid
+confid
+confin
+confin
+confin
+confineless
+confin
+confin
+confin
+confirm
+confirm
+confirm
+confirm
+confirm
+confirm
+confirm
+confirm
+confirm
+confisc
+confisc
+confisc
+confix
+conflict
+conflict
+conflict
+confluenc
+conflux
+conform
+conform
+confound
+confound
+confound
+confound
+confront
+confront
+confu
+confus
+confusedli
+confus
+confus
+confut
+confut
+congeal
+congeal
+congeal
+conge
+conger
+congest
+congi
+congratul
+congre
+congreet
+congreg
+congreg
+congreg
+congreg
+congruent
+congru
+coni
+conjectur
+conjectur
+conjectur
+conjoin
+conjoin
+conjoin
+conjointli
+conjunct
+conjunct
+conjunct
+conjur
+conjur
+conjur
+conjur
+conjur
+conjur
+conjur
+conjur
+conjur
+conjuro
+conn
+connect
+conniv
+conqu
+conquer
+conquer
+conquer
+conqueror
+conqueror
+conquer
+conquest
+conquest
+conqur
+conrad
+con
+consanguin
+consanguin
+conscienc
+conscienc
+conscienc
+conscion
+consecr
+consecr
+consecr
+consent
+consent
+consent
+consent
+consequ
+consequ
+consequ
+conserv
+conserv
+conserv
+consid
+consider
+consider
+consider
+consider
+consid
+consid
+consid
+consid
+consign
+consign
+consist
+consisteth
+consist
+consistori
+consist
+consol
+consol
+conson
+conson
+consort
+consort
+consortest
+conspectu
+conspir
+conspiraci
+conspir
+conspir
+conspir
+conspir
+conspir
+conspir
+conspir
+conspir
+constabl
+constabl
+constanc
+constanc
+constanc
+constant
+constantin
+constantinopl
+constantli
+constel
+constitut
+constrain
+constrain
+constraineth
+constrain
+constraint
+constr
+construct
+constru
+consul
+consul
+consulship
+consulship
+consult
+consult
+consult
+consum
+consum
+consum
+consum
+consum
+consumm
+consumm
+consumpt
+consumpt
+contagion
+contagi
+contain
+contain
+contain
+contamin
+contamin
+contemn
+contemn
+contemn
+contemn
+contempl
+contempl
+contempl
+contempt
+contempt
+contempt
+contemptu
+contemptu
+contend
+contend
+contend
+contendon
+content
+contenta
+content
+contenteth
+content
+contenti
+contentless
+contento
+content
+contest
+contest
+contin
+contin
+contin
+contin
+continu
+continu
+continu
+continu
+continuantli
+continu
+continu
+continu
+continu
+continu
+continu
+contract
+contract
+contract
+contract
+contradict
+contradict
+contradict
+contradict
+contrari
+contrarieti
+contrarieti
+contrari
+contrari
+contrari
+contr
+contribut
+contributor
+contrit
+contriv
+contriv
+contriv
+contriv
+contriv
+contriv
+control
+control
+control
+control
+control
+control
+controversi
+contumeli
+contumeli
+contum
+contus
+conveni
+conveni
+conveni
+conveni
+conveni
+convent
+conventicl
+convent
+conver
+convers
+convers
+convers
+convers
+convers
+convers
+convers
+convers
+convert
+convert
+convertest
+convert
+convertit
+convertit
+convert
+convei
+convey
+convey
+convey
+convei
+convict
+convict
+convinc
+convinc
+convinc
+conviv
+convoc
+convoi
+convuls
+coni
+cook
+cookeri
+cook
+cool
+cool
+cool
+cool
+coop
+coop
+cop
+copatain
+cope
+cophetua
+copi
+copi
+copiou
+copper
+copperspur
+coppic
+copul
+copul
+copi
+cor
+coragio
+coral
+coram
+corambu
+coranto
+coranto
+corbo
+cord
+cord
+cordelia
+cordial
+cordi
+cord
+core
+corin
+corinth
+corinthian
+coriolanu
+corioli
+cork
+corki
+cormor
+corn
+cornelia
+corneliu
+corner
+corner
+cornerston
+cornet
+cornish
+corn
+cornuto
+cornwal
+corollari
+coron
+coron
+coronet
+coronet
+corpor
+corpor
+corpor
+corps
+corpul
+correct
+correct
+correct
+correct
+correction
+correct
+correspond
+correspond
+correspond
+correspons
+corrig
+corriv
+corriv
+corrobor
+corros
+corrupt
+corrupt
+corrupt
+corrupt
+corrupt
+corrupt
+corrupt
+corrupt
+corruptli
+corrupt
+cors
+cors
+corslet
+cosmo
+cost
+costard
+costermong
+costlier
+costli
+cost
+cot
+cote
+cote
+cotsal
+cotsol
+cotswold
+cottag
+cottag
+cotu
+couch
+couch
+couch
+couch
+coud
+cough
+cough
+could
+couldst
+coulter
+council
+councillor
+council
+counsel
+counsel
+counsellor
+counsellor
+counselor
+counselor
+counsel
+count
+count
+countenanc
+counten
+counten
+counter
+counterchang
+countercheck
+counterfeit
+counterfeit
+counterfeit
+counterfeitli
+counterfeit
+countermand
+countermand
+countermin
+counterpart
+counterpoint
+counterpoi
+counterpois
+counter
+countervail
+countess
+countess
+counti
+count
+countless
+countri
+countrv
+countri
+countryman
+countrymen
+count
+counti
+couper
+coupl
+coupl
+couplement
+coupl
+couplet
+couplet
+cour
+courag
+courag
+courag
+courag
+courier
+courier
+couronn
+cour
+cours
+cours
+courser
+courser
+cours
+cours
+court
+court
+courteou
+courteous
+courtesan
+courtesi
+courtesi
+courtezan
+courtezan
+courtier
+courtier
+courtlik
+courtli
+courtnei
+court
+courtship
+cousin
+cousin
+couterfeit
+coutum
+coven
+coven
+covent
+coventri
+cover
+cover
+cover
+coverlet
+cover
+covert
+covertli
+covertur
+covet
+covet
+covet
+covet
+covet
+covet
+covet
+covet
+cow
+coward
+coward
+cowardic
+cowardli
+coward
+cowardship
+cowish
+cowl
+cowslip
+cowslip
+cox
+coxcomb
+coxcomb
+coi
+coystril
+coz
+cozen
+cozenag
+cozen
+cozen
+cozen
+cozen
+cozier
+crab
+crab
+crab
+crack
+crack
+cracker
+cracker
+crack
+crack
+cradl
+cradl
+cradl
+craft
+craft
+crafti
+craftier
+craftili
+craft
+craftsmen
+crafti
+cram
+cramm
+cramp
+cramp
+cram
+crank
+crank
+cranmer
+cranni
+cranni
+cranni
+crant
+crare
+crash
+crassu
+crav
+crave
+crave
+craven
+craven
+crave
+craveth
+crave
+crawl
+crawl
+crawl
+craz
+craze
+crazi
+creak
+cream
+creat
+creat
+creat
+creat
+creation
+creator
+creatur
+creatur
+credenc
+credent
+credibl
+credit
+creditor
+creditor
+credo
+credul
+credul
+creed
+creek
+creek
+creep
+creep
+creep
+crept
+crescent
+cresciv
+cresset
+cressid
+cressida
+cressid
+cressi
+crest
+crest
+crestfal
+crestless
+crest
+cretan
+crete
+crevic
+crew
+crew
+crib
+cribb
+crib
+cricket
+cricket
+cri
+criedst
+crier
+cri
+criest
+crieth
+crime
+crime
+crimeless
+crime
+crimin
+crimson
+cring
+crippl
+crisp
+crisp
+crispian
+crispianu
+crispin
+critic
+critic
+critic
+croak
+croak
+croak
+crocodil
+cromer
+cromwel
+crone
+crook
+crookback
+crook
+crook
+crop
+cropp
+crosbi
+cross
+cross
+cross
+crossest
+cross
+cross
+crossli
+cross
+crost
+crotchet
+crouch
+crouch
+crow
+crowd
+crowd
+crowd
+crowd
+crowflow
+crow
+crowkeep
+crown
+crown
+crowner
+crownet
+crownet
+crown
+crown
+crow
+crudi
+cruel
+cruell
+crueller
+cruelli
+cruel
+cruelti
+crum
+crumbl
+crumb
+crupper
+crusado
+crush
+crush
+crushest
+crush
+crust
+crust
+crusti
+crutch
+crutch
+cry
+cry
+crystal
+crystallin
+crystal
+cub
+cubbert
+cubiculo
+cubit
+cub
+cuckold
+cuckoldli
+cuckold
+cuckoo
+cucullu
+cudgel
+cudgel
+cudgel
+cudgel
+cudgel
+cue
+cue
+cuff
+cuff
+cuiqu
+cull
+cull
+cullion
+cullionli
+cullion
+culpabl
+culverin
+cum
+cumber
+cumberland
+cun
+cunningli
+cun
+cuor
+cup
+cupbear
+cupboard
+cupid
+cupid
+cuppel
+cup
+cur
+curan
+curat
+curb
+curb
+curb
+curb
+curd
+curdi
+curd
+cure
+cure
+cureless
+curer
+cure
+curfew
+cure
+curio
+curios
+curiou
+curious
+curl
+curl
+curl
+curl
+curranc
+currant
+current
+current
+currish
+curri
+cur
+curs
+curs
+curs
+cursi
+curs
+cursorari
+curst
+curster
+curstest
+curst
+cursi
+curtail
+curtain
+curtain
+curtal
+curti
+curtl
+curtsi
+curtsi
+curtsi
+curvet
+curvet
+cush
+cushion
+cushion
+custalorum
+custard
+custodi
+custom
+customari
+custom
+custom
+custom
+custom
+custur
+cut
+cutler
+cutpurs
+cutpurs
+cut
+cutter
+cut
+cuttl
+cxsar
+cyclop
+cydnu
+cygnet
+cygnet
+cym
+cymbal
+cymbelin
+cyme
+cynic
+cynthia
+cypress
+cypriot
+cypru
+cyru
+cytherea
+d
+dabbl
+dace
+dad
+daedalu
+daemon
+daff
+daf
+daffest
+daffodil
+dagger
+dagger
+dagonet
+daili
+daintier
+dainti
+daintiest
+daintili
+dainti
+daintri
+dainti
+daisi
+daisi
+daisi
+dale
+dallianc
+dalli
+dalli
+dalli
+dalli
+dalmatian
+dam
+damag
+damascu
+damask
+damask
+dame
+dame
+damm
+damn
+damnabl
+damnabl
+damnat
+damn
+damn
+damoisel
+damon
+damosella
+damp
+dam
+damsel
+damson
+dan
+danc
+danc
+dancer
+danc
+danc
+dandl
+dandi
+dane
+dang
+danger
+danger
+danger
+danger
+dangl
+daniel
+danish
+dank
+dankish
+dansker
+daphn
+dappl
+dappl
+dar
+dardan
+dardanian
+dardaniu
+dare
+dare
+dare
+dare
+darest
+dare
+dariu
+dark
+darken
+darken
+darken
+darker
+darkest
+darkl
+darkli
+dark
+darl
+darl
+darnel
+darraign
+dart
+dart
+darter
+dartford
+dart
+dart
+dash
+dash
+dash
+dastard
+dastard
+dat
+datchet
+date
+date
+dateless
+date
+daub
+daughter
+daughter
+daunt
+daunt
+dauntless
+dauphin
+daventri
+davi
+daw
+dawn
+dawn
+daw
+dai
+daylight
+dai
+dazzl
+dazzl
+dazzl
+de
+dead
+deadli
+deaf
+deaf
+deaf
+deaf
+deal
+dealer
+dealer
+dealest
+deal
+deal
+deal
+dealt
+dean
+deaneri
+dear
+dearer
+dearest
+dearli
+dear
+dear
+dearth
+dearth
+death
+deathb
+death
+death
+deathsman
+deathsmen
+debar
+debas
+debat
+debat
+debat
+debateth
+debat
+debauch
+debil
+debil
+debitor
+debonair
+deborah
+debosh
+debt
+debt
+debtor
+debtor
+debt
+debuti
+decai
+decai
+decay
+decai
+decai
+decea
+deceas
+deceas
+deceit
+deceit
+deceit
+deceiv
+deceiv
+deceiv
+deceiv
+deceiv
+deceiv
+deceiv
+deceivest
+deceiveth
+deceiv
+decemb
+decent
+decepti
+decern
+decid
+decid
+decim
+deciph
+deciph
+decis
+deciu
+deck
+deck
+deck
+deckt
+declar
+declar
+declens
+declens
+declin
+declin
+declin
+declin
+declin
+decoct
+decorum
+decrea
+decreas
+decreas
+decre
+decre
+decre
+decrepit
+dedic
+dedic
+dedic
+dedic
+deed
+deedless
+deed
+deem
+deem
+deep
+deeper
+deepest
+deepli
+deep
+deepvow
+deer
+deess
+defac
+defac
+defac
+defac
+defac
+defac
+defam
+default
+defeat
+defeat
+defeat
+defeatur
+defect
+defect
+defect
+defenc
+defenc
+defend
+defend
+defend
+defend
+defend
+defend
+defend
+defens
+defens
+defens
+defer
+deferr
+defianc
+defici
+defi
+defi
+defil
+defil
+defil
+defil
+defil
+defin
+defin
+definit
+definit
+definit
+deflow
+deflow
+deflow
+deform
+deform
+deform
+deform
+deftli
+defunct
+defunct
+defus
+defi
+defi
+degener
+degrad
+degre
+degre
+deifi
+deifi
+deign
+deign
+deiphobu
+deiti
+deiti
+deja
+deject
+deject
+delabreth
+delai
+delai
+delai
+delai
+delect
+deliber
+delic
+delic
+delici
+delici
+delight
+delight
+delight
+delight
+delinqu
+deliv
+deliv
+deliver
+deliv
+deliv
+deliv
+deliveri
+delpho
+delud
+delud
+delug
+delv
+delver
+delv
+demand
+demand
+demand
+demand
+demean
+demeanor
+demeanour
+demerit
+demesn
+demetriu
+demi
+demigod
+demis
+demoisel
+demon
+demonstr
+demonstr
+demonstr
+demonstr
+demonstr
+demonstr
+demur
+demur
+demur
+den
+denai
+deni
+denial
+denial
+deni
+denier
+deni
+deniest
+deni
+denmark
+denni
+denni
+denot
+denot
+denot
+denounc
+denounc
+denounc
+den
+denunci
+deni
+deni
+deo
+depart
+depart
+departest
+depart
+departur
+depech
+depend
+depend
+depend
+depend
+depend
+depend
+depend
+depend
+depend
+depend
+depend
+depend
+deplor
+deplor
+depopul
+depo
+depos
+depos
+depos
+depositari
+deprav
+deprav
+deprav
+deprav
+deprav
+depress
+depriv
+depriv
+depth
+depth
+deput
+deput
+deput
+deputi
+deput
+deputi
+deracin
+derbi
+derceta
+dere
+derid
+deris
+deriv
+deriv
+deriv
+deriv
+deriv
+deriv
+derog
+derog
+derog
+de
+desartless
+descant
+descend
+descend
+descend
+descend
+descens
+descent
+descent
+describ
+describ
+describ
+descri
+descript
+descript
+descri
+desdemon
+desdemona
+desert
+desert
+deserv
+deserv
+deserv
+deservedli
+deserv
+deserv
+deserv
+deservest
+deserv
+deserv
+design
+design
+design
+design
+desir
+desir
+desir
+desir
+desir
+desirest
+desir
+desir
+desist
+desk
+desol
+desol
+desp
+despair
+despair
+despair
+despatch
+desper
+desper
+desper
+despi
+despis
+despis
+despis
+despiseth
+despis
+despit
+despit
+despoil
+dest
+destin
+destin
+destini
+destini
+destitut
+destroi
+destroi
+destroy
+destroy
+destroi
+destroi
+destruct
+destruct
+det
+detain
+detain
+detect
+detect
+detect
+detect
+detector
+detect
+detent
+determin
+determin
+determin
+determin
+determin
+determin
+determin
+detest
+detest
+detest
+detest
+detest
+detract
+detract
+detract
+deucalion
+deuc
+deum
+deux
+devant
+devest
+devic
+devic
+devil
+devilish
+devil
+devi
+devis
+devis
+devis
+devis
+devoid
+devonshir
+devot
+devot
+devot
+devour
+devour
+devour
+devour
+devour
+devout
+devoutli
+dew
+dewberri
+dewdrop
+dewlap
+dewlapp
+dew
+dewi
+dexter
+dexteri
+dexter
+di
+diabl
+diablo
+diadem
+dial
+dialect
+dialogu
+dialogu
+dial
+diamet
+diamond
+diamond
+dian
+diana
+diaper
+dibbl
+dic
+dice
+dicer
+dich
+dick
+dicken
+dickon
+dicki
+dictat
+diction
+dictynna
+did
+diddl
+didest
+dido
+didst
+die
+di
+diedst
+di
+diest
+diet
+diet
+dieter
+dieu
+diff
+differ
+differ
+differ
+differ
+differ
+differ
+differ
+difficil
+difficult
+difficulti
+difficulti
+diffid
+diffid
+diffu
+diffus
+diffusest
+dig
+digest
+digest
+digest
+digest
+digg
+dig
+dighton
+dignifi
+dignifi
+dignifi
+digniti
+digniti
+digress
+digress
+digress
+dig
+digt
+dilat
+dilat
+dilat
+dilatori
+dild
+dildo
+dilemma
+dilemma
+dilig
+dilig
+diluculo
+dim
+dimens
+dimens
+diminish
+diminish
+diminut
+diminut
+diminut
+dimm
+dim
+dim
+dimpl
+dimpl
+dim
+din
+dine
+dine
+diner
+dine
+ding
+dine
+dinner
+dinner
+dinnertim
+dint
+diom
+diomed
+diomed
+dion
+dip
+dipp
+dip
+dip
+dir
+dire
+direct
+direct
+direct
+direct
+direct
+directitud
+direct
+directli
+direct
+dire
+dire
+direst
+dirg
+dirg
+dirt
+dirti
+di
+disabl
+disabl
+disabl
+disabl
+disadvantag
+disagre
+disallow
+disanim
+disannul
+disannul
+disappoint
+disarm
+disarm
+disarmeth
+disarm
+disast
+disast
+disastr
+disbench
+disbranch
+disburden
+disbur
+disburs
+disburs
+discandi
+discandi
+discard
+discard
+discas
+discas
+discern
+discern
+discern
+discern
+discern
+discharg
+discharg
+discharg
+discharg
+discipl
+discipl
+disciplin
+disciplin
+disciplin
+disciplin
+disclaim
+disclaim
+disclaim
+disclo
+disclos
+disclos
+disclos
+discolour
+discolour
+discolour
+discomfit
+discomfit
+discomfitur
+discomfort
+discomfort
+discommend
+disconsol
+discont
+discont
+discontentedli
+discont
+discont
+discontinu
+discontinu
+discord
+discord
+discord
+discours
+discours
+discours
+discours
+discours
+discourtesi
+discov
+discov
+discov
+discover
+discoveri
+discov
+discov
+discoveri
+discredit
+discredit
+discredit
+discreet
+discreetli
+discret
+discret
+discuss
+disdain
+disdain
+disdaineth
+disdain
+disdainfulli
+disdain
+disdain
+disdnguish
+disea
+diseas
+diseas
+diseas
+disedg
+disembark
+disfigur
+disfigur
+disfurnish
+disgorg
+disgrac
+disgrac
+disgrac
+disgrac
+disgrac
+disgrac
+disgraci
+disgui
+disguis
+disguis
+disguis
+disguis
+disguis
+dish
+dishabit
+dishclout
+dishearten
+dishearten
+dish
+dishonest
+dishonestli
+dishonesti
+dishonor
+dishonor
+dishonor
+dishonour
+dishonour
+dishonour
+dishonour
+disinherit
+disinherit
+disjoin
+disjoin
+disjoin
+disjoint
+disjunct
+dislik
+dislik
+disliken
+dislik
+dislimn
+disloc
+dislodg
+disloy
+disloyalti
+dismal
+dismantl
+dismantl
+dismask
+dismai
+dismai
+dismemb
+dismemb
+dism
+dismiss
+dismiss
+dismiss
+dismiss
+dismount
+dismount
+disnatur
+disobedi
+disobedi
+disobei
+disobei
+disorb
+disord
+disord
+disorderli
+disord
+disparag
+disparag
+disparag
+dispark
+dispatch
+dispens
+dispens
+dispens
+disper
+dispers
+dispers
+dispersedli
+dispers
+dispit
+displac
+displac
+displac
+displant
+displant
+displai
+displai
+displea
+displeas
+displeas
+displeas
+displeasur
+displeasur
+dispong
+disport
+disport
+dispo
+dispos
+dispos
+dispos
+dispos
+disposit
+disposit
+dispossess
+dispossess
+disprai
+disprais
+disprais
+dispraisingli
+disproperti
+disproport
+disproport
+disprov
+disprov
+disprov
+dispurs
+disput
+disput
+disput
+disput
+disput
+disput
+disput
+disquant
+disquiet
+disquietli
+disrelish
+disrob
+disseat
+dissembl
+dissembl
+dissembl
+dissembl
+dissembl
+dissembl
+dissens
+dissens
+dissenti
+dissev
+dissip
+dissolut
+dissolut
+dissolut
+dissolut
+dissolv
+dissolv
+dissolv
+dissolv
+dissuad
+dissuad
+distaff
+distaff
+distain
+distain
+distanc
+distant
+distast
+distast
+distast
+distemp
+distemp
+distemperatur
+distemperatur
+distemp
+distemp
+distil
+distil
+distil
+distil
+distil
+distil
+distinct
+distinct
+distinctli
+distingu
+distinguish
+distinguish
+distinguish
+distract
+distract
+distractedli
+distract
+distract
+distract
+distrain
+distraught
+distress
+distress
+distress
+distress
+distribut
+distribut
+distribut
+distrust
+distrust
+disturb
+disturb
+disturb
+disturb
+disunit
+disvalu
+disvouch
+dit
+ditch
+ditcher
+ditch
+dite
+ditti
+ditti
+diurnal
+div
+dive
+diver
+diver
+divers
+divers
+divert
+divert
+divert
+dive
+divest
+divid
+divid
+divid
+divid
+divid
+divideth
+divin
+divin
+divin
+divin
+divin
+divin
+divin
+divinest
+divin
+divin
+divis
+divis
+divorc
+divorc
+divorc
+divorc
+divorc
+divulg
+divulg
+divulg
+divulg
+dizi
+dizzi
+do
+doat
+dobbin
+dock
+dock
+doct
+doctor
+doctor
+doctrin
+document
+dodg
+doe
+doer
+doer
+doe
+doest
+doff
+dog
+dogberri
+dogfish
+dogg
+dog
+dog
+doigt
+do
+do
+doit
+doit
+dolabella
+dole
+dole
+doll
+dollar
+dollar
+dolor
+dolor
+dolour
+dolour
+dolphin
+dolt
+dolt
+domest
+domest
+domin
+domin
+domin
+domin
+domin
+domin
+domin
+dominion
+dominion
+domitiu
+dommelton
+don
+donalbain
+donat
+donc
+doncast
+done
+dong
+donn
+donn
+donner
+donnerai
+doom
+doomsdai
+door
+doorkeep
+door
+dorca
+doreu
+doricl
+dormous
+dorothi
+dorset
+dorsetshir
+dost
+dotag
+dotant
+dotard
+dotard
+dote
+dote
+doter
+dote
+doteth
+doth
+dote
+doubl
+doubl
+doubl
+doubler
+doublet
+doublet
+doubl
+doubli
+doubt
+doubt
+doubt
+doubtfulli
+doubt
+doubtless
+doubt
+doug
+dough
+doughti
+doughi
+dougla
+dout
+dout
+dout
+dove
+dovehous
+dover
+dove
+dow
+dowag
+dowdi
+dower
+dowerless
+dower
+dowla
+dowl
+down
+downfal
+downright
+down
+downstair
+downtrod
+downward
+downward
+downi
+dowri
+dowri
+dowsabel
+doxi
+doze
+dozen
+dozen
+dozi
+drab
+drab
+drab
+drachma
+drachma
+draff
+drag
+dragg
+drag
+drag
+dragon
+dragonish
+dragon
+drain
+drain
+drain
+drake
+dram
+dramati
+drank
+draught
+draught
+drave
+draw
+drawbridg
+drawer
+drawer
+draweth
+draw
+drawl
+drawn
+draw
+drayman
+draymen
+dread
+dread
+dread
+dreadfulli
+dread
+dread
+dream
+dreamer
+dreamer
+dream
+dream
+dreamt
+drearn
+dreari
+dreg
+dreg
+drench
+drench
+dress
+dress
+dresser
+dress
+dress
+drest
+drew
+dribbl
+dri
+drier
+dri
+drift
+drili
+drink
+drinketh
+drink
+drink
+drink
+driv
+drive
+drivel
+driven
+drive
+driveth
+drive
+drizzl
+drizzl
+drizzl
+droit
+drolleri
+dromio
+dromio
+drone
+drone
+droop
+droopeth
+droop
+droop
+drop
+dropheir
+droplet
+dropp
+dropper
+droppeth
+drop
+drop
+drop
+dropsi
+dropsi
+dropsi
+dropt
+dross
+drossi
+drought
+drove
+droven
+drovier
+drown
+drown
+drown
+drown
+drow
+drows
+drowsili
+drowsi
+drowsi
+drudg
+drudgeri
+drudg
+drug
+drugg
+drug
+drum
+drumbl
+drummer
+drum
+drum
+drunk
+drunkard
+drunkard
+drunken
+drunkenli
+drunken
+dry
+dryness
+dst
+du
+dub
+dubb
+ducat
+ducat
+ducdam
+duchess
+duchi
+duchi
+duck
+duck
+duck
+dudgeon
+due
+duellist
+duello
+duer
+due
+duff
+dug
+dug
+duke
+dukedom
+dukedom
+duke
+dulcet
+dulch
+dull
+dullard
+duller
+dullest
+dull
+dull
+dull
+dulli
+dul
+duli
+dumain
+dumb
+dumb
+dumbl
+dumb
+dump
+dump
+dun
+duncan
+dung
+dungeon
+dungeon
+dunghil
+dunghil
+dungi
+dunnest
+dunsinan
+dunsmor
+dunstabl
+dupp
+duranc
+dure
+durst
+duski
+dust
+dust
+dusti
+dutch
+dutchman
+duteou
+duti
+duti
+duti
+dwarf
+dwarfish
+dwell
+dweller
+dwell
+dwell
+dwelt
+dwindl
+dy
+dye
+dy
+dyer
+dy
+e
+each
+eager
+eagerli
+eager
+eagl
+eagl
+ean
+eanl
+ear
+ear
+earl
+earldom
+earlier
+earliest
+earli
+earl
+earli
+earn
+earn
+earnest
+earnestli
+earnest
+earn
+ear
+earth
+earthen
+earthlier
+earthli
+earthquak
+earthquak
+earthi
+ea
+eas
+eas
+eas
+eas
+easier
+easiest
+easiliest
+easili
+easi
+eas
+east
+eastcheap
+easter
+eastern
+eastward
+easi
+eat
+eaten
+eater
+eater
+eat
+eat
+eaux
+eav
+ebb
+eb
+ebb
+ebon
+eboni
+ebrew
+ecc
+echapp
+echo
+echo
+eclip
+eclips
+eclips
+ecoli
+ecoutez
+ecstaci
+ecstasi
+ecstasi
+ecu
+eden
+edg
+edgar
+edg
+edg
+edgeless
+edg
+edict
+edict
+edific
+edific
+edifi
+edifi
+edit
+edm
+edmund
+edmund
+edmundsburi
+educ
+educ
+educ
+edward
+eel
+eel
+effect
+effect
+effectless
+effect
+effectu
+effectu
+effemin
+effigi
+effu
+effus
+effus
+eftest
+egal
+egal
+eget
+egeu
+egg
+egg
+eggshel
+eglamour
+eglantin
+egma
+ego
+egregi
+egregi
+egress
+egypt
+egyptian
+egyptian
+eie
+eight
+eighteen
+eighth
+eightpenni
+eighti
+eisel
+either
+eject
+ek
+el
+elb
+elbow
+elbow
+eld
+elder
+elder
+eldest
+eleanor
+elect
+elect
+elect
+eleg
+elegi
+element
+element
+eleph
+eleph
+elev
+eleven
+eleventh
+elf
+elflock
+eliad
+elinor
+elizabeth
+ell
+ell
+ellen
+elm
+eloqu
+eloqu
+els
+elsewher
+elsinor
+eltham
+elv
+elvish
+eli
+elysium
+em
+embal
+embalm
+embalm
+embark
+embark
+embarqu
+embassad
+embassag
+embassi
+embassi
+embattail
+embattl
+embattl
+embai
+embellish
+ember
+emblaz
+emblem
+emblem
+embodi
+embold
+embolden
+emboss
+emboss
+embound
+embowel
+embowel
+embrac
+embrac
+embrac
+embrac
+embrac
+embrac
+embrac
+embrasur
+embroid
+embroideri
+emhrac
+emilia
+emin
+emin
+emin
+emmanuel
+emniti
+empal
+emper
+emperess
+emperi
+emperor
+emperi
+emphasi
+empir
+empir
+empiricut
+empleach
+emploi
+emploi
+employ
+employ
+employ
+empoison
+empress
+empti
+emptier
+empti
+empti
+empti
+empti
+emul
+emul
+emul
+emul
+emul
+en
+enact
+enact
+enact
+enactur
+enamel
+enamel
+enamour
+enamour
+enanmour
+encamp
+encamp
+encav
+enceladu
+enchaf
+enchaf
+enchant
+enchant
+enchant
+enchantingli
+enchant
+enchantress
+enchant
+encha
+encircl
+encircl
+enclo
+enclos
+enclos
+enclos
+encloseth
+enclos
+encloud
+encompass
+encompass
+encompasseth
+encompass
+encor
+encorpor
+encount
+encount
+encount
+encount
+encourag
+encourag
+encourag
+encrimson
+encroach
+encumb
+end
+endamag
+endamag
+endang
+endart
+endear
+endear
+endeavour
+endeavour
+end
+ender
+end
+end
+endit
+endless
+endow
+endow
+endow
+endow
+end
+endu
+endu
+endur
+endur
+endur
+endur
+endur
+endur
+endymion
+enea
+enemi
+enemi
+enerni
+enew
+enfeebl
+enfeebl
+enfeoff
+enfett
+enfold
+enforc
+enforc
+enforc
+enforcedli
+enforc
+enforc
+enforcest
+enfranch
+enfranchi
+enfranchis
+enfranchis
+enfranchis
+enfre
+enfreedom
+engag
+engag
+engag
+engag
+engag
+engaol
+engend
+engend
+engend
+engild
+engin
+engin
+engin
+engin
+engirt
+england
+english
+englishman
+englishmen
+englut
+englut
+engraf
+engraft
+engraft
+engrav
+engrav
+engross
+engross
+engrossest
+engross
+engross
+enguard
+enigma
+enigmat
+enjoin
+enjoin
+enjoi
+enjoi
+enjoy
+enjoi
+enjoi
+enkindl
+enkindl
+enlard
+enlarg
+enlarg
+enlarg
+enlarg
+enlargeth
+enlighten
+enlink
+enmesh
+enmiti
+enmiti
+ennobl
+ennobl
+enobarb
+enobarbu
+enon
+enorm
+enorm
+enough
+enow
+enpatron
+enpierc
+enquir
+enquir
+enquir
+enrag
+enrag
+enrag
+enrag
+enrank
+enrapt
+enrich
+enrich
+enrich
+enridg
+enr
+enrob
+enrob
+enrol
+enrol
+enroot
+enround
+enschedul
+ensconc
+ensconc
+enseam
+ensear
+enseign
+enseignez
+ensembl
+enshelt
+enshield
+enshrin
+ensign
+ensign
+enski
+ensman
+ensnar
+ensnar
+ensnareth
+ensteep
+ensu
+ensu
+ensu
+ensu
+ensu
+enswath
+ent
+entail
+entam
+entangl
+entangl
+entendr
+enter
+enter
+enter
+enterpris
+enterpris
+enter
+entertain
+entertain
+entertain
+entertain
+entertain
+entertain
+enthral
+enthral
+enthron
+enthron
+entic
+entic
+entic
+entir
+entir
+entitl
+entitl
+entitl
+entomb
+entomb
+entrail
+entranc
+entranc
+entrap
+entrapp
+entr
+entreat
+entreat
+entreati
+entreat
+entreat
+entreat
+entreati
+entrench
+entri
+entwist
+envelop
+envenom
+envenom
+envenom
+envi
+envi
+enviou
+envious
+environ
+environ
+envoi
+envi
+envi
+enwheel
+enwomb
+enwrap
+ephesian
+ephesian
+ephesu
+epicur
+epicurean
+epicur
+epicur
+epicuru
+epidamnum
+epidauru
+epigram
+epilepsi
+epilept
+epilogu
+epilogu
+epistl
+epistrophu
+epitaph
+epitaph
+epithet
+epitheton
+epithet
+epitom
+equal
+equal
+equal
+equal
+equal
+equal
+equal
+equinocti
+equinox
+equipag
+equiti
+equivoc
+equivoc
+equivoc
+equivoc
+equivoc
+er
+erbear
+erbear
+erbear
+erbeat
+erblow
+erboard
+erborn
+ercam
+ercast
+ercharg
+ercharg
+ercharg
+ercl
+ercom
+ercov
+ercrow
+erdo
+er
+erebu
+erect
+erect
+erect
+erect
+erect
+erewhil
+erflourish
+erflow
+erflow
+erflow
+erfraught
+erga
+ergal
+erglanc
+ergo
+ergon
+ergrow
+ergrown
+ergrowth
+erhang
+erhang
+erhasti
+erhear
+erheard
+eringo
+erjoi
+erleap
+erleap
+erleaven
+erlook
+erlook
+ermast
+ermengar
+ermount
+ern
+ernight
+ero
+erpaid
+erpart
+erpast
+erpai
+erpeer
+erperch
+erpictur
+erpingham
+erpost
+erpow
+erpress
+erpress
+err
+errand
+errand
+errant
+errat
+erraught
+erreach
+er
+errest
+er
+erron
+error
+error
+err
+errul
+errun
+erset
+ershad
+ershad
+ershin
+ershot
+ersiz
+erskip
+erslip
+erspread
+erst
+erstar
+erstep
+erstunk
+erswai
+erswai
+erswel
+erta
+ertak
+erteem
+erthrow
+erthrown
+erthrow
+ertook
+ertop
+ertop
+ertrip
+erturn
+erudit
+erupt
+erupt
+ervalu
+erwalk
+erwatch
+erween
+erween
+erweigh
+erweigh
+erwhelm
+erwhelm
+erworn
+es
+escalu
+escap
+escap
+escap
+escap
+eschew
+escot
+esil
+especi
+especi
+esper
+espial
+espi
+espi
+espou
+espous
+espi
+esquir
+esquir
+essai
+essai
+essenc
+essenti
+essenti
+ess
+essex
+est
+establish
+establish
+estat
+estat
+esteem
+esteem
+esteemeth
+esteem
+esteem
+estim
+estim
+estim
+estim
+estim
+estrang
+estridg
+estridg
+et
+etc
+etcetera
+et
+etern
+etern
+etern
+etern
+eterniz
+et
+ethiop
+ethiop
+ethiop
+ethiopian
+etna
+eton
+etr
+eunuch
+eunuch
+euphrat
+euphroniu
+euriphil
+europa
+europ
+ev
+evad
+evad
+evan
+evas
+evas
+ev
+even
+even
+evenli
+event
+event
+event
+ever
+everlast
+everlastingli
+evermor
+everi
+everyon
+everyth
+everywher
+evid
+evid
+evid
+evil
+evilli
+evil
+evit
+ew
+ewer
+ewer
+ew
+exact
+exact
+exactest
+exact
+exact
+exact
+exactli
+exact
+exalt
+exalt
+examin
+examin
+examin
+examin
+examin
+examin
+exampl
+exampl
+exampl
+exampl
+exasper
+exasper
+exce
+exceed
+exceedeth
+exceed
+exceedingli
+exce
+excel
+excel
+excel
+excel
+excel
+excel
+excel
+excel
+excel
+except
+except
+except
+except
+except
+exceptless
+excess
+excess
+exchang
+exchang
+exchang
+exchequ
+exchequ
+excit
+excit
+excit
+excit
+exclaim
+exclaim
+exclam
+exclam
+exclud
+excommun
+excommun
+excrement
+excrement
+excurs
+excurs
+excu
+excus
+excus
+excus
+excus
+excusez
+excus
+execr
+execr
+execut
+execut
+execut
+execut
+execution
+execution
+executor
+executor
+exempt
+exempt
+exequi
+exercis
+exercis
+exet
+exeunt
+exhal
+exhal
+exhal
+exhal
+exhal
+exhaust
+exhibit
+exhibit
+exhibit
+exhort
+exhort
+exig
+exil
+exil
+exil
+exion
+exist
+exist
+exit
+exit
+exorcis
+exorc
+exorcist
+expect
+expect
+expect
+expect
+expect
+expect
+expect
+expect
+expect
+expedi
+expedi
+expedi
+expedit
+expediti
+expel
+expel
+expel
+expel
+expend
+expens
+expens
+experienc
+experi
+experi
+experi
+experiment
+experi
+expert
+expert
+expiat
+expiat
+expir
+expir
+expir
+expir
+expir
+expir
+explic
+exploit
+exploit
+expo
+expos
+expos
+exposit
+expositor
+expostul
+expostul
+expostur
+exposur
+expound
+expound
+express
+express
+expresseth
+express
+express
+expressli
+expressur
+expul
+expuls
+exquisit
+exsuffl
+extant
+extempor
+extempor
+extempor
+extend
+extend
+extend
+extent
+extenu
+extenu
+extenu
+extenu
+exterior
+exteriorli
+exterior
+extermin
+extern
+extern
+extinct
+extinct
+extinctur
+extinguish
+extirp
+extirp
+extirp
+extol
+extol
+extol
+exton
+extort
+extort
+extort
+extort
+extra
+extract
+extract
+extract
+extraordinarili
+extraordinari
+extraught
+extravag
+extravag
+extrem
+extrem
+extrem
+extremest
+extrem
+extrem
+exuent
+exult
+exult
+ey
+eya
+eyas
+ey
+eyebal
+eyebal
+eyebrow
+eyebrow
+ei
+eyeless
+eyelid
+eyelid
+ey
+eyesight
+eyestr
+ei
+eyn
+eyri
+fa
+fabian
+fabl
+fabl
+fabric
+fabul
+fac
+face
+face
+facer
+face
+faciant
+facil
+facil
+facineri
+face
+facit
+fact
+faction
+factionari
+faction
+factiou
+factor
+factor
+faculti
+faculti
+fade
+fade
+fadeth
+fadg
+fade
+fade
+fadom
+fadom
+fagot
+fagot
+fail
+fail
+fail
+fain
+faint
+faint
+fainter
+faint
+faintli
+faint
+faint
+fair
+fairer
+fairest
+fairi
+fair
+fair
+fairli
+fair
+fair
+fairwel
+fairi
+fai
+fait
+fait
+faith
+faith
+faithful
+faithfulli
+faithless
+faith
+faitor
+fal
+falchion
+falcon
+falconbridg
+falcon
+falcon
+fall
+fallaci
+fallen
+falleth
+falliabl
+fallibl
+fall
+fallow
+fallow
+fall
+falli
+falor
+fals
+falsehood
+fals
+fals
+falser
+falsifi
+fals
+falstaff
+falstaff
+falter
+fam
+fame
+fame
+familiar
+familiar
+familiarli
+familiar
+famili
+famin
+famish
+famish
+famou
+famous
+famous
+fan
+fanat
+fanci
+fanci
+fane
+fane
+fang
+fangl
+fangless
+fang
+fann
+fan
+fan
+fantasi
+fantasi
+fantast
+fantast
+fantast
+fantastico
+fantasi
+fap
+far
+farborough
+farc
+fardel
+fardel
+fare
+fare
+farewel
+farewel
+farin
+fare
+farm
+farmer
+farmhous
+farm
+farr
+farrow
+farther
+farthest
+farth
+farthingal
+farthingal
+farth
+fartuou
+fa
+fashion
+fashion
+fashion
+fashion
+fast
+fast
+fasten
+fasten
+faster
+fastest
+fast
+fastli
+fastolf
+fast
+fat
+fatal
+fatal
+fate
+fate
+fate
+father
+father
+fatherless
+fatherli
+father
+fathom
+fathomless
+fathom
+fatig
+fat
+fat
+fat
+fatter
+fattest
+fat
+fatuu
+fauconbridg
+faulconbridg
+fault
+faulti
+faultless
+fault
+faulti
+fauss
+faust
+faustus
+faut
+favor
+favor
+favor
+favor
+favour
+favour
+favour
+favouredli
+favour
+favour
+favour
+favourit
+favourit
+favour
+favout
+fawn
+fawneth
+fawn
+fawn
+fai
+fe
+fealti
+fear
+fear
+fearest
+fear
+fearful
+fearfulli
+fear
+fear
+fearless
+fear
+feast
+feast
+feast
+feast
+feat
+feat
+feater
+feather
+feather
+feather
+featli
+feat
+featur
+featur
+featur
+featureless
+featur
+februari
+feck
+fed
+fedari
+federari
+fee
+feebl
+feebl
+feebl
+feebl
+feebli
+feed
+feeder
+feeder
+feedeth
+feed
+feed
+feel
+feeler
+feel
+feelingli
+feel
+fee
+feet
+fehement
+feign
+feign
+feign
+feil
+feith
+felicit
+felic
+fell
+fellest
+felli
+fellow
+fellowli
+fellow
+fellowship
+fellowship
+fell
+felon
+feloni
+feloni
+felt
+femal
+femal
+feminin
+fen
+fenc
+fenc
+fencer
+fenc
+fend
+fennel
+fenni
+fen
+fenton
+fer
+ferdinand
+fere
+fernse
+ferrara
+ferrer
+ferret
+ferri
+ferryman
+fertil
+fertil
+fervenc
+fervour
+feri
+fest
+fest
+fester
+festin
+festin
+festiv
+festiv
+fet
+fetch
+fetch
+fetch
+fetlock
+fetlock
+fett
+fetter
+fetter
+fetter
+fettl
+feu
+feud
+fever
+fever
+fever
+few
+fewer
+fewest
+few
+fickl
+fickl
+fico
+fiction
+fiddl
+fiddler
+fiddlestick
+fidel
+fidelicet
+fidel
+fidiu
+fie
+field
+field
+field
+fiend
+fiend
+fierc
+fierc
+fierc
+fieri
+fife
+fife
+fifteen
+fifteen
+fifteenth
+fifth
+fifti
+fiftyfold
+fig
+fight
+fighter
+fightest
+fighteth
+fight
+fight
+figo
+fig
+figur
+figur
+figur
+figur
+figur
+fike
+fil
+filbert
+filch
+filch
+filch
+file
+file
+file
+filial
+filiu
+fill
+fill
+fillet
+fill
+fillip
+fill
+filli
+film
+fil
+filth
+filth
+filthi
+fin
+final
+finch
+find
+finder
+findeth
+find
+find
+find
+fine
+fineless
+fine
+finem
+fine
+finer
+fine
+finest
+fing
+finger
+finger
+finger
+fingr
+fingr
+finic
+finish
+finish
+finish
+finless
+finn
+fin
+finsburi
+fir
+firago
+fire
+firebrand
+firebrand
+fire
+fire
+firework
+firework
+fire
+firk
+firm
+firmament
+firmli
+firm
+first
+firstl
+fish
+fisher
+fishermen
+fisher
+fish
+fishifi
+fishmong
+fishpond
+fisnomi
+fist
+fist
+fist
+fistula
+fit
+fitchew
+fit
+fitli
+fitment
+fit
+fit
+fit
+fitter
+fittest
+fitteth
+fit
+fitzwat
+five
+fivep
+five
+fix
+fix
+fix
+fixeth
+fix
+fixtur
+fl
+flag
+flag
+flagon
+flagon
+flag
+flail
+flake
+flaki
+flam
+flame
+flamen
+flamen
+flame
+flame
+flaminiu
+flander
+flannel
+flap
+flare
+flash
+flash
+flash
+flask
+flat
+flatli
+flat
+flat
+flatt
+flatter
+flatter
+flatter
+flatter
+flatterest
+flatteri
+flatter
+flatter
+flatteri
+flaunt
+flavio
+flaviu
+flaw
+flaw
+flax
+flaxen
+flai
+flai
+flea
+fleanc
+flea
+fleck
+fled
+fledg
+flee
+fleec
+fleec
+fleec
+fleer
+fleer
+fleer
+fleet
+fleeter
+fleet
+fleme
+flemish
+flesh
+flesh
+fleshli
+fleshment
+fleshmong
+flew
+flexibl
+flexur
+flibbertigibbet
+flicker
+flidg
+flier
+fli
+flieth
+flight
+flight
+flighti
+flinch
+fling
+flint
+flint
+flinti
+flirt
+float
+float
+float
+flock
+flock
+flood
+floodgat
+flood
+floor
+flora
+florenc
+florentin
+florentin
+florentiu
+florizel
+flote
+floulish
+flour
+flourish
+flourish
+flourisheth
+flourish
+flout
+flout
+flout
+flout
+flow
+flow
+flower
+floweret
+flower
+flow
+flown
+flow
+fluellen
+fluent
+flung
+flush
+flush
+fluster
+flute
+flute
+flutter
+flux
+fluxiv
+fly
+fly
+fo
+foal
+foal
+foam
+foam
+foam
+foam
+foami
+fob
+foc
+fodder
+foe
+foeman
+foemen
+foe
+fog
+foggi
+fog
+foh
+foi
+foil
+foil
+foil
+foin
+foin
+foin
+foi
+foison
+foison
+foist
+foix
+fold
+fold
+fold
+folio
+folk
+folk
+folli
+follow
+follow
+follow
+follow
+followest
+follow
+follow
+folli
+fond
+fonder
+fondli
+fond
+font
+fontibel
+food
+fool
+fooleri
+fooleri
+foolhardi
+fool
+foolish
+foolishli
+foolish
+fool
+foot
+footbal
+footboi
+footboi
+foot
+footfal
+foot
+footman
+footmen
+footpath
+footstep
+footstool
+fopp
+fop
+fopperi
+foppish
+fop
+for
+forag
+forag
+forbad
+forbear
+forbear
+forbear
+forbid
+forbidden
+forbiddenli
+forbid
+forbod
+forborn
+forc
+forc
+forc
+forc
+forceless
+forc
+forcibl
+forcibl
+forc
+ford
+fordid
+fordo
+fordo
+fordon
+fore
+forecast
+forefath
+forefath
+forefing
+forego
+foregon
+forehand
+forehead
+forehead
+forehors
+foreign
+foreign
+foreign
+foreknow
+foreknowledg
+foremost
+forenam
+forenoon
+forerun
+forerunn
+forerun
+forerun
+foresaid
+foresaw
+foresai
+forese
+forese
+forese
+foreshow
+foreskirt
+foresp
+forest
+forestal
+forestal
+forest
+forest
+forest
+foretel
+foretel
+foretel
+forethink
+forethought
+foretold
+forev
+foreward
+forewarn
+forewarn
+forewarn
+forfeit
+forfeit
+forfeit
+forfeit
+forfeit
+forfeitur
+forfeitur
+forfend
+forfend
+forg
+forgav
+forg
+forg
+forgeri
+forgeri
+forg
+forget
+forget
+forget
+forget
+forget
+forget
+forgiv
+forgiven
+forgiv
+forgo
+forgo
+forgon
+forgot
+forgotten
+fork
+fork
+fork
+forlorn
+form
+formal
+formal
+form
+former
+formerli
+formless
+form
+fornic
+fornic
+fornicatress
+forr
+forrest
+forsak
+forsaken
+forsaketh
+forslow
+forsook
+forsooth
+forspent
+forspok
+forswear
+forswear
+forswor
+forsworn
+fort
+fort
+forth
+forthcom
+forthlight
+forthright
+forthwith
+fortif
+fortif
+fortifi
+fortifi
+fortifi
+fortinbra
+fortitud
+fortnight
+fortress
+fortress
+fort
+fortun
+fortuna
+fortun
+fortun
+fortun
+fortun
+fortun
+fortward
+forti
+forum
+forward
+forward
+forward
+forward
+forweari
+fosset
+fost
+foster
+foster
+fought
+foughten
+foul
+fouler
+foulest
+foulli
+foul
+found
+foundat
+foundat
+found
+founder
+fount
+fountain
+fountain
+fount
+four
+fourscor
+fourteen
+fourth
+foutra
+fowl
+fowler
+fowl
+fowl
+fox
+fox
+foxship
+fract
+fraction
+fraction
+fragil
+fragment
+fragment
+fragrant
+frail
+frailer
+frailti
+frailti
+fram
+frame
+frame
+frame
+frampold
+fran
+francai
+franc
+franc
+franchis
+franchis
+franchis
+franchis
+francia
+franci
+francisca
+franciscan
+francisco
+frank
+franker
+frankfort
+franklin
+franklin
+frankli
+frank
+frantic
+franticli
+frateretto
+fratrum
+fraud
+fraud
+fraught
+fraughtag
+fraught
+frai
+frai
+freckl
+freckl
+freckl
+frederick
+free
+freed
+freedom
+freedom
+freeheart
+freelier
+freeli
+freeman
+freemen
+freeness
+freer
+free
+freeston
+freetown
+freez
+freez
+freez
+freez
+french
+frenchman
+frenchmen
+frenchwoman
+frenzi
+frequent
+frequent
+fresh
+fresher
+fresh
+freshest
+freshli
+fresh
+fret
+fret
+fret
+fret
+fretten
+fret
+friar
+friar
+fridai
+fridai
+friend
+friend
+friend
+friendless
+friendli
+friendli
+friend
+friendship
+friendship
+friez
+fright
+fright
+frighten
+fright
+fright
+fright
+fring
+fring
+fripperi
+frisk
+fritter
+frivol
+fro
+frock
+frog
+frogmor
+froissart
+frolic
+from
+front
+front
+frontier
+frontier
+front
+frontlet
+front
+frost
+frost
+frosti
+froth
+froward
+frown
+frown
+frowningli
+frown
+froze
+frozen
+fructifi
+frugal
+fruit
+fruiter
+fruit
+fruitfulli
+fruit
+fruition
+fruitless
+fruit
+frush
+frustrat
+frutifi
+fry
+fubb
+fuel
+fugit
+fulfil
+fulfil
+fulfil
+fulfil
+full
+fullam
+fuller
+fuller
+fullest
+full
+fulli
+ful
+fulsom
+fulvia
+fum
+fumbl
+fumbl
+fumblest
+fumbl
+fume
+fume
+fume
+fumit
+fumitori
+fun
+function
+function
+fundament
+funer
+funer
+fur
+furbish
+furi
+furiou
+furlong
+furnac
+furnac
+furnish
+furnish
+furnish
+furnitur
+furniv
+furor
+furr
+furrow
+furrow
+furrow
+furth
+further
+further
+further
+furthermor
+furthest
+furi
+furz
+furz
+fust
+fustian
+fustilarian
+fusti
+fut
+futur
+futur
+g
+gabbl
+gaberdin
+gabriel
+gad
+gad
+gad
+gadshil
+gag
+gage
+gage
+gagg
+gage
+gagn
+gain
+gain
+gainer
+gaingiv
+gain
+gainsaid
+gainsai
+gainsai
+gainsai
+gainst
+gait
+gait
+galath
+gale
+galen
+gale
+gall
+gallant
+gallantli
+gallantri
+gallant
+gall
+galleri
+gallei
+gallei
+gallia
+gallian
+galliard
+galliass
+gallimaufri
+gall
+gallon
+gallop
+gallop
+gallop
+gallow
+gallowai
+gallowglass
+gallow
+gallows
+gall
+gallu
+gam
+gambol
+gambold
+gambol
+gamboi
+game
+gamer
+game
+gamesom
+gamest
+game
+gammon
+gamut
+gan
+gangren
+ganymed
+gaol
+gaoler
+gaoler
+gaol
+gap
+gape
+gape
+gape
+gar
+garb
+garbag
+garboil
+garcon
+gard
+gard
+garden
+garden
+garden
+garden
+gardez
+gardin
+gardon
+gargantua
+gargrav
+garish
+garland
+garland
+garlic
+garment
+garment
+garmet
+garner
+garner
+garnish
+garnish
+garret
+garrison
+garrison
+gart
+garter
+garterd
+garter
+garter
+gasconi
+gash
+gash
+gaskin
+gasp
+gasp
+gast
+gast
+gat
+gate
+gate
+gate
+gath
+gather
+gather
+gather
+gather
+gatori
+gatori
+gaud
+gaudeo
+gaudi
+gaug
+gaul
+gaultre
+gaunt
+gauntlet
+gauntlet
+gav
+gave
+gavest
+gawd
+gawd
+gawsei
+gai
+gay
+gaz
+gaze
+gaze
+gazer
+gazer
+gaze
+gazeth
+gaze
+gear
+geck
+gees
+geffrei
+geld
+geld
+geld
+gelida
+gelidu
+gelt
+gem
+gemini
+gem
+gen
+gender
+gender
+gener
+gener
+gener
+gener
+gener
+gener
+generos
+gener
+genit
+genitivo
+geniu
+gennet
+genoa
+genoux
+gen
+gent
+gentilhomm
+gentil
+gentl
+gentlefolk
+gentleman
+gentlemanlik
+gentlemen
+gentl
+gentler
+gentl
+gentlest
+gentlewoman
+gentlewomen
+gentli
+gentri
+georg
+gerard
+germain
+germain
+german
+german
+german
+germani
+gertrud
+gest
+gest
+gestur
+gestur
+get
+getrud
+get
+getter
+get
+ghastli
+ghost
+ghost
+ghostli
+ghost
+gi
+giant
+giantess
+giantlik
+giant
+gib
+gibber
+gibbet
+gibbet
+gibe
+giber
+gibe
+gibe
+gibingli
+giddili
+giddi
+giddi
+gift
+gift
+gig
+giglet
+giglot
+gilbert
+gild
+gild
+gild
+gilliam
+gillian
+gill
+gillyvor
+gilt
+gimmal
+gimmer
+gin
+ging
+ginger
+gingerbread
+gingerli
+ginn
+gin
+gioucestershir
+gipe
+gipsi
+gipsi
+gird
+gird
+girdl
+girdl
+girdl
+girdl
+girl
+girl
+girt
+girth
+gi
+giv
+give
+given
+giver
+giver
+give
+givest
+giveth
+give
+give
+glad
+glad
+glad
+gladli
+glad
+glami
+glanc
+glanc
+glanc
+glanc
+glanc
+glander
+glansdal
+glare
+glare
+glass
+glass
+glassi
+glaz
+glaze
+gleam
+glean
+glean
+glean
+gleeful
+gleek
+gleek
+gleek
+glend
+glendow
+glib
+glide
+glide
+glide
+glideth
+glide
+glimmer
+glimmer
+glimmer
+glimps
+glimps
+glist
+glisten
+glister
+glister
+glister
+glitt
+glitter
+globe
+globe
+gloom
+gloomi
+glori
+glorifi
+glorifi
+gloriou
+glorious
+glori
+glose
+gloss
+gloss
+glou
+gloucest
+gloucest
+gloucestershir
+glove
+glover
+glove
+glow
+glow
+glow
+glowworm
+gloz
+gloze
+gloze
+glu
+glue
+glu
+glue
+glut
+glutt
+glut
+glutton
+glutton
+gluttoni
+gnarl
+gnarl
+gnat
+gnat
+gnaw
+gnaw
+gnawn
+gnaw
+go
+goad
+goad
+goad
+goal
+goat
+goatish
+goat
+gobbet
+gobbo
+goblet
+goblet
+goblin
+goblin
+god
+god
+godden
+goddess
+goddess
+goddild
+godfath
+godfath
+godhead
+godlik
+godli
+godli
+godmoth
+god
+godson
+goer
+goer
+goe
+goest
+goeth
+goff
+gog
+go
+gold
+golden
+goldenli
+goldsmith
+goldsmith
+golgotha
+golias
+goliath
+gon
+gondola
+gondoli
+gone
+goneril
+gong
+gonzago
+gonzalo
+good
+goodfellow
+goodlier
+goodliest
+goodli
+goodman
+good
+goodnight
+goodrig
+good
+goodwif
+goodwil
+goodwin
+goodwin
+goodyear
+goodyear
+goos
+gooseberri
+goosequil
+goot
+gor
+gorbelli
+gorboduc
+gordian
+gore
+gore
+gorg
+gorg
+gorgeou
+gorget
+gorg
+gorgon
+gormand
+gormand
+gori
+gosl
+gospel
+gospel
+goss
+gossam
+gossip
+gossip
+gossiplik
+gossip
+got
+goth
+goth
+gotten
+gourd
+gout
+gout
+gouti
+govern
+govern
+govern
+gover
+govern
+governor
+governor
+govern
+gower
+gown
+gown
+grac
+grace
+grace
+grace
+gracefulli
+graceless
+grace
+grace
+graciou
+gracious
+gradat
+graff
+graf
+graft
+graft
+grafter
+grain
+grain
+grain
+gramerci
+gramerci
+grammar
+grand
+grandam
+grandam
+grandchild
+grand
+grandeur
+grandfath
+grandjuror
+grandmoth
+grandpr
+grandsir
+grandsir
+grandsir
+grang
+grant
+grant
+grant
+grant
+grape
+grape
+grappl
+grappl
+grappl
+grasp
+grasp
+grasp
+grass
+grasshopp
+grassi
+grate
+grate
+grate
+grate
+gratiano
+gratifi
+gratii
+gratil
+grate
+grati
+gratitud
+gratul
+grav
+grave
+gravedigg
+gravel
+graveless
+gravel
+grave
+graven
+grave
+graver
+grave
+gravest
+graveston
+graviti
+graviti
+gravi
+grai
+graymalkin
+graz
+graze
+graze
+graze
+greas
+greas
+greasili
+greasi
+great
+greater
+greatest
+greatli
+great
+grecian
+grecian
+gree
+greec
+greed
+greedili
+greedi
+greedi
+gree
+greek
+greekish
+greek
+green
+greener
+greenli
+green
+greensleev
+greenwich
+greenwood
+greet
+greet
+greet
+greet
+greet
+greg
+gregori
+gremio
+grew
+grei
+greybeard
+greybeard
+greyhound
+greyhound
+grief
+grief
+griev
+grievanc
+grievanc
+griev
+griev
+griev
+grievest
+griev
+grievingli
+grievou
+grievous
+griffin
+griffith
+grim
+grime
+grimli
+grin
+grind
+grind
+grindston
+grin
+grip
+gripe
+gripe
+gripe
+grise
+grisli
+grissel
+grize
+grizzl
+grizzl
+groan
+groan
+groan
+groat
+groat
+groin
+groom
+groom
+grop
+grope
+gro
+gross
+grosser
+grossli
+gross
+ground
+ground
+groundl
+ground
+grove
+grovel
+grovel
+grove
+grow
+groweth
+grow
+grown
+grow
+growth
+grub
+grubb
+grub
+grudg
+grudg
+grudg
+grudg
+gruel
+grumbl
+grumblest
+grumbl
+grumbl
+grumio
+grund
+grunt
+gualtier
+guard
+guardag
+guardant
+guard
+guardian
+guardian
+guard
+guardsman
+gud
+gudgeon
+guerdon
+guerra
+guess
+guess
+guessingli
+guest
+guest
+guiana
+guichard
+guid
+guid
+guider
+guideriu
+guid
+guid
+guidon
+guienn
+guil
+guildenstern
+guilder
+guildford
+guildhal
+guil
+guil
+guil
+guilford
+guilt
+guiltian
+guiltier
+guiltili
+guilti
+guiltless
+guilt
+guilti
+guinea
+guinev
+guis
+gul
+gule
+gulf
+gulf
+gull
+gull
+gum
+gumm
+gum
+gun
+gunner
+gunpowd
+gun
+gurnet
+gurnei
+gust
+gust
+gusti
+gut
+gutter
+gui
+guyn
+guysor
+gypsi
+gyve
+gyve
+gyve
+h
+ha
+haberdash
+habili
+habili
+habit
+habit
+habit
+habit
+habitud
+hack
+hacket
+hacknei
+hack
+had
+hadst
+haec
+haer
+hag
+hagar
+haggard
+haggard
+haggish
+haggl
+hag
+hail
+hail
+hailston
+hailston
+hair
+hairless
+hair
+hairi
+hal
+halberd
+halberd
+halcyon
+hale
+hale
+hale
+half
+halfcan
+halfpenc
+halfpenni
+halfpennyworth
+halfwai
+halidom
+hall
+halloa
+hallo
+hallond
+halloo
+halloo
+hallow
+hallow
+hallowma
+hallown
+hal
+halt
+halter
+halter
+halt
+halt
+halv
+ham
+hame
+hamlet
+hammer
+hammer
+hammer
+hammer
+hamper
+hampton
+ham
+hamstr
+hand
+hand
+hand
+handicraft
+handicraftsmen
+hand
+handiwork
+handkerch
+handkerch
+handkerchief
+handl
+handl
+handl
+handless
+handlest
+handl
+handmaid
+handmaid
+hand
+handsaw
+handsom
+handsom
+handsom
+handwrit
+handi
+hang
+hang
+hanger
+hangeth
+hang
+hang
+hangman
+hangmen
+hang
+hannib
+hap
+hapless
+hapli
+happ
+happen
+happen
+happier
+happi
+happiest
+happili
+happi
+happi
+hap
+harbing
+harbing
+harbor
+harbour
+harbourag
+harbour
+harbour
+harcourt
+hard
+harder
+hardest
+hardiest
+hardiment
+hardi
+hardli
+hard
+hardock
+hardi
+hare
+harelip
+hare
+harfleur
+hark
+harlot
+harlotri
+harlot
+harm
+harm
+harm
+harm
+harmless
+harmoni
+harmoni
+harm
+har
+harp
+harper
+harpier
+harp
+harpi
+harri
+harrow
+harrow
+harri
+harsh
+harshli
+harsh
+hart
+hart
+harum
+harvest
+ha
+hast
+hast
+hast
+hasten
+hast
+hastili
+hast
+hast
+hasti
+hat
+hatch
+hatch
+hatchet
+hatch
+hatchment
+hate
+hate
+hate
+hater
+hater
+hate
+hateth
+hatfield
+hath
+hate
+hatr
+hat
+haud
+hauf
+haught
+haughti
+haughti
+haunch
+haunch
+haunt
+haunt
+haunt
+haunt
+hautboi
+hautboi
+have
+haven
+haven
+haver
+have
+have
+havior
+haviour
+havoc
+hawk
+hawk
+hawk
+hawthorn
+hawthorn
+hai
+hazard
+hazard
+hazard
+hazel
+hazelnut
+he
+head
+headborough
+head
+headier
+head
+headland
+headless
+headlong
+head
+headsman
+headstrong
+headi
+heal
+heal
+heal
+heal
+health
+health
+health
+healthsom
+healthi
+heap
+heap
+heap
+hear
+heard
+hearer
+hearer
+hearest
+heareth
+hear
+hear
+heark
+hearken
+hearken
+hear
+hearsai
+hears
+hears
+hearst
+heart
+heartach
+heartbreak
+heartbreak
+heart
+hearten
+hearth
+hearth
+heartili
+hearti
+heartless
+heartl
+heartli
+heart
+heartsick
+heartstr
+hearti
+heat
+heat
+heath
+heathen
+heathenish
+heat
+heat
+heauti
+heav
+heav
+heav
+heaven
+heavenli
+heaven
+heav
+heavier
+heaviest
+heavili
+heavi
+heav
+heav
+heavi
+hebona
+hebrew
+hecat
+hectic
+hector
+hector
+hecuba
+hedg
+hedg
+hedgehog
+hedgehog
+hedg
+heed
+heed
+heed
+heedful
+heedfulli
+heedless
+heel
+heel
+heft
+heft
+heifer
+heifer
+heigh
+height
+heighten
+heinou
+heinous
+heir
+heiress
+heirless
+heir
+held
+helen
+helena
+helenu
+helia
+helicon
+hell
+hellespont
+hellfir
+hellish
+helm
+helm
+helmet
+helmet
+helm
+help
+helper
+helper
+help
+help
+helpless
+help
+helter
+hem
+heme
+hemlock
+hemm
+hemp
+hempen
+hem
+hen
+henc
+henceforth
+henceforward
+henchman
+henri
+henricu
+henri
+hen
+hent
+henton
+her
+herald
+heraldri
+herald
+herb
+herbert
+herblet
+herb
+herculean
+hercul
+herd
+herd
+herdsman
+herdsmen
+here
+hereabout
+hereabout
+hereaft
+herebi
+hereditari
+hereford
+herefordshir
+herein
+hereof
+heresi
+heresi
+heret
+heret
+hereto
+hereupon
+heritag
+heriti
+herm
+hermia
+hermion
+hermit
+hermitag
+hermit
+hern
+hero
+herod
+herod
+hero
+heroic
+heroic
+her
+her
+her
+herself
+hesperid
+hesperu
+hest
+hest
+heur
+heureux
+hew
+hewgh
+hew
+hewn
+hew
+hei
+heydai
+hibocr
+hic
+hiccup
+hick
+hid
+hidden
+hide
+hideou
+hideous
+hideous
+hide
+hidest
+hide
+hie
+hi
+hiem
+hi
+hig
+high
+higher
+highest
+highli
+highmost
+high
+hight
+highwai
+highwai
+hild
+hild
+hill
+hillo
+hilloa
+hill
+hilt
+hilt
+hili
+him
+himself
+hinc
+hincklei
+hind
+hinder
+hinder
+hinder
+hindmost
+hind
+hing
+hing
+hing
+hint
+hip
+hipp
+hipparchu
+hippolyta
+hip
+hir
+hire
+hire
+hiren
+hirtiu
+hi
+hisperia
+hiss
+hiss
+hiss
+hist
+histor
+histori
+hit
+hither
+hitherto
+hitherward
+hitherward
+hit
+hit
+hive
+hive
+hizz
+ho
+hoa
+hoar
+hoard
+hoard
+hoard
+hoar
+hoars
+hoari
+hob
+hobbidid
+hobbi
+hobbyhors
+hobgoblin
+hobnail
+hoc
+hod
+hodg
+hog
+hog
+hogshead
+hogshead
+hoi
+hois
+hoist
+hoist
+hoist
+holborn
+hold
+holden
+holder
+holdeth
+holdfast
+hold
+hold
+hole
+hole
+holidam
+holidam
+holidai
+holidai
+holier
+holiest
+holili
+holi
+holla
+holland
+holland
+holland
+holloa
+holloa
+hollow
+hollowli
+hollow
+holli
+holmedon
+holofern
+holp
+holi
+homag
+homag
+home
+home
+home
+homespun
+homeward
+homeward
+homicid
+homicid
+homili
+hominem
+homm
+homo
+honest
+honest
+honestest
+honestli
+honesti
+honei
+honeycomb
+honei
+honeyless
+honeysuckl
+honeysuckl
+honi
+honneur
+honor
+honor
+honor
+honorato
+honorificabilitudinitatibu
+honor
+honour
+honour
+honour
+honour
+honourest
+honour
+honour
+honour
+hoo
+hood
+hood
+hoodman
+hood
+hoodwink
+hoof
+hoof
+hook
+hook
+hook
+hoop
+hoop
+hoot
+hoot
+hoot
+hoot
+hop
+hope
+hope
+hopeless
+hope
+hopest
+hope
+hopkin
+hopped
+hor
+horac
+horatio
+horizon
+horn
+hornbook
+horn
+horner
+horn
+hornpip
+horn
+horolog
+horribl
+horribl
+horrid
+horrid
+horridli
+horror
+horror
+hor
+hors
+horseback
+hors
+horsehair
+horseman
+horsemanship
+horsemen
+hors
+horsewai
+hors
+hortensio
+hortensiu
+horum
+hose
+hospit
+hospit
+hospit
+host
+hostag
+hostag
+hostess
+hostil
+hostil
+hostiliu
+host
+hot
+hotli
+hotspur
+hotter
+hottest
+hound
+hound
+hour
+hourli
+hour
+hou
+hous
+household
+household
+household
+household
+housekeep
+housekeep
+housekeep
+houseless
+hous
+housewif
+housewiferi
+housew
+hovel
+hover
+hover
+hover
+hover
+how
+howbeit
+how
+howeer
+howev
+howl
+howl
+howlet
+howl
+howl
+howso
+howsoev
+howsom
+hox
+hoi
+hoydai
+hubert
+huddl
+huddl
+hue
+hu
+hue
+hug
+huge
+huge
+huge
+hugg
+hugger
+hugh
+hug
+huju
+hulk
+hulk
+hull
+hull
+hullo
+hum
+human
+human
+human
+human
+humbl
+humbl
+humbl
+humbler
+humbl
+humblest
+humbl
+humbl
+hume
+humh
+humid
+humil
+hum
+humor
+humor
+humor
+humour
+humourist
+humour
+humphrei
+humphri
+hum
+hundr
+hundr
+hundredth
+hung
+hungarian
+hungari
+hunger
+hungerford
+hungerli
+hungri
+hunt
+hunt
+hunter
+hunter
+hunteth
+hunt
+huntington
+huntress
+hunt
+huntsman
+huntsmen
+hurdl
+hurl
+hurl
+hurl
+hurli
+hurlyburli
+hurricano
+hurricano
+hurri
+hurri
+hurri
+hurt
+hurt
+hurtl
+hurtless
+hurtl
+hurt
+husband
+husband
+husbandless
+husbandri
+husband
+hush
+hush
+husht
+husk
+huswif
+huswif
+hutch
+hybla
+hydra
+hyen
+hymen
+hymenaeu
+hymn
+hymn
+hyperbol
+hyperbol
+hyperion
+hypocrisi
+hypocrit
+hypocrit
+hyrcan
+hyrcania
+hyrcanian
+hyssop
+hysterica
+i
+iachimo
+iaculi
+iago
+iament
+ibat
+icaru
+ic
+iceland
+ici
+icicl
+icicl
+ici
+idea
+idea
+idem
+iden
+id
+idiot
+idiot
+idl
+idl
+idl
+idli
+idol
+idolatr
+idolatri
+ield
+if
+if
+igni
+ignobl
+ignobl
+ignomini
+ignomini
+ignomi
+ignor
+ignor
+ii
+iii
+iiii
+il
+ilbow
+ild
+ilion
+ilium
+ill
+illegitim
+illiter
+ill
+illo
+ill
+illum
+illumin
+illumin
+illumineth
+illus
+illus
+illustr
+illustr
+illustri
+illyria
+illyrian
+il
+im
+imag
+imageri
+imag
+imagin
+imaginari
+imagin
+imagin
+imagin
+imagin
+imagin
+imbar
+imbecil
+imbru
+imitari
+imit
+imit
+imit
+imit
+immacul
+imman
+immask
+immateri
+immediaci
+immedi
+immedi
+immin
+immin
+immoder
+immoder
+immodest
+immoment
+immort
+immortaliz
+immort
+immur
+immur
+immur
+imogen
+imp
+impaint
+impair
+impair
+impal
+impal
+impanel
+impart
+impart
+imparti
+impart
+impart
+impast
+impati
+impati
+impati
+impawn
+impeach
+impeach
+impeach
+impeach
+imped
+impedi
+impedi
+impenetr
+imper
+imperceiver
+imperfect
+imperfect
+imperfect
+imperfectli
+imperi
+imperi
+imperi
+impertin
+impertin
+impetico
+impetuos
+impetu
+impieti
+impieti
+impiou
+implac
+implement
+impli
+implor
+implor
+implor
+implor
+implor
+impon
+import
+import
+import
+import
+importantli
+import
+importeth
+import
+importless
+import
+importun
+importunaci
+importun
+importun
+importun
+importun
+impo
+impos
+impos
+imposit
+imposit
+imposs
+imposs
+imposs
+imposthum
+impostor
+impostor
+impot
+impot
+impound
+impregn
+impres
+impress
+impress
+impressest
+impress
+impressur
+imprimendum
+imprimi
+imprint
+imprint
+imprison
+imprison
+imprison
+imprison
+improb
+improp
+improv
+improvid
+impud
+impud
+impud
+impud
+impudiqu
+impugn
+impugn
+impur
+imput
+imput
+in
+inaccess
+inaid
+inaud
+inauspici
+incag
+incant
+incap
+incardin
+incarnadin
+incarn
+incarn
+incen
+incens
+incens
+incens
+incens
+incens
+incertain
+incertainti
+incertainti
+incess
+incessantli
+incest
+incestu
+inch
+incharit
+inch
+incid
+incid
+incis
+incit
+incit
+incivil
+incivil
+inclin
+inclin
+inclin
+inclin
+inclin
+inclin
+inclin
+inclip
+includ
+includ
+includ
+inclus
+incompar
+incomprehens
+inconsider
+inconst
+inconst
+incontin
+incontin
+incontin
+inconveni
+inconveni
+inconveni
+inconi
+incorpor
+incorp
+incorrect
+increa
+increas
+increas
+increaseth
+increas
+incred
+incredul
+incur
+incur
+incurr
+incur
+incurs
+ind
+ind
+indebt
+inde
+indent
+indent
+indentur
+indentur
+index
+index
+india
+indian
+indict
+indict
+indict
+indi
+indiffer
+indiffer
+indiffer
+indig
+indigest
+indigest
+indign
+indign
+indign
+indign
+indign
+indign
+indirect
+indirect
+indirect
+indirectli
+indiscreet
+indiscret
+indispo
+indisposit
+indissolubl
+indistinct
+indistinguish
+indistinguish
+indit
+individ
+indrench
+indu
+indubit
+induc
+induc
+induc
+induc
+induct
+induct
+indu
+indu
+indu
+indulg
+indulg
+indulg
+indur
+industri
+industri
+industri
+inequ
+inestim
+inevit
+inexecr
+inexor
+inexplic
+infal
+infal
+infamon
+infam
+infami
+infanc
+infant
+infant
+infect
+infect
+infect
+infect
+infect
+infecti
+infecti
+infect
+infer
+infer
+inferior
+inferior
+infern
+inferr
+inferreth
+infer
+infest
+infidel
+infidel
+infinit
+infinit
+infinit
+infirm
+infirm
+infirm
+infix
+infix
+inflam
+inflam
+inflam
+inflamm
+inflict
+inflict
+influenc
+influenc
+infold
+inform
+inform
+inform
+inform
+inform
+inform
+inform
+infortun
+infr
+infring
+infring
+infu
+infus
+infus
+infus
+infus
+ingen
+ingeni
+ingeni
+inglori
+ingot
+ingraf
+ingraft
+ingrat
+ingrat
+ingrat
+ingratitud
+ingratitud
+ingredi
+ingredi
+ingross
+inhabit
+inhabit
+inhabit
+inhabit
+inhabit
+inhears
+inhears
+inher
+inherit
+inherit
+inherit
+inherit
+inheritor
+inheritor
+inheritrix
+inherit
+inhibit
+inhibit
+inhoop
+inhuman
+iniqu
+iniqu
+initi
+injoint
+injunct
+injunct
+injur
+injur
+injur
+injuri
+injuri
+injuri
+injustic
+ink
+inkhorn
+inkl
+inkl
+inkl
+inki
+inlaid
+inland
+inlai
+inli
+inmost
+inn
+inner
+innkeep
+innoc
+innoc
+innoc
+innoc
+innov
+innov
+inn
+innumer
+inocul
+inordin
+inprimi
+inquir
+inquir
+inquiri
+inquisit
+inquisit
+inroad
+insan
+insani
+insati
+insconc
+inscrib
+inscript
+inscript
+inscrol
+inscrut
+insculp
+insculptur
+insens
+insepar
+insepar
+insert
+insert
+inset
+inshel
+inshipp
+insid
+insinew
+insinu
+insinuateth
+insinu
+insinu
+insist
+insist
+insistur
+insoci
+insol
+insol
+insomuch
+inspir
+inspir
+inspir
+inspir
+inspir
+instal
+instal
+instal
+instanc
+instanc
+instant
+instantli
+instat
+instead
+insteep
+instig
+instig
+instig
+instig
+instig
+instinct
+instinct
+institut
+institut
+instruct
+instruct
+instruct
+instruct
+instruct
+instrument
+instrument
+instrument
+insubstanti
+insuffici
+insuffici
+insult
+insult
+insult
+insult
+insult
+insupport
+insuppress
+insurrect
+insurrect
+int
+integ
+integrita
+integr
+intellect
+intellect
+intellectu
+intellig
+intelligenc
+intelligenc
+intellig
+intelligi
+intelligo
+intemper
+intemper
+intend
+intend
+intendeth
+intend
+intend
+intend
+inten
+intent
+intent
+intent
+intent
+inter
+intercept
+intercept
+intercept
+intercept
+intercept
+intercess
+intercessor
+interchain
+interchang
+interchang
+interchang
+interchang
+interchang
+interdict
+interest
+interim
+interim
+interior
+interject
+interjoin
+interlud
+intermingl
+intermiss
+intermiss
+intermit
+intermix
+intermix
+interpos
+interpos
+interpos
+interpret
+interpret
+interpret
+interpret
+interpret
+interpret
+interr
+inter
+interrogatori
+interrupt
+interrupt
+interrupt
+interruptest
+interrupt
+interrupt
+intertissu
+intervallum
+interview
+intest
+intestin
+intil
+intim
+intim
+intitl
+intitul
+into
+intoler
+intox
+intreasur
+intreat
+intrench
+intrench
+intric
+intrins
+intrins
+intrud
+intrud
+intrud
+intrus
+inund
+inur
+inurn
+invad
+invad
+invas
+invas
+invect
+invect
+inveigl
+invent
+invent
+invent
+invent
+inventor
+inventori
+inventori
+inventor
+inventori
+inver
+invert
+invest
+invest
+invest
+invest
+inveter
+invinc
+inviol
+invis
+invis
+invit
+invit
+invit
+invit
+invit
+inviti
+invoc
+invoc
+invok
+invok
+invulner
+inward
+inwardli
+inward
+inward
+ionia
+ionian
+ips
+ipswich
+ira
+ira
+ira
+ir
+ir
+ireland
+iri
+irish
+irishman
+irishmen
+irk
+irksom
+iron
+iron
+irreconcil
+irrecover
+irregular
+irregul
+irreligi
+irremov
+irrepar
+irresolut
+irrevoc
+is
+isabel
+isabella
+isbel
+isbel
+iscariot
+is
+ish
+isidor
+isi
+island
+island
+island
+island
+isl
+isl
+israel
+issu
+issu
+issu
+issueless
+issu
+issu
+ist
+ista
+it
+italian
+itali
+itch
+itch
+itch
+item
+item
+iter
+ithaca
+it
+itself
+itshal
+iv
+ivori
+ivi
+iwi
+ix
+j
+jacet
+jack
+jackanap
+jack
+jacksauc
+jackslav
+jacob
+jade
+jade
+jade
+jail
+jake
+jamani
+jame
+jami
+jane
+jangl
+jangl
+januari
+janu
+japhet
+jaquenetta
+jaqu
+jar
+jar
+jar
+jarteer
+jason
+jaunc
+jaunc
+jaundic
+jaundi
+jaw
+jawbon
+jaw
+jai
+jai
+jc
+je
+jealou
+jealousi
+jealousi
+jeer
+jeer
+jelli
+jenni
+jeopardi
+jephtha
+jephthah
+jerkin
+jerkin
+jerk
+jeronimi
+jerusalem
+jeshu
+jess
+jessica
+jest
+jest
+jester
+jester
+jest
+jest
+jesu
+jesu
+jet
+jet
+jew
+jewel
+jewel
+jewel
+jewess
+jewish
+jewri
+jew
+jezebel
+jig
+jig
+jill
+jill
+jingl
+joan
+job
+jockei
+jocund
+jog
+jog
+john
+john
+join
+joinder
+join
+joiner
+joineth
+join
+joint
+joint
+joint
+jointli
+jointress
+joint
+jointur
+jolliti
+jolli
+jolt
+jolthead
+jordan
+joseph
+joshua
+jot
+jour
+jourdain
+journal
+journei
+journei
+journeyman
+journeymen
+journei
+jove
+jovem
+jovial
+jowl
+jowl
+joi
+joi
+joy
+joyfulli
+joyless
+joyou
+joi
+juan
+jud
+juda
+judas
+jude
+judg
+judg
+judg
+judgement
+judg
+judgest
+judg
+judgment
+judgment
+judici
+jug
+juggl
+juggl
+juggler
+juggler
+juggl
+jug
+juic
+juic
+jul
+jule
+julia
+juliet
+julietta
+julio
+juliu
+juli
+jump
+jumpeth
+jump
+jump
+june
+june
+junior
+juniu
+junket
+juno
+jupit
+jure
+jurement
+jurisdict
+juror
+juror
+juri
+jurymen
+just
+justeiu
+justest
+justic
+justic
+justic
+justic
+justif
+justifi
+justifi
+justl
+justl
+justl
+justl
+justli
+just
+just
+jut
+jutti
+juven
+kam
+kate
+kate
+kate
+katharin
+katherina
+katherin
+kecksi
+keech
+keel
+keel
+keen
+keen
+keep
+keepdown
+keeper
+keeper
+keepest
+keep
+keep
+keiser
+ken
+kendal
+kennel
+kent
+kentish
+kentishman
+kentishmen
+kept
+kerchief
+kere
+kern
+kernal
+kernel
+kernel
+kern
+kersei
+kettl
+kettledrum
+kettledrum
+kei
+kei
+kibe
+kibe
+kick
+kick
+kickshaw
+kickshaws
+kicki
+kid
+kidnei
+kike
+kildar
+kill
+kill
+killer
+killeth
+kill
+killingworth
+kill
+kiln
+kimbolton
+kin
+kind
+kinder
+kindest
+kindl
+kindl
+kindless
+kindlier
+kindl
+kindli
+kind
+kind
+kindr
+kindr
+kind
+kine
+king
+kingdom
+kingdom
+kingli
+king
+kinr
+kin
+kinsman
+kinsmen
+kinswoman
+kirtl
+kirtl
+kiss
+kiss
+kiss
+kiss
+kitchen
+kitchen
+kite
+kite
+kitten
+kj
+kl
+klll
+knack
+knack
+knapp
+knav
+knave
+knaveri
+knaveri
+knave
+knavish
+knead
+knead
+knead
+knee
+kneel
+kneel
+kneel
+knee
+knell
+knew
+knewest
+knife
+knight
+knight
+knighthood
+knighthood
+knightli
+knight
+knit
+knit
+knitter
+knitteth
+knive
+knob
+knock
+knock
+knock
+knog
+knoll
+knot
+knot
+knot
+knotti
+know
+knower
+knowest
+know
+knowingli
+know
+knowledg
+known
+know
+l
+la
+laban
+label
+label
+labienu
+labio
+labor
+labor
+labor
+labour
+labour
+labour
+labour
+labour
+labour
+laboursom
+labra
+labyrinth
+lac
+lace
+lace
+lacedaemon
+lace
+laci
+lack
+lackbeard
+lack
+lackei
+lackei
+lackei
+lack
+lack
+lad
+ladder
+ladder
+lade
+laden
+ladi
+lade
+lad
+ladi
+ladybird
+ladyship
+ladyship
+laer
+laert
+lafeu
+lag
+lag
+laid
+lain
+laissez
+lake
+lake
+lakin
+lam
+lamb
+lambert
+lambkin
+lambkin
+lamb
+lame
+lame
+lame
+lament
+lament
+lament
+lament
+lament
+lament
+lament
+lament
+lament
+lame
+lame
+lamma
+lammastid
+lamound
+lamp
+lampass
+lamp
+lanc
+lancast
+lanc
+lanc
+lanceth
+lanch
+land
+land
+land
+landless
+landlord
+landmen
+land
+lane
+lane
+langag
+langlei
+langton
+languag
+languageless
+languag
+langu
+languish
+languish
+languish
+languish
+languish
+languish
+languor
+lank
+lantern
+lantern
+lanthorn
+lap
+lapi
+lapland
+lapp
+lap
+laps
+laps
+laps
+lapw
+laquai
+lard
+larder
+lard
+lard
+larg
+larg
+larg
+larger
+largess
+largest
+lark
+lark
+larron
+lartiu
+larum
+larum
+la
+lascivi
+lash
+lass
+lass
+last
+last
+last
+lastli
+last
+latch
+latch
+late
+late
+late
+later
+latest
+lath
+latin
+latten
+latter
+lattic
+laud
+laudabl
+laudi
+laugh
+laughabl
+laugh
+laugher
+laughest
+laugh
+laugh
+laughter
+launc
+launcelot
+launc
+launch
+laund
+laundress
+laundri
+laur
+laura
+laurel
+laurel
+laurenc
+lau
+lavach
+lave
+lave
+lavend
+lavina
+lavinia
+lavish
+lavishli
+lavolt
+lavolta
+law
+law
+lawfulli
+lawless
+lawlessli
+lawn
+lawn
+lawrenc
+law
+lawyer
+lawyer
+lai
+layer
+layest
+lai
+lai
+lazar
+lazar
+lazaru
+lazi
+lc
+ld
+ldst
+le
+lead
+leaden
+leader
+leader
+leadest
+lead
+lead
+leaf
+leagu
+leagu
+leagu
+leaguer
+leagu
+leah
+leak
+leaki
+lean
+leander
+leaner
+lean
+lean
+lean
+leap
+leap
+leap
+leap
+leapt
+lear
+learn
+learn
+learnedli
+learn
+learn
+learn
+learnt
+lea
+leas
+leas
+leash
+leas
+least
+leather
+leathern
+leav
+leav
+leaven
+leaven
+leaver
+leav
+leav
+leavi
+lecher
+lecher
+lecher
+lecheri
+lecon
+lectur
+lectur
+led
+leda
+leech
+leech
+leek
+leek
+leer
+leer
+lee
+lees
+leet
+leet
+left
+leg
+legaci
+legaci
+legat
+legatin
+lege
+leger
+lege
+legg
+legion
+legion
+legitim
+legitim
+leg
+leicest
+leicestershir
+leiger
+leiger
+leisur
+leisur
+leisur
+leman
+lemon
+lena
+lend
+lender
+lend
+lend
+lend
+length
+lengthen
+lengthen
+length
+leniti
+lennox
+lent
+lenten
+lentu
+leo
+leon
+leonardo
+leonati
+leonato
+leonatu
+leont
+leopard
+leopard
+leper
+leper
+lepidu
+leprosi
+lequel
+ler
+le
+less
+lessen
+lessen
+lesser
+lesson
+lesson
+lesson
+lest
+lestrak
+let
+lethargi
+lethargi
+lethargi
+leth
+let
+lett
+letter
+letter
+let
+lettuc
+leur
+leve
+level
+level
+level
+level
+leven
+lever
+leviathan
+leviathan
+levi
+levi
+leviti
+levi
+levi
+lewd
+lewdli
+lewd
+lewdster
+lewi
+liabl
+liar
+liar
+libbard
+libel
+libel
+liber
+liber
+libert
+liberti
+libertin
+libertin
+liberti
+librari
+libya
+licenc
+licen
+licens
+licenti
+licha
+licio
+lick
+lick
+licker
+lictor
+lid
+lid
+lie
+li
+lief
+liefest
+lieg
+liegeman
+liegemen
+lien
+li
+liest
+lieth
+lieu
+lieuten
+lieutenantri
+lieuten
+liev
+life
+lifeblood
+lifeless
+lifel
+lift
+lift
+lifter
+lifteth
+lift
+lift
+lig
+ligariu
+liggen
+light
+light
+lighten
+lighten
+lighter
+lightest
+lightli
+light
+lightn
+lightn
+light
+lik
+like
+like
+likeliest
+likelihood
+likelihood
+like
+like
+liker
+like
+likest
+likewis
+like
+like
+lili
+lili
+lim
+limand
+limb
+limbeck
+limbeck
+limber
+limbo
+limb
+lime
+lime
+limehous
+limekiln
+limit
+limit
+limit
+limit
+limn
+limp
+limp
+limp
+lin
+lincoln
+lincolnshir
+line
+lineal
+lineal
+lineament
+lineament
+line
+linen
+linen
+line
+ling
+lingar
+linger
+linger
+linger
+linguist
+line
+link
+link
+linsei
+linstock
+linta
+lion
+lionel
+lioness
+lion
+lip
+lipp
+lip
+lipsburi
+liquid
+liquor
+liquorish
+liquor
+lirra
+lisbon
+lisp
+lisp
+list
+listen
+listen
+list
+literatur
+lither
+litter
+littl
+littlest
+liv
+live
+live
+liveli
+livelihood
+livelong
+live
+liver
+liveri
+liver
+liveri
+live
+livest
+liveth
+livia
+live
+live
+lizard
+lizard
+ll
+lll
+llou
+lnd
+lo
+loa
+loach
+load
+loaden
+load
+load
+loaf
+loam
+loan
+loath
+loath
+loath
+loather
+loath
+loath
+loathli
+loath
+loathsom
+loathsom
+loathsomest
+loav
+lob
+lobbi
+lobbi
+local
+lochab
+lock
+lock
+lock
+lockram
+lock
+locust
+lode
+lodg
+lodg
+lodg
+lodger
+lodg
+lodg
+lodg
+lodovico
+lodowick
+lofti
+log
+logger
+loggerhead
+loggerhead
+logget
+logic
+log
+loin
+loiter
+loiter
+loiter
+loiter
+loll
+loll
+lombardi
+london
+london
+lone
+loneli
+lone
+long
+longavil
+longboat
+long
+longer
+longest
+longeth
+long
+long
+longli
+long
+longtail
+loo
+loof
+look
+look
+looker
+looker
+lookest
+look
+look
+loon
+loop
+loo
+loos
+loos
+loos
+loosen
+loos
+lop
+lopp
+loquitur
+lord
+lord
+lord
+lord
+lordli
+lordli
+lord
+lordship
+lordship
+lorenzo
+lorn
+lorrain
+lorship
+lo
+lose
+loser
+loser
+lose
+losest
+loseth
+lose
+loss
+loss
+lost
+lot
+lot
+lott
+lotteri
+loud
+louder
+loudli
+lour
+loureth
+lour
+lous
+lous
+lousi
+lout
+lout
+lout
+louvr
+lov
+love
+love
+lovedst
+lovel
+loveli
+loveli
+lovel
+love
+lover
+lover
+lover
+love
+lovest
+loveth
+love
+lovingli
+low
+low
+lower
+lowest
+low
+lowli
+lowli
+lown
+low
+loyal
+loyal
+loyalti
+loyalti
+lozel
+lt
+lubber
+lubberli
+luc
+luccico
+luce
+lucentio
+luce
+lucetta
+luciana
+lucianu
+lucif
+lucifi
+luciliu
+lucina
+lucio
+luciu
+luck
+luckier
+luckiest
+luckili
+luckless
+lucki
+lucr
+lucrec
+lucretia
+luculliu
+lucullu
+luci
+lud
+ludlow
+lug
+lugg
+luggag
+luke
+lukewarm
+lull
+lulla
+lullabi
+lull
+lumbert
+lump
+lumpish
+luna
+lunaci
+lunaci
+lunat
+lunat
+lune
+lung
+luperc
+lurch
+lure
+lurk
+lurketh
+lurk
+lurk
+lusciou
+lush
+lust
+lust
+luster
+lust
+lustier
+lustiest
+lustig
+lustihood
+lustili
+lustr
+lustrou
+lust
+lusti
+lute
+lute
+lutestr
+lutheran
+luxuri
+luxuri
+luxuri
+ly
+lycaonia
+lycurgus
+lydia
+lye
+lyen
+ly
+lym
+lymog
+lynn
+lysand
+m
+ma
+maan
+mab
+macbeth
+maccabaeu
+macdonwald
+macduff
+mace
+macedon
+mace
+machiavel
+machin
+machin
+machin
+mack
+macmorri
+macul
+macul
+mad
+madam
+madam
+madam
+madcap
+mad
+mad
+made
+madeira
+madli
+madman
+madmen
+mad
+madonna
+madrig
+mad
+maecena
+maggot
+maggot
+magic
+magic
+magician
+magistr
+magistr
+magnanim
+magnanim
+magni
+magnifi
+magnific
+magnific
+magnifico
+magnifico
+magnu
+mahomet
+mahu
+maid
+maiden
+maidenhead
+maidenhead
+maidenhood
+maidenhood
+maidenliest
+maidenli
+maiden
+maidhood
+maid
+mail
+mail
+mail
+maim
+maim
+maim
+main
+maincours
+main
+mainli
+mainmast
+main
+maintain
+maintain
+maintain
+mainten
+mai
+maison
+majesta
+majeste
+majest
+majest
+majest
+majesti
+majesti
+major
+major
+mak
+make
+makeless
+maker
+maker
+make
+makest
+maketh
+make
+make
+mal
+mala
+maladi
+maladi
+malapert
+malcolm
+malcont
+malcont
+male
+maledict
+malefact
+malefactor
+malefactor
+male
+malevol
+malevol
+malhecho
+malic
+malici
+malici
+malign
+malign
+malign
+malignantli
+malkin
+mall
+mallard
+mallet
+mallow
+malmsei
+malt
+maltworm
+malvolio
+mamilliu
+mammer
+mammet
+mammet
+mammock
+man
+manacl
+manacl
+manag
+manag
+manag
+manag
+manakin
+manchu
+mandat
+mandragora
+mandrak
+mandrak
+mane
+manent
+mane
+manet
+manfulli
+mangl
+mangl
+mangl
+mangl
+mangi
+manhood
+manhood
+manifest
+manifest
+manifest
+manifold
+manifoldli
+manka
+mankind
+manlik
+manli
+mann
+manna
+manner
+mannerli
+manner
+manningtre
+mannish
+manor
+manor
+man
+mansion
+mansionri
+mansion
+manslaught
+mantl
+mantl
+mantl
+mantua
+mantuan
+manual
+manur
+manur
+manu
+mani
+map
+mapp
+map
+mar
+marbl
+marbl
+marcad
+marcellu
+march
+march
+marcheth
+march
+marchio
+marchpan
+marcian
+marciu
+marcu
+mardian
+mare
+mare
+marg
+margarelon
+margaret
+marg
+margent
+margeri
+maria
+marian
+mariana
+mari
+marigold
+marin
+marin
+maritim
+marjoram
+mark
+mark
+market
+market
+marketplac
+market
+mark
+markman
+mark
+marl
+marl
+marmoset
+marquess
+marqui
+marr
+marriag
+marriag
+marri
+marri
+mar
+marrow
+marrowless
+marrow
+marri
+marri
+mar
+marseil
+marsh
+marshal
+marshalsea
+marshalship
+mart
+mart
+martem
+martext
+martial
+martin
+martino
+martiu
+martlema
+martlet
+mart
+martyr
+martyr
+marullu
+marv
+marvel
+marvel
+marvel
+marvel
+marvel
+mari
+ma
+masculin
+masham
+mask
+mask
+masker
+masker
+mask
+mask
+mason
+masonri
+mason
+masqu
+masquer
+masqu
+masqu
+mass
+massacr
+massacr
+mass
+massi
+mast
+mastcr
+master
+masterdom
+masterest
+masterless
+masterli
+masterpiec
+master
+mastership
+mastic
+mastiff
+mastiff
+mast
+match
+match
+matcheth
+match
+matchless
+mate
+mate
+mater
+materi
+mate
+mathemat
+matin
+matron
+matron
+matter
+matter
+matthew
+mattock
+mattress
+matur
+matur
+maud
+maudlin
+maugr
+maul
+maund
+mauri
+mauritania
+mauvai
+maw
+maw
+maxim
+mai
+maydai
+mayest
+mayor
+maypol
+mayst
+maz
+maze
+maze
+maze
+mazzard
+me
+meacock
+mead
+meadow
+meadow
+mead
+meagr
+meal
+meal
+meali
+mean
+meander
+meaner
+meanest
+meaneth
+mean
+mean
+meanli
+mean
+meant
+meantim
+meanwhil
+measl
+measur
+measur
+measur
+measur
+measureless
+measur
+measur
+meat
+meat
+mechan
+mechan
+mechan
+mechan
+mechant
+med
+medal
+meddl
+meddler
+meddl
+mede
+medea
+media
+mediat
+mediat
+medic
+medicin
+medicin
+medicin
+medit
+medit
+medit
+medit
+medit
+mediterranean
+mediterraneum
+medlar
+medlar
+meed
+meed
+meek
+meekli
+meek
+meet
+meeter
+meetest
+meet
+meet
+meetli
+meet
+meet
+meg
+mehercl
+meilleur
+meini
+meisen
+melancholi
+melancholi
+melford
+mell
+melliflu
+mellow
+mellow
+melodi
+melodi
+melt
+melt
+melteth
+melt
+melt
+melun
+member
+member
+memento
+memor
+memorandum
+memori
+memori
+memori
+memoriz
+memor
+memori
+memphi
+men
+menac
+menac
+menac
+menaphon
+mena
+mend
+mend
+mender
+mend
+mend
+menecr
+menelau
+meneniu
+mental
+menteith
+mention
+menti
+menton
+mephostophilu
+mer
+mercatant
+mercatio
+mercenari
+mercenari
+mercer
+merchandis
+merchand
+merchant
+merchant
+merci
+merci
+mercifulli
+merciless
+mercuri
+mercuri
+mercuri
+mercutio
+merci
+mere
+mere
+mere
+merest
+meridian
+merit
+merit
+meritori
+merit
+merlin
+mermaid
+mermaid
+merop
+merrier
+merriest
+merrili
+merriman
+merriment
+merriment
+merri
+merri
+mervail
+me
+mesh
+mesh
+mesopotamia
+mess
+messag
+messag
+messala
+messalin
+messeng
+messeng
+mess
+messina
+met
+metal
+metal
+metamorphi
+metamorphos
+metaphor
+metaphys
+metaphys
+mete
+metellu
+meteor
+meteor
+meteyard
+metheglin
+metheglin
+methink
+methink
+method
+method
+methought
+methought
+metr
+metr
+metropoli
+mett
+mettl
+mettl
+meu
+mew
+mew
+mewl
+mexico
+mi
+mice
+michael
+michaelma
+micher
+mich
+mickl
+microcosm
+mid
+mida
+middest
+middl
+middleham
+midnight
+midriff
+midst
+midsumm
+midwai
+midwif
+midwiv
+mienn
+might
+might
+mightier
+mightiest
+mightili
+mighti
+mightst
+mighti
+milan
+milch
+mild
+milder
+mildest
+mildew
+mildew
+mildli
+mild
+mile
+mile
+milford
+militarist
+militari
+milk
+milk
+milkmaid
+milk
+milksop
+milki
+mill
+mill
+miller
+millin
+million
+million
+million
+mill
+millston
+milo
+mimic
+minc
+minc
+minc
+minc
+mind
+mind
+mind
+mindless
+mind
+mine
+miner
+miner
+minerva
+mine
+mingl
+mingl
+mingl
+minikin
+minim
+minim
+minimo
+minimu
+mine
+minion
+minion
+minist
+minist
+minist
+ministr
+minnow
+minnow
+minola
+minor
+mino
+minotaur
+minstrel
+minstrel
+minstrelsi
+mint
+mint
+minut
+minut
+minut
+minx
+mio
+mir
+mirabl
+miracl
+miracl
+miracul
+miranda
+mire
+mirror
+mirror
+mirth
+mirth
+miri
+mi
+misadventur
+misadventur
+misanthropo
+misappli
+misbecam
+misbecom
+misbecom
+misbegot
+misbegotten
+misbeliev
+misbeliev
+misbhav
+miscal
+miscal
+miscarri
+miscarri
+miscarri
+miscarri
+mischanc
+mischanc
+mischief
+mischief
+mischiev
+misconceiv
+misconst
+misconst
+misconstruct
+misconstru
+misconstru
+miscreant
+miscreat
+misde
+misde
+misdemean
+misdemeanour
+misdoubt
+misdoubteth
+misdoubt
+misenum
+miser
+miser
+miser
+misericord
+miseri
+miser
+miseri
+misfortun
+misfortun
+misgiv
+misgiv
+misgiv
+misgovern
+misgovern
+misgraf
+misguid
+mishap
+mishap
+misheard
+misinterpret
+mislead
+mislead
+mislead
+mislead
+misl
+mislik
+misord
+misplac
+misplac
+misplac
+mispri
+mispris
+mispris
+mispriz
+misproud
+misquot
+misreport
+miss
+miss
+miss
+misshap
+misshapen
+missheath
+miss
+missingli
+mission
+missiv
+missiv
+misspok
+mist
+mista
+mistak
+mistak
+mistaken
+mistak
+mistaketh
+mistak
+mistak
+mistemp
+mistemp
+misterm
+mist
+misthink
+misthought
+mistleto
+mistook
+mistread
+mistress
+mistress
+mistresss
+mistriship
+mistrust
+mistrust
+mistrust
+mistrust
+mist
+misti
+misu
+misus
+misus
+misus
+mite
+mithrid
+mitig
+mitig
+mix
+mix
+mixtur
+mixtur
+mm
+mnd
+moan
+moan
+moat
+moat
+mobl
+mock
+mockabl
+mocker
+mockeri
+mocker
+mockeri
+mock
+mock
+mockvat
+mockwat
+model
+modena
+moder
+moder
+moder
+modern
+modest
+modesti
+modestli
+modesti
+modicum
+modo
+modul
+moe
+moi
+moieti
+moist
+moisten
+moistur
+moldwarp
+mole
+molehil
+mole
+molest
+molest
+mollif
+molli
+molten
+molto
+mome
+moment
+momentari
+mome
+mon
+monachum
+monarch
+monarchi
+monarch
+monarcho
+monarch
+monarchi
+monast
+monasteri
+monast
+mondai
+mond
+monei
+monei
+mong
+monger
+monger
+mong
+mongrel
+mongrel
+mongst
+monk
+monkei
+monkei
+monk
+monmouth
+monopoli
+mon
+monsieur
+monsieur
+monster
+monster
+monstrou
+monstrous
+monstrous
+monstruos
+montacut
+montag
+montagu
+montagu
+montano
+montant
+montez
+montferrat
+montgomeri
+month
+monthli
+month
+montjoi
+monument
+monument
+monument
+mood
+mood
+moodi
+moon
+moonbeam
+moonish
+moonlight
+moon
+moonshin
+moonshin
+moor
+moorfield
+moor
+moorship
+mop
+mope
+mope
+mop
+mopsa
+moral
+moral
+moral
+moral
+mordak
+more
+moreov
+more
+morgan
+mori
+morisco
+morn
+morn
+morn
+morocco
+morri
+morrow
+morrow
+morsel
+morsel
+mort
+mortal
+mortal
+mortal
+mortal
+mortar
+mortgag
+mortifi
+mortifi
+mortim
+mortim
+morti
+mortis
+morton
+mose
+moss
+mossgrown
+most
+mote
+moth
+mother
+mother
+moth
+motion
+motionless
+motion
+motiv
+motiv
+motlei
+mot
+mought
+mould
+mould
+mouldeth
+mould
+mouldi
+moult
+moulten
+mounch
+mounseur
+mounsieur
+mount
+mountain
+mountain
+mountain
+mountain
+mountain
+mountant
+mountanto
+mountebank
+mountebank
+mount
+mounteth
+mount
+mount
+mourn
+mourn
+mourner
+mourner
+mourn
+mournfulli
+mourn
+mourningli
+mourn
+mourn
+mou
+mous
+mousetrap
+mous
+mouth
+mouth
+mouth
+mov
+movabl
+move
+moveabl
+moveabl
+move
+mover
+mover
+move
+moveth
+move
+movingli
+movousu
+mow
+mowbrai
+mower
+mow
+mow
+moi
+moi
+moys
+mr
+much
+muck
+mud
+mud
+muddi
+muddi
+muffin
+muffl
+muffl
+muffl
+muffler
+muffl
+mugger
+mug
+mulberri
+mulberri
+mule
+mule
+mulet
+mulier
+mulier
+muliteu
+mull
+mulmutiu
+multipli
+multipli
+multipli
+multipot
+multitud
+multitud
+multitudin
+mum
+mumbl
+mumbl
+mummer
+mummi
+mun
+munch
+muniment
+munit
+murd
+murder
+murder
+murder
+murder
+murder
+murder
+murder
+mure
+murk
+murkiest
+murki
+murmur
+murmur
+murmur
+murrain
+murrai
+murrion
+murther
+murther
+murther
+murther
+murther
+murther
+mu
+muscadel
+muscovit
+muscovit
+muscovi
+muse
+muse
+mush
+mushroom
+music
+music
+musician
+musician
+music
+muse
+muse
+musk
+musket
+musket
+musko
+muss
+mussel
+mussel
+must
+mustachio
+mustard
+mustardse
+muster
+muster
+muster
+musti
+mutabl
+mutabl
+mutat
+mutat
+mute
+mute
+mutest
+mutin
+mutin
+mutin
+mutin
+mutini
+mutin
+mutini
+mutiu
+mutter
+mutter
+mutton
+mutton
+mutual
+mutual
+mutual
+muzzl
+muzzl
+muzzl
+mv
+mww
+my
+mynheer
+myrmidon
+myrmidon
+myrtl
+myself
+myst
+mysteri
+mysteri
+n
+nag
+nage
+nag
+naiad
+nail
+nail
+nak
+nake
+naked
+nal
+nam
+name
+name
+nameless
+name
+name
+namest
+name
+nan
+nanc
+nap
+nape
+nape
+napkin
+napkin
+napl
+napless
+nap
+nap
+narbon
+narcissu
+narin
+narrow
+narrowli
+naso
+nasti
+nathaniel
+natif
+nation
+nation
+nativ
+nativ
+natur
+natur
+natur
+natur
+natur
+natur
+natur
+natu
+naught
+naughtili
+naughti
+navarr
+nave
+navel
+navig
+navi
+nai
+nayward
+nayword
+nazarit
+ne
+neaf
+neamnoin
+neanmoin
+neapolitan
+neapolitan
+near
+nearer
+nearest
+nearli
+near
+neat
+neatli
+neb
+nebour
+nebuchadnezzar
+nec
+necessari
+necessarili
+necessari
+necess
+necess
+necess
+neck
+necklac
+neck
+nectar
+ned
+nedar
+need
+need
+needer
+need
+needful
+need
+needl
+needl
+needless
+needli
+need
+needi
+neer
+neez
+nefa
+negat
+neg
+neg
+neglect
+neglect
+neglect
+neglectingli
+neglect
+neglig
+neglig
+negoti
+negoti
+negro
+neigh
+neighbor
+neighbour
+neighbourhood
+neighbour
+neighbourli
+neighbour
+neigh
+neigh
+neither
+nell
+nemean
+nemesi
+neoptolemu
+nephew
+nephew
+neptun
+ner
+nereid
+nerissa
+nero
+nero
+ner
+nerv
+nerv
+nervii
+nervi
+nessu
+nest
+nestor
+nest
+net
+nether
+netherland
+net
+nettl
+nettl
+nettl
+neuter
+neutral
+nev
+never
+nevil
+nevil
+new
+newborn
+newer
+newest
+newgat
+newli
+new
+new
+newsmong
+newt
+newt
+next
+nibbl
+nicanor
+nice
+nice
+nice
+nicer
+niceti
+nichola
+nick
+nicknam
+nick
+niec
+niec
+niggard
+niggard
+niggardli
+nigh
+night
+nightcap
+nightcap
+night
+nightgown
+nightingal
+nightingal
+nightli
+nightmar
+night
+nightwork
+nihil
+nile
+nill
+nilu
+nimbl
+nimbl
+nimbler
+nimbl
+nine
+nineteen
+ning
+ningli
+ninni
+ninth
+ninu
+niob
+niob
+nip
+nipp
+nip
+nippl
+nip
+nit
+nly
+nnight
+nnight
+no
+noah
+nob
+nobil
+nobi
+nobl
+nobleman
+noblemen
+nobl
+nobler
+nobl
+nobless
+noblest
+nobli
+nobodi
+noce
+nod
+nod
+nod
+noddl
+noddl
+noddi
+nod
+noe
+noint
+noi
+nois
+noiseless
+noisemak
+nois
+noisom
+nole
+nomin
+nomin
+nomin
+nominativo
+non
+nonag
+nonc
+none
+nonino
+nonni
+nonpareil
+nonsuit
+noni
+nook
+nook
+noon
+noondai
+noontid
+nor
+norberi
+norfolk
+norman
+normandi
+norman
+north
+northampton
+northamptonshir
+northerli
+northern
+northgat
+northumberland
+northumberland
+northward
+norwai
+norwai
+norwegian
+norweyan
+no
+nose
+nosegai
+noseless
+nose
+noster
+nostra
+nostril
+nostril
+not
+notabl
+notabl
+notari
+notch
+note
+notebook
+note
+notedli
+note
+notest
+noteworthi
+noth
+noth
+notic
+notifi
+note
+notion
+notori
+notori
+notr
+notwithstand
+nought
+noun
+noun
+nourish
+nourish
+nourish
+nourish
+nourisheth
+nourish
+nourish
+nou
+novel
+novelti
+novelti
+noverb
+novi
+novic
+novic
+novum
+now
+nowher
+noyanc
+ns
+nt
+nubibu
+numa
+numb
+number
+number
+number
+numberless
+number
+numb
+nun
+nuncio
+nuncl
+nunneri
+nun
+nuntiu
+nuptial
+nur
+nurs
+nurs
+nurser
+nurseri
+nurs
+nurseth
+nursh
+nurs
+nurtur
+nurtur
+nut
+nuthook
+nutmeg
+nutmeg
+nutriment
+nut
+nutshel
+ny
+nym
+nymph
+nymph
+o
+oak
+oaken
+oak
+oar
+oar
+oatcak
+oaten
+oath
+oathabl
+oath
+oat
+ob
+obduraci
+obdur
+obedi
+obedi
+obeis
+oberon
+obei
+obei
+obei
+obei
+obidicut
+object
+object
+object
+object
+oblat
+oblat
+oblig
+oblig
+oblig
+obliqu
+oblivion
+oblivi
+obloqui
+obscen
+obscen
+obscur
+obscur
+obscur
+obscur
+obscur
+obscur
+obscur
+obsequi
+obsequi
+obsequi
+observ
+observ
+observ
+observ
+observ
+observ
+observ
+observ
+observ
+observ
+observ
+observ
+observingli
+obsqu
+obstacl
+obstacl
+obstinaci
+obstin
+obstin
+obstruct
+obstruct
+obstruct
+obtain
+obtain
+obtain
+occas
+occas
+occid
+occident
+occult
+occupat
+occup
+occup
+occupi
+occupi
+occupi
+occurr
+occurr
+occurr
+ocean
+ocean
+octavia
+octaviu
+ocular
+od
+odd
+oddest
+oddli
+odd
+od
+od
+odiou
+odorifer
+odor
+odour
+odour
+od
+oeillad
+oe
+oeuvr
+of
+ofephesu
+off
+offal
+offenc
+offenc
+offenc
+offend
+offend
+offendendo
+offend
+offend
+offendeth
+offend
+offendress
+offend
+offens
+offenseless
+offens
+offens
+offer
+offer
+offer
+offer
+offer
+offert
+offic
+offic
+offic
+offic
+offic
+offic
+offici
+offici
+offspr
+oft
+often
+often
+oftentim
+oh
+oil
+oil
+oili
+old
+oldcastl
+olden
+older
+oldest
+old
+oliv
+oliv
+oliv
+oliv
+olivia
+olympian
+olympu
+oman
+oman
+omen
+omin
+omiss
+omit
+omitt
+omit
+omit
+omn
+omn
+omnipot
+on
+onc
+on
+on
+oney
+ongl
+onion
+onion
+onli
+onset
+onward
+onward
+oo
+ooz
+ooz
+oozi
+op
+opal
+op
+open
+open
+open
+openli
+open
+open
+oper
+oper
+oper
+oper
+oper
+op
+oph
+ophelia
+opinion
+opinion
+opportun
+opportun
+opportun
+oppo
+oppos
+oppos
+opposeless
+oppos
+oppos
+oppos
+oppos
+opposit
+opposit
+opposit
+opposit
+oppress
+oppress
+oppress
+oppresseth
+oppress
+oppress
+oppressor
+opprest
+opprobri
+oppugn
+opul
+opul
+or
+oracl
+oracl
+orang
+orat
+orat
+orat
+oratori
+orb
+orb
+orb
+orchard
+orchard
+ord
+ordain
+ordain
+ordain
+order
+order
+order
+orderless
+orderli
+order
+ordin
+ordin
+ordinari
+ordinari
+ordnanc
+ord
+ordur
+or
+organ
+organ
+orgil
+orient
+orifex
+origin
+origin
+orison
+ork
+orlando
+orld
+orlean
+ornament
+ornament
+orod
+orphan
+orphan
+orpheu
+orsino
+ort
+orthographi
+ort
+oscorbidulcho
+osier
+osier
+osprei
+osr
+osric
+ossa
+ost
+ostent
+ostentar
+ostent
+ostent
+ostler
+ostler
+ostrich
+osw
+oswald
+othello
+other
+otherg
+other
+otherwher
+otherwhil
+otherwis
+otter
+ottoman
+ottomit
+oubli
+ouch
+ought
+oui
+ounc
+ounc
+ouph
+our
+our
+ourself
+ourselv
+ousel
+out
+outbid
+outbrav
+outbrav
+outbreak
+outcast
+outcri
+outcri
+outdar
+outdar
+outdar
+outdon
+outfac
+outfac
+outfac
+outfac
+outfli
+outfrown
+outgo
+outgo
+outgrown
+outjest
+outlaw
+outlawri
+outlaw
+outliv
+outliv
+outliv
+outliv
+outlook
+outlustr
+outpriz
+outrag
+outrag
+outrag
+outran
+outright
+outroar
+outrun
+outrun
+outrun
+outscold
+outscorn
+outsel
+outsel
+outsid
+outsid
+outspeak
+outsport
+outstar
+outstai
+outstood
+outstretch
+outstretch
+outstrik
+outstrip
+outstrip
+outswear
+outvenom
+outward
+outwardli
+outward
+outwear
+outweigh
+outwent
+outworn
+outworth
+oven
+over
+overaw
+overbear
+overblown
+overboard
+overbold
+overborn
+overbulk
+overbui
+overcam
+overcast
+overcharg
+overcharg
+overcom
+overcom
+overdon
+overearnest
+overfar
+overflow
+overflown
+overgl
+overgo
+overgon
+overgorg
+overgrown
+overhead
+overhear
+overheard
+overhold
+overjoi
+overkind
+overland
+overleath
+overl
+overlook
+overlook
+overlook
+overmast
+overmount
+overmuch
+overpass
+overp
+overp
+overplu
+overrul
+overrun
+overscutch
+overset
+overshad
+overshin
+overshin
+overshot
+oversight
+overspread
+overstain
+overswear
+overt
+overta
+overtak
+overtaketh
+overthrow
+overthrown
+overthrow
+overtook
+overtopp
+overtur
+overturn
+overwatch
+overween
+overween
+overweigh
+overwhelm
+overwhelm
+overworn
+ovid
+ovidiu
+ow
+ow
+ow
+owedst
+owen
+ow
+owest
+oweth
+ow
+owl
+owl
+own
+owner
+owner
+own
+own
+owi
+ox
+oxen
+oxford
+oxfordshir
+oxlip
+oy
+oyster
+p
+pabbl
+pabylon
+pac
+pace
+pace
+pace
+pacifi
+pacifi
+pace
+pack
+packet
+packet
+packhors
+pack
+pack
+pack
+packthread
+pacoru
+paction
+pad
+paddl
+paddl
+paddock
+padua
+pagan
+pagan
+page
+pageant
+pageant
+page
+pah
+paid
+pail
+pail
+pail
+pain
+pain
+pain
+painfulli
+pain
+paint
+paint
+painter
+paint
+paint
+paint
+pair
+pair
+pair
+pajock
+pal
+palabra
+palac
+palac
+palamed
+palat
+palat
+palatin
+palat
+pale
+pale
+pale
+paler
+pale
+palestin
+palfrei
+palfrei
+palisado
+pall
+pallabri
+palla
+pallet
+palm
+palmer
+palmer
+palm
+palmi
+palpabl
+palsi
+palsi
+palsi
+palt
+palter
+paltri
+pali
+pamp
+pamper
+pamphlet
+pan
+pancack
+pancak
+pancak
+pandar
+pandar
+pandaru
+pander
+panderli
+pander
+pandulph
+panel
+pang
+pang
+pang
+pannier
+pannonian
+pansa
+pansi
+pant
+pantaloon
+pant
+pantheon
+panther
+panthino
+pant
+pantingli
+pantler
+pantri
+pant
+pap
+papal
+paper
+paper
+paphlagonia
+papho
+papist
+pap
+par
+parabl
+paracelsu
+paradis
+paradox
+paradox
+paragon
+paragon
+parallel
+parallel
+paramour
+paramour
+parapet
+paraquito
+parasit
+parasit
+parca
+parcel
+parcel
+parcel
+parch
+parch
+parch
+parchment
+pard
+pardon
+pardona
+pardon
+pardon
+pardon
+pardonn
+pardonn
+pardonnez
+pardon
+pare
+pare
+parel
+parent
+parentag
+parent
+parfect
+pare
+pare
+pari
+parish
+parishion
+parisian
+paritor
+park
+park
+parl
+parler
+parl
+parlei
+parlez
+parliament
+parlor
+parlour
+parlou
+parmac
+parol
+parricid
+parricid
+parrot
+parrot
+parslei
+parson
+part
+partak
+partaken
+partak
+partak
+part
+parthia
+parthian
+parthian
+parti
+partial
+partial
+partial
+particip
+particip
+particl
+particular
+particular
+particular
+particularli
+particular
+parti
+part
+partisan
+partisan
+partit
+partizan
+partlet
+partli
+partner
+partner
+partridg
+part
+parti
+pa
+pash
+pash
+pash
+pass
+passabl
+passado
+passag
+passag
+passant
+pass
+passeng
+passeng
+pass
+passeth
+pass
+passio
+passion
+passion
+passion
+passion
+passiv
+passport
+passi
+past
+past
+pastern
+pasti
+pastim
+pastim
+pastor
+pastor
+pastor
+pastri
+pastur
+pastur
+pasti
+pat
+patai
+patch
+patcheri
+patch
+pate
+pate
+patent
+patent
+patern
+pate
+path
+pathet
+path
+pathwai
+pathwai
+patienc
+patient
+patient
+patient
+patin
+patrician
+patrician
+patrick
+patrimoni
+patroclu
+patron
+patronag
+patro
+patron
+patrum
+patter
+pattern
+pattern
+pattl
+pauca
+pauca
+paul
+paulina
+paunch
+paunch
+paus
+pauser
+paus
+pausingli
+pauvr
+pav
+pave
+pavement
+pavilion
+pavilion
+pavin
+paw
+pawn
+pawn
+paw
+pax
+pai
+payest
+pai
+payment
+payment
+pai
+paysan
+paysan
+pe
+peac
+peaceabl
+peaceabl
+peac
+peacemak
+peac
+peach
+peach
+peacock
+peacock
+peak
+peak
+peal
+peal
+pear
+peard
+pearl
+pearl
+pear
+pea
+peasant
+peasantri
+peasant
+peascod
+peas
+peaseblossom
+peat
+peaten
+peat
+pebbl
+pebbl
+pebbl
+peck
+peck
+peculiar
+pecu
+pedant
+pedant
+pedascul
+pede
+pedest
+pedigre
+pedlar
+pedlar
+pedro
+ped
+peel
+peep
+peep
+peep
+peep
+peer
+peereth
+peer
+peerless
+peer
+peesel
+peevish
+peevishli
+peflur
+peg
+pegasu
+peg
+peis
+peis
+peiz
+pelf
+pelican
+pelion
+pell
+pella
+pellet
+peloponnesu
+pelt
+pelt
+pembrok
+pen
+penalti
+penalti
+penanc
+penc
+pencil
+pencil
+pencil
+pendant
+pendent
+pendragon
+pendul
+penelop
+penetr
+penetr
+penetr
+penit
+penit
+penitenti
+penit
+penit
+penker
+penknif
+penn
+pen
+pen
+pennon
+penni
+pennyworth
+pennyworth
+pen
+pens
+pension
+pension
+pensiv
+pensiv
+pensiv
+pent
+pentecost
+penthesilea
+penthous
+penuri
+penuri
+peopl
+peopl
+peopl
+peopl
+pepin
+pepper
+peppercorn
+pepper
+per
+peradventur
+peradventur
+perceiv
+perceiv
+perceiv
+perceiv
+perceiveth
+perch
+perchanc
+perci
+percuss
+perci
+perdi
+perdita
+perdit
+perdonato
+perdu
+perdur
+perdur
+perdi
+pere
+peregrin
+peremptorili
+peremptori
+perfect
+perfect
+perfect
+perfectest
+perfect
+perfect
+perfectli
+perfect
+perfidi
+perfidi
+perforc
+perform
+perform
+perform
+perform
+perform
+perform
+perform
+perform
+perfum
+perfum
+perfum
+perfum
+perfum
+perg
+perhap
+periapt
+perigort
+perigouna
+peril
+peril
+peril
+period
+period
+perish
+perish
+perishest
+perisheth
+perish
+periwig
+perjur
+perjur
+perjur
+perjuri
+perjuri
+perk
+perk
+permafoi
+perman
+permiss
+permiss
+permit
+permit
+pernici
+pernici
+peror
+perpend
+perpendicular
+perpendicularli
+perpetu
+perpetu
+perpetu
+perplex
+perplex
+perplex
+per
+persecut
+persecut
+persecutor
+perseu
+persev
+persever
+persev
+persia
+persian
+persist
+persist
+persist
+persist
+persist
+person
+persona
+personag
+personag
+person
+person
+person
+person
+person
+person
+person
+perspect
+perspect
+perspect
+perspicu
+persuad
+persuad
+persuad
+persuad
+persuas
+persuas
+pert
+pertain
+pertain
+pertain
+pertaunt
+pertin
+pertli
+perturb
+perturb
+perturb
+perturb
+peru
+perus
+perus
+perus
+perus
+pervers
+pervers
+pervers
+pervert
+pervert
+peseech
+pest
+pester
+pestifer
+pestil
+pestil
+pet
+petar
+peter
+petit
+petit
+petitionari
+petition
+petition
+petit
+peto
+petrarch
+petruchio
+petter
+petticoat
+petticoat
+petti
+pettish
+pettito
+petti
+peu
+pew
+pewter
+pewter
+phaethon
+phaeton
+phantasim
+phantasim
+phantasma
+pharamond
+pharaoh
+pharsalia
+pheasant
+pheazar
+phebe
+phebe
+pheebu
+pheez
+phibbu
+philadelpho
+philario
+philarmonu
+philemon
+philip
+philippan
+philipp
+philippi
+phillida
+philo
+philomel
+philomela
+philosoph
+philosoph
+philosoph
+philosophi
+philostr
+philotu
+phlegmat
+phoeb
+phoebu
+phoenicia
+phoenician
+phoenix
+phorbu
+photinu
+phrase
+phraseless
+phrase
+phrygia
+phrygian
+phrynia
+physic
+physic
+physician
+physician
+physic
+pia
+pibbl
+pibl
+picardi
+pick
+pickax
+pickax
+pickbon
+pick
+picker
+pick
+pickl
+picklock
+pickpurs
+pick
+pickt
+pickthank
+pictur
+pictur
+pictur
+pictur
+pid
+pie
+piec
+piec
+piec
+piec
+pi
+pied
+pier
+pierc
+pierc
+pierc
+pierc
+pierceth
+pierc
+pierci
+pier
+pi
+pieti
+pig
+pigeon
+pigeon
+pight
+pigmi
+pigrogromitu
+pike
+pike
+pil
+pilat
+pilat
+pilcher
+pile
+pile
+pilf
+pilfer
+pilgrim
+pilgrimag
+pilgrim
+pill
+pillag
+pillag
+pillar
+pillar
+pillicock
+pillori
+pillow
+pillow
+pill
+pilot
+pilot
+pimpernel
+pin
+pinch
+pinch
+pinch
+pinch
+pindaru
+pine
+pine
+pine
+pinfold
+pine
+pinion
+pink
+pinn
+pinnac
+pin
+pins
+pint
+pintpot
+pion
+pioneer
+pioner
+pioner
+piou
+pip
+pipe
+piper
+piper
+pipe
+pipe
+pippin
+pippin
+pirat
+pirat
+pisa
+pisanio
+pish
+pismir
+piss
+piss
+pistol
+pistol
+pit
+pitch
+pitch
+pitcher
+pitcher
+pitchi
+piteou
+piteous
+pitfal
+pith
+pithless
+pithi
+piti
+piti
+piti
+piti
+pitifulli
+pitiless
+pit
+pittanc
+pitti
+pittikin
+piti
+piti
+piu
+plac
+place
+place
+placentio
+place
+placeth
+placid
+place
+plack
+placket
+placket
+plagu
+plagu
+plagu
+plagu
+plagu
+plagui
+plain
+plainer
+plainest
+plain
+plain
+plainli
+plain
+plain
+plainsong
+plaint
+plaintiff
+plaintiff
+plaint
+planch
+planet
+planetari
+planet
+plank
+plant
+plantag
+plantagenet
+plantagenet
+plantain
+plantat
+plant
+planteth
+plant
+plash
+plashi
+plast
+plaster
+plaster
+plat
+plate
+plate
+plate
+platform
+platform
+plat
+plat
+plausibl
+plausiv
+plautu
+plai
+plai
+player
+player
+playeth
+playfellow
+playfellow
+playhous
+plai
+plai
+plea
+pleach
+pleach
+plead
+plead
+pleader
+pleader
+plead
+plead
+plea
+pleasanc
+pleasant
+pleasantli
+pleas
+pleas
+pleaser
+pleaser
+pleas
+pleasest
+pleaseth
+pleas
+pleasur
+pleasur
+plebeian
+plebeii
+pleb
+pledg
+pledg
+plein
+plenitud
+plenteou
+plenteous
+plenti
+plenti
+plentifulli
+plenti
+pless
+pless
+pless
+pliant
+pli
+pli
+plight
+plight
+plighter
+plod
+plod
+plodder
+plod
+plod
+plood
+ploodi
+plot
+plot
+plot
+plotter
+plough
+plough
+ploughman
+ploughmen
+plow
+plow
+pluck
+pluck
+plucker
+pluck
+pluck
+plue
+plum
+plume
+plume
+plume
+plummet
+plump
+plumpi
+plum
+plung
+plung
+plung
+plural
+plurisi
+plu
+pluto
+plutu
+ply
+po
+pocket
+pocket
+pocket
+pocki
+podi
+poem
+poesi
+poet
+poetic
+poetri
+poet
+poictier
+poinard
+poin
+point
+pointblank
+point
+point
+point
+poi
+pois
+pois
+poison
+poison
+poison
+poison
+poison
+poison
+poke
+poke
+pol
+polack
+polack
+poland
+pold
+pole
+poleax
+polecat
+polecat
+polemon
+pole
+poli
+polici
+polici
+polish
+polish
+polit
+politician
+politician
+politicli
+polixen
+poll
+pollut
+pollut
+poloniu
+poltroon
+polus
+polydamu
+polydor
+polyxena
+pomand
+pomegran
+pomewat
+pomfret
+pomgarnet
+pommel
+pomp
+pompeiu
+pompei
+pompion
+pompou
+pomp
+pond
+ponder
+ponder
+pond
+poniard
+poniard
+pont
+pontic
+pontif
+ponton
+pooh
+pool
+pool
+poop
+poor
+poorer
+poorest
+poorli
+pop
+pope
+popedom
+popiliu
+popingai
+popish
+popp
+poppi
+pop
+popular
+popular
+popul
+porch
+porch
+pore
+pore
+pork
+porn
+porpentin
+porridg
+porring
+port
+portabl
+portag
+portal
+portanc
+portculli
+portend
+portend
+portent
+portent
+portent
+porter
+porter
+portia
+portion
+portli
+portotartarossa
+portrait
+portraitur
+port
+portug
+pose
+posi
+posi
+posit
+posit
+posit
+poss
+possess
+possess
+possess
+possesseth
+possess
+possess
+possess
+possessor
+posset
+posset
+possibl
+possibl
+possibl
+possibl
+possit
+post
+post
+post
+posterior
+posterior
+poster
+postern
+postern
+poster
+posthors
+posthors
+posthumu
+post
+postmast
+post
+postscript
+postur
+postur
+posi
+pot
+potabl
+potat
+potato
+potato
+potch
+potenc
+potent
+potent
+potenti
+potent
+potent
+pothecari
+pother
+potion
+potion
+potpan
+pot
+potter
+pot
+pottl
+pouch
+poulter
+poultic
+poultnei
+pouncet
+pound
+pound
+pour
+pourest
+pour
+pourquoi
+pour
+pout
+poverti
+pow
+powd
+powder
+power
+power
+powerfulli
+powerless
+power
+pox
+poi
+poysam
+prabbl
+practic
+practic
+practic
+practic
+practic
+practic
+practi
+practis
+practis
+practis
+practis
+practis
+practis
+praeclarissimu
+praemunir
+praetor
+praetor
+prag
+pragu
+prain
+prain
+prai
+prais
+prais
+prais
+praisest
+praiseworthi
+prais
+pranc
+prank
+prank
+prat
+prate
+prate
+prater
+prate
+prattl
+prattler
+prattl
+prave
+prawl
+prawn
+prai
+prayer
+prayer
+prai
+prai
+pre
+preach
+preach
+preacher
+preach
+preach
+preachment
+pread
+preambul
+preced
+preced
+preced
+precept
+precepti
+precept
+precinct
+preciou
+precious
+precipic
+precipit
+precipit
+precis
+precis
+precis
+precisian
+precor
+precurs
+precursor
+predeceas
+predecessor
+predecessor
+predestin
+predica
+predict
+predict
+predict
+predomin
+predomin
+predomin
+preech
+preemin
+prefac
+prefer
+prefer
+prefer
+preferr
+preferreth
+prefer
+prefer
+prefigur
+prefix
+prefix
+preform
+pregnanc
+pregnant
+pregnantli
+prejud
+prejudic
+prejudici
+prelat
+premedit
+premedit
+premis
+premis
+prenez
+prenomin
+prentic
+prentic
+preordin
+prepar
+prepar
+prepar
+prepar
+prepar
+preparedli
+prepar
+prepar
+prepost
+preposter
+preposter
+prerogatif
+prerog
+prerogativ
+presag
+presag
+presag
+presageth
+presag
+prescienc
+prescrib
+prescript
+prescript
+prescript
+prescript
+presenc
+presenc
+present
+present
+present
+present
+present
+presenteth
+present
+present
+present
+present
+preserv
+preserv
+preserv
+preserv
+preserv
+preserv
+preserv
+preserv
+presid
+press
+press
+presser
+press
+press
+pressur
+pressur
+prest
+prester
+presum
+presum
+presum
+presumpt
+presumptu
+presuppo
+pret
+pretenc
+pretenc
+pretend
+pretend
+pretend
+pretens
+pretext
+pretia
+prettier
+prettiest
+prettili
+pretti
+pretti
+prevail
+prevail
+prevaileth
+prevail
+prevail
+prevail
+prevent
+prevent
+prevent
+prevent
+prevent
+prei
+prey
+prei
+priam
+priami
+priamu
+pribbl
+price
+prick
+prick
+pricket
+prick
+prick
+pricksong
+pride
+pride
+pridg
+prie
+pri
+prief
+pri
+priest
+priesthood
+priest
+prig
+primal
+prime
+primer
+primero
+primest
+primit
+primo
+primogen
+primros
+primros
+primi
+princ
+princ
+princ
+princess
+princip
+princip
+princip
+principl
+principl
+princox
+pring
+print
+print
+print
+printless
+print
+prioress
+priori
+prioriti
+priori
+priscian
+prison
+prison
+prison
+prison
+prisonni
+prison
+pristin
+prith
+prithe
+privaci
+privat
+privat
+privat
+privilag
+privileg
+privileg
+privileg
+privileg
+privilegio
+privili
+priviti
+privi
+priz
+prize
+prize
+prizer
+prize
+prizest
+prize
+pro
+probabl
+probal
+probat
+proce
+proceed
+proceed
+proceed
+proceed
+proce
+process
+process
+proclaim
+proclaim
+proclaimeth
+proclaim
+proclam
+proclam
+proconsul
+procrastin
+procreant
+procreant
+procreat
+procru
+proculeiu
+procur
+procur
+procur
+procur
+procur
+procur
+prodig
+prodig
+prodig
+prodig
+prodigi
+prodigi
+prodigi
+prodigi
+proditor
+produc
+produc
+produc
+produc
+produc
+profac
+profan
+profan
+profan
+profan
+profan
+profan
+profan
+profan
+profess
+profess
+profess
+profess
+profess
+professor
+proffer
+proffer
+proffer
+proffer
+profici
+profit
+profit
+profit
+profit
+profit
+profitless
+profit
+profound
+profoundest
+profoundli
+progenitor
+progeni
+progn
+prognost
+prognost
+progress
+progress
+prohibit
+prohibit
+project
+project
+project
+prolixi
+prolix
+prologu
+prologu
+prolong
+prolong
+promethean
+prometheu
+promi
+promis
+promis
+promis
+promiseth
+promis
+promontori
+promot
+promot
+prompt
+prompt
+promptement
+prompter
+prompt
+prompt
+promptur
+promulg
+prone
+prononc
+prononcez
+pronoun
+pronounc
+pronounc
+pronounc
+pronounc
+pronoun
+proof
+proof
+prop
+propag
+propag
+propend
+propens
+proper
+proper
+properli
+properti
+properti
+properti
+propheci
+propheci
+prophesi
+prophesi
+prophesi
+prophesi
+prophet
+prophetess
+prophet
+prophet
+prophet
+propinqu
+propont
+proport
+proportion
+proport
+propo
+propos
+propos
+propos
+propos
+propos
+proposit
+proposit
+propound
+propp
+propr
+proprieti
+prop
+propugn
+prorogu
+prorogu
+proscript
+proscript
+prose
+prosecut
+prosecut
+proselyt
+proserpina
+prosp
+prospect
+prosper
+prosper
+prospero
+prosper
+prosper
+prosper
+prostitut
+prostrat
+protect
+protect
+protect
+protector
+protector
+protectorship
+protectress
+protect
+protest
+protest
+protest
+protest
+protest
+protest
+protest
+proteu
+protheu
+protract
+protract
+proud
+prouder
+proudest
+proudlier
+proudli
+proud
+prov
+provand
+prove
+prove
+provend
+proverb
+proverb
+prove
+proveth
+provid
+provid
+provid
+provid
+provid
+provid
+provid
+provinc
+provinc
+provinci
+prove
+provis
+proviso
+provoc
+provok
+provok
+provok
+provok
+provok
+provoketh
+provok
+provost
+prowess
+prudenc
+prudent
+prun
+prune
+prune
+prune
+pry
+pry
+psalm
+psalmist
+psalm
+psalteri
+ptolemi
+ptolemi
+public
+publican
+public
+publicli
+publicola
+publish
+publish
+publish
+publish
+publiu
+pucel
+puck
+pudder
+pud
+pud
+puddl
+puddl
+pudenc
+pueritia
+puff
+puf
+puff
+pug
+pui
+puissanc
+puissant
+puke
+puke
+pulcher
+pule
+pull
+puller
+pullet
+pull
+pull
+pulpit
+pulpit
+pulpit
+puls
+pulsidg
+pump
+pumpion
+pump
+pun
+punch
+punish
+punish
+punish
+punish
+punish
+punk
+punto
+puni
+pupil
+pupil
+puppet
+puppet
+puppi
+puppi
+pur
+purblind
+purcha
+purchas
+purchas
+purchas
+purchaseth
+purchas
+pure
+pure
+purer
+purest
+purg
+purgat
+purg
+purgatori
+purg
+purg
+purger
+purg
+purifi
+purifi
+puritan
+puriti
+purlieu
+purpl
+purpl
+purpl
+purport
+purpo
+purpos
+purpos
+purpos
+purpos
+purposeth
+purpos
+purr
+pur
+purs
+pursent
+purs
+pursu
+pursu
+pursu
+pursuer
+pursu
+pursuest
+pursueth
+pursu
+pursuit
+pursuiv
+pursuiv
+pursi
+puru
+purveyor
+push
+push
+pusillanim
+put
+putrefi
+putrifi
+put
+putter
+put
+puttock
+puzzel
+puzzl
+puzzl
+puzzl
+py
+pygmalion
+pygmi
+pygmi
+pyramid
+pyramid
+pyramid
+pyrami
+pyramis
+pyramu
+pyrenean
+pyrrhu
+pythagora
+qu
+quadrangl
+quae
+quaff
+quaf
+quagmir
+quail
+quail
+quail
+quaint
+quaintli
+quak
+quak
+quak
+qualif
+qualifi
+qualifi
+qualifi
+qualifi
+qualit
+qualiti
+qualiti
+qualm
+qualmish
+quam
+quand
+quando
+quantiti
+quantiti
+quar
+quarrel
+quarrel
+quarrel
+quarrel
+quarrel
+quarrel
+quarrelsom
+quarri
+quarri
+quart
+quarter
+quarter
+quarter
+quarter
+quart
+quasi
+quat
+quatch
+quai
+que
+quean
+quea
+queasi
+queasi
+queen
+queen
+quell
+queller
+quench
+quench
+quench
+quenchless
+quern
+quest
+questant
+question
+question
+question
+question
+questionless
+question
+questrist
+quest
+queubu
+qui
+quick
+quicken
+quicken
+quicker
+quicklier
+quickli
+quick
+quicksand
+quicksand
+quicksilverr
+quid
+quidditi
+quiddit
+quier
+quiet
+quieter
+quietli
+quiet
+quietu
+quill
+quillet
+quill
+quilt
+quinapalu
+quinc
+quinc
+quintain
+quintess
+quintu
+quip
+quip
+quir
+quir
+quirk
+quirk
+qui
+quit
+quit
+quit
+quittanc
+quit
+quit
+quiver
+quiver
+quiver
+quo
+quod
+quoif
+quoint
+quoit
+quoit
+quondam
+quoniam
+quot
+quot
+quot
+quoth
+quotidian
+r
+rabbit
+rabbl
+rabblement
+race
+rack
+racker
+racket
+racket
+rack
+rack
+radianc
+radiant
+radish
+rafe
+raft
+rag
+rage
+rage
+rageth
+ragg
+rag
+ragged
+rage
+ragozin
+rag
+rah
+rail
+rail
+railer
+railest
+raileth
+rail
+rail
+raiment
+rain
+rainbow
+raineth
+rain
+rainold
+rain
+raini
+rai
+rais
+rais
+rais
+rais
+raisin
+rak
+rake
+raker
+rake
+ral
+rald
+ralph
+ram
+rambur
+ramm
+rampallian
+rampant
+ramp
+rampir
+ramp
+ram
+ramsei
+ramston
+ran
+ranc
+rancor
+rancor
+rancour
+random
+rang
+rang
+rang
+ranger
+rang
+rang
+rank
+ranker
+rankest
+rank
+rankl
+rankli
+rank
+rank
+ransack
+ransack
+ransom
+ransom
+ransom
+ransomless
+ransom
+rant
+rant
+rap
+rape
+rape
+rapier
+rapier
+rapin
+rap
+rapt
+raptur
+raptur
+rar
+rare
+rare
+rare
+rarer
+rarest
+rariti
+rariti
+rascal
+rascalliest
+rascal
+rascal
+rase
+rash
+rasher
+rashli
+rash
+rat
+ratcatch
+ratcliff
+rate
+rate
+rate
+rate
+rather
+ratherest
+ratifi
+ratifi
+ratifi
+rate
+ration
+ratolorum
+rat
+ratsban
+rattl
+rattl
+rattl
+ratur
+raught
+rav
+rave
+ravel
+raven
+raven
+raven
+raven
+ravenspurgh
+rave
+ravin
+rave
+ravish
+ravish
+ravish
+ravish
+ravish
+raw
+rawer
+rawli
+raw
+rai
+rai
+rai
+raz
+raze
+raze
+raze
+razeth
+raze
+razor
+razor
+razor
+razur
+re
+reach
+reach
+reacheth
+reach
+read
+reader
+readiest
+readili
+readi
+read
+readin
+read
+readi
+real
+realli
+realm
+realm
+reap
+reaper
+reap
+reap
+rear
+rear
+rearward
+reason
+reason
+reason
+reason
+reason
+reasonless
+reason
+reav
+rebat
+rebato
+rebeck
+rebel
+rebel
+rebel
+rebellion
+rebelli
+rebel
+rebound
+rebuk
+rebuk
+rebuk
+rebuk
+rebuk
+rebu
+recal
+recant
+recant
+recant
+recant
+receipt
+receipt
+receiv
+receiv
+receiv
+receiv
+receiv
+receivest
+receiveth
+receiv
+receptacl
+rechat
+reciproc
+reciproc
+recit
+recit
+reciterai
+reck
+reck
+reckless
+reckon
+reckon
+reckon
+reckon
+reck
+reclaim
+reclaim
+reclus
+recogniz
+recogniz
+recoil
+recoil
+recollect
+recomfort
+recomfortur
+recommend
+recommend
+recommend
+recompen
+recompens
+reconcil
+reconcil
+reconcil
+reconcil
+reconcil
+reconcil
+reconcili
+record
+record
+record
+record
+record
+record
+recount
+recount
+recount
+recount
+recount
+recours
+recov
+recov
+recover
+recov
+recoveri
+recov
+recoveri
+recreant
+recreant
+recreat
+recreat
+rectifi
+rector
+rectorship
+recur
+recur
+red
+redbreast
+redder
+reddest
+rede
+redeem
+redeem
+redeem
+redeem
+redeem
+redeliv
+redempt
+redim
+red
+redoubl
+redoubt
+redound
+redress
+redress
+redress
+reduc
+reechi
+reed
+reed
+reek
+reek
+reek
+reeki
+reel
+reeleth
+reel
+reel
+refel
+refer
+refer
+referr
+refer
+refigur
+refin
+refin
+reflect
+reflect
+reflect
+reflex
+reform
+reform
+reform
+refractori
+refrain
+refresh
+refresh
+reft
+reft
+refug
+refu
+refus
+refus
+refus
+refusest
+refus
+reg
+regal
+regalia
+regan
+regard
+regard
+regard
+regardfulli
+regard
+regard
+regener
+regent
+regentship
+regia
+regiment
+regiment
+regina
+region
+region
+regist
+regist
+regist
+regreet
+regreet
+regress
+reguerdon
+regular
+rehear
+rehears
+rehears
+reign
+reign
+reignier
+reign
+reign
+rein
+reinforc
+reinforc
+reinforc
+rein
+reiter
+reject
+reject
+rejoic
+rejoic
+rejoic
+rejoiceth
+rejoic
+rejoicingli
+rejoindur
+rejourn
+rel
+relaps
+relat
+relat
+relat
+relat
+rel
+relea
+releas
+releas
+releas
+relent
+relent
+relent
+relianc
+relic
+relief
+reliev
+reliev
+reliev
+reliev
+reliev
+religion
+religion
+religi
+religi
+relinquish
+reliqu
+reliquit
+relish
+relum
+reli
+reli
+remain
+remaind
+remaind
+remain
+remaineth
+remain
+remain
+remark
+remark
+remedi
+remedi
+remedi
+remedi
+rememb
+rememb
+rememb
+rememb
+remembr
+remembranc
+remembr
+remercimen
+remiss
+remiss
+remiss
+remit
+remnant
+remnant
+remonstr
+remors
+remors
+remorseless
+remot
+remot
+remov
+remov
+remov
+removed
+remov
+remov
+remov
+remuner
+remuner
+renc
+rend
+render
+render
+render
+rendezv
+renegado
+reneg
+reneg
+renew
+renew
+renewest
+renounc
+renounc
+renounc
+renowm
+renown
+renown
+rent
+rent
+repaid
+repair
+repair
+repair
+repair
+repass
+repast
+repastur
+repai
+repai
+repai
+repeal
+repeal
+repeal
+repeat
+repeat
+repeat
+repeat
+repel
+repent
+repent
+repent
+repent
+repent
+repent
+repetit
+repetit
+repin
+repin
+repin
+replant
+replenish
+replenish
+replet
+replic
+repli
+repli
+repliest
+repli
+repli
+report
+report
+report
+reportest
+report
+reportingli
+report
+repos
+repos
+reposeth
+repos
+repossess
+reprehend
+reprehend
+reprehend
+repres
+repres
+repriev
+repriev
+repris
+reproach
+reproach
+reproach
+reproachfulli
+reprob
+reprob
+reproof
+reprov
+reprov
+reprov
+reprov
+reprov
+repugn
+repugn
+repugn
+repuls
+repuls
+repurcha
+repur
+reput
+reput
+reput
+reputeless
+reput
+reput
+request
+request
+request
+request
+requiem
+requir
+requir
+requir
+requir
+requireth
+requir
+requisit
+requisit
+requit
+requit
+requit
+requit
+requit
+rer
+rere
+rer
+rescu
+rescu
+rescu
+rescu
+rescu
+resembl
+resembl
+resembl
+resembl
+resembleth
+resembl
+reserv
+reserv
+reserv
+reserv
+reserv
+resid
+resid
+resid
+resid
+resid
+residu
+resign
+resign
+resist
+resist
+resist
+resist
+resist
+resolut
+resolut
+resolut
+resolut
+resolv
+resolv
+resolv
+resolvedli
+resolv
+resolveth
+resort
+resort
+resound
+resound
+respeak
+respect
+respect
+respect
+respect
+respect
+respect
+respic
+respit
+respit
+respons
+respos
+ress
+rest
+rest
+resteth
+rest
+rest
+restitut
+restless
+restor
+restor
+restor
+restor
+restor
+restor
+restor
+restrain
+restrain
+restrain
+restrain
+restraint
+rest
+resti
+resum
+resum
+resum
+resurrect
+retail
+retail
+retain
+retain
+retain
+retel
+retent
+retent
+retinu
+retir
+retir
+retir
+retir
+retir
+retir
+retold
+retort
+retort
+retourn
+retract
+retreat
+retrograd
+ret
+return
+return
+returnest
+returneth
+return
+return
+revania
+reveal
+reveal
+revel
+revel
+revel
+revel
+revel
+revel
+revelri
+revel
+reveng
+reveng
+reveng
+reveng
+reveng
+reveng
+reveng
+reveng
+reveng
+revengingli
+revenu
+revenu
+reverb
+reverber
+reverb
+reverenc
+rever
+reverend
+rever
+rever
+rever
+revers
+revers
+revert
+review
+reviewest
+revil
+revil
+revisit
+reviv
+reviv
+reviv
+reviv
+revok
+revok
+revok
+revolt
+revolt
+revolt
+revolt
+revolut
+revolut
+revolv
+revolv
+reward
+reward
+reward
+reward
+reward
+reword
+reword
+rex
+rei
+reynaldo
+rford
+rful
+rfull
+rhapsodi
+rheim
+rhenish
+rhesu
+rhetor
+rheum
+rheumat
+rheum
+rheumi
+rhinocero
+rhode
+rhodop
+rhubarb
+rhym
+rhyme
+rhymer
+rhyme
+rhyme
+rialto
+rib
+ribald
+riband
+riband
+ribaudr
+ribb
+rib
+ribbon
+ribbon
+rib
+rice
+rich
+richard
+richer
+rich
+richest
+richli
+richmond
+richmond
+rid
+riddanc
+ridden
+riddl
+riddl
+riddl
+ride
+rider
+rider
+ride
+ridest
+rideth
+ridg
+ridg
+ridicul
+ride
+rid
+rien
+ri
+rifl
+rift
+rift
+rig
+rigg
+riggish
+right
+righteou
+righteous
+right
+rightfulli
+rightli
+right
+rigol
+rigor
+rigor
+rigour
+ril
+rim
+rin
+rinaldo
+rind
+ring
+ring
+ringlead
+ringlet
+ring
+ringwood
+riot
+rioter
+riot
+riotou
+riot
+rip
+ripe
+ripe
+ripen
+ripen
+ripe
+ripen
+ripen
+riper
+ripest
+ripe
+ripp
+rip
+rise
+risen
+rise
+riseth
+rish
+rise
+rite
+rite
+rivag
+rival
+rival
+rival
+rival
+rive
+rive
+rivel
+river
+river
+rivet
+rivet
+rivet
+rivo
+rj
+rless
+road
+road
+roam
+roam
+roan
+roar
+roar
+roarer
+roar
+roar
+roast
+roast
+rob
+roba
+roba
+robb
+rob
+robber
+robber
+robberi
+rob
+robe
+robe
+robert
+robe
+robin
+rob
+robusti
+rochest
+rochford
+rock
+rock
+rocki
+rod
+rode
+roderigo
+rod
+roe
+roe
+roger
+rogero
+rogu
+rogueri
+rogu
+roguish
+roi
+roist
+roll
+roll
+roll
+roll
+rom
+romag
+roman
+romano
+romano
+roman
+rome
+romeo
+romish
+rondur
+ronyon
+rood
+roof
+roof
+rook
+rook
+rooki
+room
+room
+root
+root
+rootedli
+rooteth
+root
+root
+rope
+roperi
+rope
+rope
+ro
+rosalind
+rosalinda
+rosalind
+rosalin
+rosciu
+rose
+rose
+rosemari
+rosencrantz
+rose
+ross
+rosi
+rot
+rote
+rote
+rother
+rotherham
+rot
+rot
+rotten
+rotten
+rot
+rotund
+rouen
+rough
+rougher
+roughest
+roughli
+rough
+round
+round
+roundel
+rounder
+roundest
+round
+roundli
+round
+roundur
+rou
+rous
+rous
+rousillon
+rousli
+roussi
+rout
+rout
+rout
+rove
+rover
+row
+rowel
+rowland
+rowland
+roi
+royal
+royal
+royal
+royalti
+royalti
+roynish
+rs
+rt
+rub
+rubb
+rub
+rubbish
+rubi
+rubiou
+rub
+rubi
+rud
+rudand
+rudder
+ruddi
+ruddock
+ruddi
+rude
+rude
+rude
+ruder
+rudesbi
+rudest
+rudiment
+rue
+ru
+ruff
+ruffian
+ruffian
+ruffl
+ruffl
+ruff
+rug
+rugbi
+rugemount
+rug
+ruin
+ruinat
+ruin
+ruin
+ruinou
+ruin
+rul
+rule
+rule
+ruler
+ruler
+rule
+rule
+rumbl
+ruminai
+ruminat
+rumin
+rumin
+rumin
+rumin
+rumor
+rumour
+rumour
+rumour
+rump
+run
+runag
+runag
+runawai
+runawai
+rung
+runn
+runner
+runner
+run
+run
+ruptur
+ruptur
+rural
+rush
+rush
+rush
+rushl
+rushi
+russet
+russia
+russian
+russian
+rust
+rust
+rustic
+rustic
+rustic
+rustl
+rustl
+rust
+rusti
+rut
+ruth
+ruth
+ruthless
+rutland
+ruttish
+ry
+rye
+ryth
+s
+sa
+saba
+sabbath
+sabl
+sabl
+sack
+sackbut
+sackcloth
+sack
+sackerson
+sack
+sacrament
+sacr
+sacrif
+sacrific
+sacrific
+sacrific
+sacrifici
+sacrif
+sacrilegi
+sacr
+sad
+sadder
+saddest
+saddl
+saddler
+saddl
+sadli
+sad
+saf
+safe
+safeguard
+safe
+safer
+safest
+safeti
+safeti
+saffron
+sag
+sage
+sagittari
+said
+saidst
+sail
+sail
+sailmak
+sailor
+sailor
+sail
+sain
+saint
+saint
+saintlik
+saint
+saith
+sake
+sake
+sala
+salad
+salamand
+salari
+sale
+salerio
+salicam
+saliqu
+salisburi
+sall
+sallet
+sallet
+salli
+sallow
+salli
+salmon
+salmon
+salt
+salter
+saltier
+salt
+saltpetr
+salut
+salut
+salut
+salut
+salut
+saluteth
+salv
+salvat
+salv
+salv
+same
+samingo
+samp
+sampir
+sampl
+sampler
+sampson
+samson
+samson
+sancta
+sanctifi
+sanctifi
+sanctifi
+sanctimoni
+sanctimoni
+sanctimoni
+sanctiti
+sanctiti
+sanctuar
+sanctuari
+sand
+sandal
+sandbag
+sand
+sand
+sandi
+sandi
+sang
+sanguin
+sangui
+saniti
+san
+santrail
+sap
+sapient
+sapit
+sapless
+sapl
+sapphir
+sapphir
+saracen
+sarcenet
+sard
+sardian
+sardinia
+sardi
+sarum
+sat
+satan
+satchel
+sate
+sate
+satiat
+satieti
+satin
+satir
+satir
+sati
+satisfact
+satisfi
+satisfi
+satisfi
+satisfi
+saturdai
+saturdai
+saturn
+saturnin
+saturninu
+satyr
+satyr
+sauc
+sauc
+sauc
+saucer
+sauc
+saucili
+sauci
+sauci
+sauf
+saunder
+sav
+savag
+savag
+savag
+savageri
+savag
+save
+save
+save
+save
+saviour
+savori
+savour
+savour
+savour
+savouri
+savoi
+saw
+saw
+sawest
+sawn
+sawpit
+saw
+sawyer
+saxon
+saxoni
+saxton
+sai
+sayest
+sai
+sai
+sai
+sayst
+sblood
+sc
+scab
+scabbard
+scab
+scaffold
+scaffoldag
+scal
+scald
+scald
+scald
+scale
+scale
+scale
+scale
+scall
+scalp
+scalp
+scali
+scambl
+scambl
+scamel
+scan
+scandal
+scandaliz
+scandal
+scandi
+scann
+scant
+scant
+scanter
+scant
+scantl
+scant
+scap
+scape
+scape
+scape
+scapeth
+scar
+scarc
+scarc
+scarciti
+scare
+scarecrow
+scarecrow
+scarf
+scarf
+scarf
+scare
+scarlet
+scarr
+scarr
+scar
+scaru
+scath
+scath
+scath
+scatt
+scatter
+scatter
+scatter
+scatter
+scelera
+scelerisqu
+scene
+scene
+scent
+scent
+scept
+scepter
+sceptr
+sceptr
+sceptr
+schedul
+schedul
+scholar
+scholarli
+scholar
+school
+schoolboi
+schoolboi
+schoolfellow
+school
+schoolmast
+schoolmast
+school
+sciatica
+sciatica
+scienc
+scienc
+scimitar
+scion
+scion
+scissor
+scoff
+scoffer
+scof
+scoff
+scoggin
+scold
+scold
+scold
+sconc
+scone
+scope
+scope
+scorch
+scorch
+score
+score
+score
+score
+scorn
+scorn
+scorn
+scornfulli
+scorn
+scorn
+scorpion
+scorpion
+scot
+scotch
+scotch
+scotland
+scot
+scottish
+scoundrel
+scour
+scour
+scourg
+scourg
+scour
+scout
+scout
+scowl
+scrap
+scrape
+scrape
+scrap
+scratch
+scratch
+scratch
+scream
+scream
+screech
+screech
+screen
+screen
+screw
+screw
+scribbl
+scribbl
+scribe
+scribe
+scrimer
+scrip
+scrippag
+scriptur
+scriptur
+scriven
+scroll
+scroll
+scroop
+scrowl
+scroyl
+scrub
+scrupl
+scrupl
+scrupul
+scuffl
+scuffl
+scullion
+scull
+scum
+scurril
+scurril
+scurril
+scurvi
+scuse
+scut
+scutcheon
+scutcheon
+scylla
+scyth
+scyth
+scythia
+scythian
+sdeath
+se
+sea
+seacoal
+seafar
+seal
+seal
+seal
+seal
+seam
+seamen
+seami
+seaport
+sear
+searc
+search
+searcher
+search
+searcheth
+search
+sear
+sea
+seasick
+seasid
+season
+season
+season
+seat
+seat
+seat
+sebastian
+second
+secondarili
+secondari
+second
+second
+secreci
+secret
+secretari
+secretari
+secretli
+secret
+sect
+sectari
+sect
+secundo
+secur
+secur
+secur
+secur
+sedg
+sedg
+sedg
+sedgi
+sedit
+sediti
+seduc
+seduc
+seduc
+seduc
+seduc
+see
+seed
+seed
+seed
+seed
+seedsman
+seein
+see
+seek
+seek
+seek
+seel
+seel
+seeli
+seem
+seem
+seemer
+seemest
+seemeth
+seem
+seemingli
+seemli
+seem
+seen
+seer
+see
+sees
+seest
+seeth
+seeth
+seeth
+seet
+segreg
+seigneur
+seigneur
+seiz
+seiz
+seiz
+seiz
+seizeth
+seiz
+seizur
+seld
+seldom
+select
+seleucu
+self
+selfsam
+sell
+seller
+sell
+sell
+selv
+semblabl
+semblabl
+semblanc
+semblanc
+sembl
+semi
+semicircl
+semirami
+semper
+semproniu
+senat
+senat
+senat
+send
+sender
+sendeth
+send
+send
+seneca
+senior
+seniori
+seni
+sennet
+senoi
+sens
+senseless
+sens
+sensibl
+sensibl
+sensual
+sensual
+sent
+sentenc
+sentenc
+sentenc
+sententi
+sentinel
+sentinel
+separ
+separ
+separ
+separ
+separ
+septentrion
+sepulchr
+sepulchr
+sepulchr
+sequel
+sequenc
+sequent
+sequest
+sequest
+sequestr
+sere
+sereni
+serg
+sergeant
+seriou
+serious
+sermon
+sermon
+serpent
+serpentin
+serpent
+serpigo
+serv
+servant
+servant
+servant
+serv
+serv
+server
+serv
+serveth
+servic
+servic
+servic
+servil
+servil
+serviliu
+serv
+servingman
+servingmen
+serviteur
+servitor
+servitor
+servitud
+sessa
+session
+session
+sesto
+set
+setebo
+set
+setter
+set
+settl
+settl
+settlest
+settl
+sev
+seven
+sevenfold
+sevennight
+seventeen
+seventh
+seventi
+sever
+sever
+sever
+sever
+sever
+sever
+sever
+severest
+sever
+sever
+severn
+sever
+sew
+seward
+sewer
+sew
+sex
+sex
+sexton
+sextu
+seymour
+seyton
+sfoot
+sh
+shackl
+shackl
+shade
+shade
+shadow
+shadow
+shadow
+shadow
+shadowi
+shadi
+shafalu
+shaft
+shaft
+shag
+shak
+shake
+shake
+shaken
+shake
+shake
+shale
+shall
+shalleng
+shallow
+shallowest
+shallowli
+shallow
+shalt
+sham
+shambl
+shame
+shame
+shame
+shamefulli
+shameless
+shame
+shamest
+shame
+shank
+shank
+shap
+shape
+shape
+shapeless
+shapen
+shape
+shape
+shar
+shard
+shard
+shard
+share
+share
+sharer
+share
+share
+shark
+sharp
+sharpen
+sharpen
+sharpen
+sharper
+sharpest
+sharpli
+sharp
+sharp
+shatter
+shav
+shave
+shaven
+shaw
+she
+sheaf
+sheal
+shear
+shearer
+shear
+shearman
+shear
+sheath
+sheath
+sheath
+sheath
+sheath
+sheav
+sheav
+shed
+shed
+shed
+sheen
+sheep
+sheepcot
+sheepcot
+sheep
+sheepskin
+sheer
+sheet
+sheet
+sheet
+sheffield
+shelf
+shell
+shell
+shelt
+shelter
+shelter
+shelv
+shelv
+shelvi
+shent
+shepherd
+shepherd
+shepherdess
+shepherdess
+shepherd
+sher
+sheriff
+sherri
+she
+sheweth
+shield
+shield
+shield
+shift
+shift
+shift
+shift
+shill
+shill
+shin
+shine
+shine
+shineth
+shine
+shin
+shini
+ship
+shipboard
+shipman
+shipmast
+shipmen
+shipp
+ship
+ship
+ship
+shipt
+shipwreck
+shipwreck
+shipwright
+shipwright
+shire
+shirlei
+shirt
+shirt
+shive
+shiver
+shiver
+shiver
+shoal
+shoal
+shock
+shock
+shod
+shoe
+shoe
+shoemak
+shoe
+shog
+shone
+shook
+shoon
+shoot
+shooter
+shooti
+shoot
+shoot
+shop
+shop
+shore
+shore
+shorn
+short
+shortcak
+shorten
+shorten
+shorten
+shorter
+shortli
+short
+shot
+shotten
+shough
+should
+shoulder
+shoulder
+shoulder
+shouldst
+shout
+shout
+shout
+shout
+shov
+shove
+shovel
+shovel
+show
+show
+shower
+shower
+showest
+show
+shown
+show
+shred
+shrew
+shrewd
+shrewdli
+shrewd
+shrewish
+shrewishli
+shrewish
+shrew
+shrewsburi
+shriek
+shriek
+shriek
+shriev
+shrift
+shrill
+shriller
+shrill
+shrilli
+shrimp
+shrine
+shrink
+shrink
+shrink
+shriv
+shrive
+shriver
+shrive
+shrive
+shroud
+shroud
+shroud
+shroud
+shrove
+shrow
+shrow
+shrub
+shrub
+shrug
+shrug
+shrunk
+shudd
+shudder
+shuffl
+shuffl
+shuffl
+shuffl
+shun
+shunless
+shunn
+shun
+shun
+shun
+shut
+shut
+shuttl
+shy
+shylock
+si
+sibyl
+sibylla
+sibyl
+sicil
+sicilia
+sicilian
+siciliu
+sicil
+sicili
+siciniu
+sick
+sicken
+sicken
+sicker
+sickl
+sicklemen
+sickli
+sickli
+sickli
+sick
+sicl
+sicyon
+side
+side
+side
+sieg
+sieg
+sienna
+si
+siev
+sift
+sift
+sigeia
+sigh
+sigh
+sigh
+sigh
+sight
+sight
+sightless
+sightli
+sight
+sign
+signal
+signet
+signieur
+signific
+signific
+signifi
+signifi
+signifi
+signifi
+signior
+signiori
+signior
+signiori
+signor
+signori
+sign
+signum
+silenc
+silenc
+silenc
+silenc
+silent
+silent
+siliu
+silk
+silken
+silkman
+silk
+silliest
+silli
+sill
+silli
+silva
+silver
+silver
+silverli
+silvia
+silviu
+sima
+simil
+simil
+simoi
+simon
+simoni
+simp
+simpcox
+simpl
+simpl
+simpler
+simpl
+simplic
+simpli
+simular
+simul
+sin
+sinc
+sincer
+sincer
+sincer
+sinel
+sinew
+sinew
+sinew
+sinewi
+sin
+sinfulli
+sing
+sing
+sing
+singer
+sing
+singeth
+sing
+singl
+singl
+singl
+singli
+sing
+singular
+singularit
+singular
+singular
+singul
+sinist
+sink
+sink
+sink
+sinn
+sinner
+sinner
+sin
+sinon
+sin
+sip
+sip
+sir
+sire
+siren
+sirrah
+sir
+sist
+sister
+sisterhood
+sisterli
+sister
+sit
+sith
+sithenc
+sit
+sit
+situat
+situat
+situat
+siward
+six
+sixpenc
+sixpenc
+sixpenni
+sixteen
+sixth
+sixti
+siz
+size
+size
+sizzl
+skain
+skambl
+skein
+skelter
+ski
+skil
+skilfulli
+skill
+skilless
+skillet
+skill
+skill
+skim
+skimbl
+skin
+skinker
+skinni
+skin
+skip
+skipp
+skipper
+skip
+skirmish
+skirmish
+skirr
+skirt
+skirt
+skittish
+skulk
+skull
+skull
+sky
+skyei
+skyish
+slab
+slack
+slackli
+slack
+slain
+slake
+sland
+slander
+slander
+slander
+slander
+slander
+slander
+slander
+slash
+slaught
+slaughter
+slaughter
+slaughter
+slaughterman
+slaughtermen
+slaughter
+slaughter
+slave
+slaver
+slaveri
+slave
+slavish
+slai
+slayeth
+slai
+slai
+sleav
+sled
+sleek
+sleekli
+sleep
+sleeper
+sleeper
+sleepest
+sleep
+sleep
+sleepi
+sleev
+sleev
+sleid
+sleid
+sleight
+sleight
+slender
+slender
+slenderli
+slept
+slew
+slewest
+slice
+slid
+slide
+slide
+slide
+slight
+slight
+slightest
+slightli
+slight
+slight
+slili
+slime
+slimi
+sling
+slink
+slip
+slipp
+slipper
+slipper
+slipperi
+slip
+slish
+slit
+sliver
+slobb
+slomber
+slop
+slope
+slop
+sloth
+sloth
+slough
+slovenli
+slovenri
+slow
+slower
+slowli
+slow
+slubber
+slug
+sluggard
+sluggardiz
+sluggish
+sluic
+slumb
+slumber
+slumber
+slumberi
+slunk
+slut
+slut
+slutteri
+sluttish
+sluttish
+sly
+sly
+smack
+smack
+smack
+small
+smaller
+smallest
+small
+smalu
+smart
+smart
+smartli
+smatch
+smatter
+smear
+smell
+smell
+smell
+smelt
+smil
+smile
+smile
+smile
+smilest
+smilet
+smile
+smilingli
+smirch
+smirch
+smit
+smite
+smite
+smith
+smithfield
+smock
+smock
+smok
+smoke
+smoke
+smoke
+smoke
+smoki
+smooth
+smooth
+smooth
+smoothli
+smooth
+smooth
+smote
+smoth
+smother
+smother
+smother
+smug
+smulkin
+smutch
+snaffl
+snail
+snail
+snake
+snake
+snaki
+snap
+snapp
+snapper
+snar
+snare
+snare
+snarl
+snarleth
+snarl
+snatch
+snatcher
+snatch
+snatch
+sneak
+sneak
+sneap
+sneap
+sneck
+snip
+snipe
+snipt
+snore
+snore
+snore
+snort
+snout
+snow
+snowbal
+snow
+snowi
+snuff
+snuff
+snug
+so
+soak
+soak
+soak
+soar
+soar
+soar
+sob
+sob
+sober
+soberli
+sobrieti
+sob
+sociabl
+societi
+societi
+sock
+socrat
+sod
+sodden
+soe
+soever
+soft
+soften
+soften
+softer
+softest
+softli
+soft
+soil
+soil
+soilur
+soit
+sojourn
+sol
+sola
+solac
+solanio
+sold
+soldat
+solder
+soldest
+soldier
+soldier
+soldiership
+sole
+sole
+solem
+solemn
+solem
+solemn
+solemn
+solemniz
+solemn
+solemn
+solemnli
+sole
+solicit
+solicit
+solicit
+solicit
+solicit
+solicitor
+solicit
+solid
+solidar
+solid
+solinu
+solitari
+solomon
+solon
+solum
+solu
+solyman
+some
+somebodi
+someon
+somerset
+somervil
+someth
+sometim
+sometim
+somev
+somewhat
+somewher
+somewhith
+somm
+son
+sonanc
+song
+song
+sonnet
+sonnet
+sonnet
+son
+sont
+sonti
+soon
+sooner
+soonest
+sooth
+sooth
+soother
+sooth
+soothsai
+soothsay
+sooti
+sop
+sophist
+sophist
+sophi
+sop
+sorcer
+sorcer
+sorceress
+sorceri
+sorceri
+sore
+sorel
+sore
+sorer
+sore
+sorrier
+sorriest
+sorrow
+sorrow
+sorrowest
+sorrow
+sorrow
+sorrow
+sorri
+sort
+sortanc
+sort
+sort
+sort
+sossiu
+sot
+soto
+sot
+sottish
+soud
+sought
+soul
+sould
+soulless
+soul
+sound
+sound
+sounder
+soundest
+sound
+soundless
+soundli
+sound
+soundpost
+sound
+sour
+sourc
+sourc
+sourest
+sourli
+sour
+sou
+sous
+south
+southam
+southampton
+southerli
+southern
+southward
+southwark
+southwel
+souviendrai
+sov
+sovereign
+sovereignest
+sovereignli
+sovereignti
+sovereignvour
+sow
+sow
+sowl
+sowter
+space
+space
+spaciou
+spade
+spade
+spain
+spak
+spake
+spakest
+span
+spangl
+spangl
+spaniard
+spaniel
+spaniel
+spanish
+spann
+span
+spar
+spare
+spare
+spare
+sparingli
+spark
+sparkl
+sparkl
+sparkl
+spark
+sparrow
+sparrow
+sparta
+spartan
+spavin
+spavin
+spawn
+speak
+speaker
+speaker
+speakest
+speaketh
+speak
+speak
+spear
+speargrass
+spear
+special
+special
+special
+specialti
+specialti
+specifi
+specious
+spectacl
+spectacl
+spectacl
+spectat
+spectatorship
+specul
+specul
+specul
+sped
+speech
+speech
+speechless
+speed
+speed
+speedier
+speediest
+speedili
+speedi
+speed
+speed
+speedi
+speen
+spell
+spell
+spell
+spelt
+spencer
+spend
+spendest
+spend
+spend
+spendthrift
+spent
+sperato
+sperm
+spero
+sperr
+spher
+sphere
+sphere
+sphere
+spheric
+spheri
+sphinx
+spice
+spice
+spiceri
+spice
+spider
+spider
+spi
+spi
+spieth
+spightfulli
+spigot
+spill
+spill
+spill
+spilt
+spilth
+spin
+spinii
+spinner
+spinster
+spinster
+spire
+spirit
+spirit
+spiritless
+spirit
+spiritu
+spiritualti
+spirt
+spit
+spital
+spite
+spite
+spite
+spite
+spit
+spit
+spit
+splai
+spleen
+spleen
+spleen
+spleeni
+splendour
+splenit
+splinter
+splinter
+split
+split
+split
+split
+spoil
+spoil
+spok
+spoke
+spoken
+spoke
+spokesman
+spong
+spongi
+spoon
+spoon
+sport
+sport
+sport
+sportiv
+sport
+spot
+spotless
+spot
+spot
+spousal
+spous
+spout
+spout
+spout
+sprag
+sprang
+sprat
+sprawl
+sprai
+sprai
+spread
+spread
+spread
+spright
+spright
+sprightli
+sprig
+spring
+spring
+spring
+springeth
+springhalt
+spring
+spring
+springtim
+sprinkl
+sprinkl
+sprite
+sprite
+sprite
+sprite
+sprite
+sprout
+spruce
+sprung
+spun
+spur
+spurio
+spurn
+spurn
+spurr
+spurrer
+spur
+spur
+spy
+spy
+squabbl
+squadron
+squadron
+squand
+squar
+squar
+squarer
+squar
+squash
+squeak
+squeak
+squeal
+squeal
+squeez
+squeez
+squel
+squier
+squint
+squini
+squir
+squir
+squirrel
+st
+stab
+stabb
+stab
+stab
+stabl
+stabl
+stabl
+stablish
+stablish
+stab
+stack
+staff
+stafford
+stafford
+staffordshir
+stag
+stage
+stage
+stagger
+stagger
+stagger
+stag
+staid
+staider
+stain
+stain
+stain
+staineth
+stain
+stainless
+stain
+stair
+stair
+stake
+stake
+stale
+stale
+stalk
+stalk
+stalk
+stall
+stall
+stall
+stamford
+stammer
+stamp
+stamp
+stamp
+stanch
+stanchless
+stand
+standard
+standard
+stander
+stander
+standest
+standeth
+stand
+stand
+staniel
+stanlei
+stanz
+stanzo
+stanzo
+stapl
+stapl
+star
+stare
+stare
+stare
+stare
+stare
+stark
+starkli
+starlight
+starl
+starr
+starri
+star
+start
+start
+start
+startingli
+startl
+startl
+start
+starv
+starv
+starv
+starvelackei
+starvel
+starveth
+starv
+state
+stateli
+state
+state
+statesman
+statesmen
+statiliu
+station
+statist
+statist
+statu
+statu
+statur
+statur
+statut
+statut
+stave
+stave
+stai
+stai
+stayest
+stai
+stai
+stead
+stead
+steadfast
+steadier
+stead
+steal
+stealer
+stealer
+steal
+steal
+stealth
+stealthi
+steed
+steed
+steel
+steel
+steeli
+steep
+steep
+steepl
+steepl
+steep
+steepi
+steer
+steerag
+steer
+steer
+stell
+stem
+stem
+stench
+step
+stepdam
+stephano
+stephen
+stepmoth
+stepp
+step
+step
+steril
+steril
+sterl
+stern
+sternag
+sterner
+sternest
+stern
+steterat
+stew
+steward
+steward
+stewardship
+stew
+stew
+stick
+stick
+stickler
+stick
+stiff
+stiffen
+stiffli
+stifl
+stifl
+stifl
+stigmat
+stigmat
+stile
+still
+stiller
+stillest
+still
+stilli
+sting
+sting
+stingless
+sting
+stink
+stink
+stinkingli
+stink
+stint
+stint
+stint
+stir
+stirr
+stir
+stirrer
+stirrer
+stirreth
+stir
+stirrup
+stirrup
+stir
+stitcheri
+stitch
+stithi
+stithi
+stoccado
+stoccata
+stock
+stockfish
+stock
+stock
+stockish
+stock
+stog
+stog
+stoic
+stokesli
+stol
+stole
+stolen
+stolest
+stomach
+stomach
+stomach
+stomach
+ston
+stone
+stonecutt
+stone
+stonish
+stoni
+stood
+stool
+stool
+stoop
+stoop
+stoop
+stop
+stope
+stopp
+stop
+stop
+stop
+stor
+store
+storehous
+storehous
+store
+stori
+storm
+storm
+storm
+storm
+stormi
+stori
+stoup
+stoup
+stout
+stouter
+stoutli
+stout
+stover
+stow
+stowag
+stow
+strachi
+straggler
+straggl
+straight
+straightest
+straightwai
+strain
+strain
+strain
+strain
+strait
+strait
+straiter
+straitli
+strait
+strait
+strand
+strang
+strang
+strang
+stranger
+stranger
+strangest
+strangl
+strangl
+strangler
+strangl
+strangl
+strappado
+strap
+stratagem
+stratagem
+stratford
+strato
+straw
+strawberri
+strawberri
+straw
+strawi
+strai
+strai
+strai
+streak
+streak
+stream
+streamer
+stream
+stream
+strech
+street
+street
+strength
+strengthen
+strengthen
+strengthless
+strength
+stretch
+stretch
+stretch
+stretch
+strew
+strew
+strew
+strewment
+stricken
+strict
+stricter
+strictest
+strictli
+strictur
+stride
+stride
+stride
+strife
+strife
+strik
+strike
+striker
+strike
+strikest
+strike
+string
+stringless
+string
+strip
+stripe
+stripl
+stripl
+stripp
+strip
+striv
+strive
+strive
+strive
+strok
+stroke
+stroke
+strond
+strond
+strong
+stronger
+strongest
+strongli
+strook
+strosser
+strove
+strown
+stroi
+struck
+strucken
+struggl
+struggl
+struggl
+strumpet
+strumpet
+strumpet
+strung
+strut
+strut
+strut
+strut
+stubbl
+stubborn
+stubbornest
+stubbornli
+stubborn
+stuck
+stud
+student
+student
+studi
+studi
+studiou
+studious
+stud
+studi
+studi
+stuff
+stuf
+stuff
+stumbl
+stumbl
+stumblest
+stumbl
+stump
+stump
+stung
+stupefi
+stupid
+stupifi
+stuprum
+sturdi
+sty
+styga
+stygian
+styl
+style
+styx
+su
+sub
+subcontract
+subdu
+subdu
+subdu
+subduement
+subdu
+subdu
+subject
+subject
+subject
+subject
+submerg
+submiss
+submiss
+submit
+submit
+submit
+suborn
+suborn
+suborn
+subscrib
+subscrib
+subscrib
+subscrib
+subscript
+subsequ
+subsidi
+subsidi
+subsist
+subsist
+substanc
+substanc
+substanti
+substitut
+substitut
+substitut
+substitut
+subtil
+subtilli
+subtl
+subtleti
+subtleti
+subtli
+subtractor
+suburb
+subvers
+subvert
+succed
+succe
+succeed
+succeed
+succeed
+succe
+success
+successantli
+success
+success
+successfulli
+success
+success
+success
+successor
+successor
+succour
+succour
+such
+suck
+sucker
+sucker
+suck
+suckl
+suck
+sudden
+suddenli
+sue
+su
+suerli
+sue
+sueth
+suff
+suffer
+suffer
+suffer
+suffer
+suffer
+suffer
+suffic
+suffic
+suffic
+suffic
+sufficeth
+suffici
+suffici
+suffici
+suffic
+sufficit
+suffig
+suffoc
+suffoc
+suffoc
+suffolk
+suffrag
+suffrag
+sug
+sugar
+sugarsop
+suggest
+suggest
+suggest
+suggest
+suggest
+suggest
+sui
+suit
+suitabl
+suit
+suit
+suitor
+suitor
+suit
+suivez
+sullen
+sullen
+sulli
+sulli
+sulli
+sulph
+sulpher
+sulphur
+sulphur
+sultan
+sultri
+sum
+sumless
+summ
+summa
+summari
+summer
+summer
+summit
+summon
+summon
+summon
+sumpter
+sumptuou
+sumptuous
+sum
+sun
+sunbeam
+sunburn
+sunburnt
+sund
+sundai
+sundai
+sunder
+sunder
+sundri
+sung
+sunk
+sunken
+sunni
+sunris
+sun
+sunset
+sunshin
+sup
+super
+superfici
+superfici
+superflu
+superflu
+superflu
+superflux
+superior
+supern
+supernatur
+superprais
+superscript
+superscript
+superservic
+superstit
+superstiti
+superstiti
+supersubtl
+supervis
+supervisor
+supp
+supper
+supper
+suppertim
+sup
+supplant
+suppl
+suppler
+supplianc
+suppliant
+suppliant
+supplic
+supplic
+supplic
+suppli
+suppli
+suppli
+suppliest
+suppli
+supplyant
+suppli
+supplyment
+support
+support
+support
+support
+support
+support
+support
+supportor
+suppo
+suppos
+suppos
+suppos
+suppos
+supposest
+suppos
+supposit
+suppress
+suppress
+suppresseth
+supremaci
+suprem
+sup
+sur
+suranc
+surceas
+surd
+sure
+surecard
+sure
+surer
+surest
+sureti
+sureti
+surfeit
+surfeit
+surfeit
+surfeit
+surfeit
+surg
+surgeon
+surgeon
+surger
+surgeri
+surg
+surli
+surmi
+surmis
+surmis
+surmis
+surmount
+surmount
+surmount
+surnam
+surnam
+surnam
+surpasseth
+surpass
+surplic
+surplu
+surpri
+surpris
+surpris
+surrend
+surrei
+surrei
+survei
+surveyest
+survei
+surveyor
+surveyor
+survei
+surviv
+surviv
+survivor
+susan
+suspect
+suspect
+suspect
+suspect
+suspend
+suspens
+suspicion
+suspicion
+suspici
+suspir
+suspir
+sust
+sustain
+sustain
+sutler
+sutton
+suum
+swabber
+swaddl
+swag
+swagg
+swagger
+swagger
+swagger
+swagger
+swain
+swain
+swallow
+swallow
+swallow
+swallow
+swam
+swan
+swan
+sward
+sware
+swarm
+swarm
+swart
+swarth
+swarth
+swarthi
+swasher
+swash
+swath
+swath
+swathl
+swai
+swai
+swai
+swear
+swearer
+swearer
+swearest
+swear
+swear
+swear
+sweat
+sweaten
+sweat
+sweat
+sweati
+sweep
+sweeper
+sweep
+sweet
+sweeten
+sweeten
+sweeter
+sweetest
+sweetheart
+sweet
+sweetli
+sweetmeat
+sweet
+sweet
+swell
+swell
+swell
+swell
+swelter
+sweno
+swept
+swerv
+swerver
+swerv
+swift
+swifter
+swiftest
+swiftli
+swift
+swill
+swill
+swim
+swimmer
+swimmer
+swim
+swim
+swine
+swineherd
+swing
+swing
+swinish
+swinstead
+switch
+swit
+switzer
+swol
+swoll
+swoln
+swoon
+swoon
+swoon
+swoon
+swoop
+swoopstak
+swor
+sword
+sworder
+sword
+swore
+sworn
+swound
+swound
+swum
+swung
+sy
+sycamor
+sycorax
+sylla
+syllabl
+syllabl
+syllog
+symbol
+sympathis
+sympathiz
+sympath
+sympath
+sympathi
+synagogu
+synod
+synod
+syracus
+syracusian
+syracusian
+syria
+syrup
+t
+ta
+taber
+tabl
+tabl
+tabl
+tablet
+tabor
+tabor
+tabor
+tabourin
+taciturn
+tack
+tackl
+tackl
+tackl
+tackl
+tackl
+taddl
+tadpol
+taffeta
+taffeti
+tag
+tagrag
+tah
+tail
+tailor
+tailor
+tail
+taint
+taint
+taint
+taint
+taintur
+tak
+take
+taken
+taker
+take
+takest
+taketh
+take
+tal
+talbot
+talbotit
+talbot
+tale
+talent
+talent
+taleport
+tale
+talk
+talk
+talker
+talker
+talkest
+talk
+talk
+tall
+taller
+tallest
+talli
+tallow
+talli
+talon
+tam
+tambourin
+tame
+tame
+tame
+tame
+tamer
+tame
+tame
+tamora
+tamworth
+tan
+tang
+tangl
+tangl
+tank
+tanl
+tann
+tan
+tanner
+tanquam
+tanta
+tantaen
+tap
+tape
+taper
+taper
+tapestri
+tapestri
+taphous
+tapp
+tapster
+tapster
+tar
+tardi
+tardili
+tardi
+tardi
+tarentum
+targ
+targ
+target
+target
+tarpeian
+tarquin
+tarquin
+tarr
+tarr
+tarrianc
+tarri
+tarri
+tarri
+tarri
+tart
+tartar
+tartar
+tartli
+tart
+task
+tasker
+task
+task
+tassel
+tast
+tast
+tast
+tast
+tatt
+tatter
+tatter
+tatter
+tattl
+tattl
+tattl
+taught
+taunt
+taunt
+taunt
+tauntingli
+taunt
+tauru
+tavern
+tavern
+tavi
+tawdri
+tawni
+tax
+taxat
+taxat
+tax
+tax
+tc
+te
+teach
+teacher
+teacher
+teach
+teachest
+teacheth
+teach
+team
+tear
+tear
+tear
+tear
+tearsheet
+teat
+tediou
+tedious
+tedious
+teem
+teem
+teem
+teen
+teeth
+teipsum
+telamon
+telamoniu
+tell
+teller
+tell
+tell
+tellu
+temp
+temper
+temper
+temper
+temper
+temper
+temper
+tempest
+tempest
+tempestu
+templ
+templ
+tempor
+temporari
+temporiz
+tempor
+tempor
+temp
+tempt
+temptat
+temptat
+tempt
+tempter
+tempter
+tempteth
+tempt
+tempt
+ten
+tenabl
+tenant
+tenantiu
+tenantless
+tenant
+tench
+tend
+tendanc
+tend
+tender
+tender
+tenderli
+tender
+tender
+tend
+tend
+tenedo
+tenement
+tenement
+tenfold
+tenni
+tenour
+tenour
+ten
+tent
+tent
+tenth
+tenth
+tent
+tenur
+tenur
+tercel
+tereu
+term
+termag
+term
+termin
+termless
+term
+terra
+terrac
+terram
+terra
+terr
+terren
+terrestri
+terribl
+terribl
+territori
+territori
+terror
+terror
+tertian
+tertio
+test
+testament
+test
+tester
+testern
+testifi
+testimoni
+testimoni
+testimoni
+testi
+testril
+testi
+tetchi
+tether
+tetter
+tevil
+tewksburi
+text
+tgv
+th
+thae
+thame
+than
+thane
+thane
+thank
+thank
+thank
+thankfulli
+thank
+thank
+thank
+thankless
+thank
+thanksgiv
+thaso
+that
+thatch
+thaw
+thaw
+thaw
+the
+theatr
+theban
+thebe
+thee
+theft
+theft
+thein
+their
+their
+theis
+them
+theme
+theme
+themselv
+then
+thenc
+thenceforth
+theoric
+there
+thereabout
+thereabout
+thereaft
+thereat
+therebi
+therefor
+therein
+thereof
+thereon
+thereto
+thereunto
+thereupon
+therewith
+therewith
+thersit
+these
+theseu
+thessalian
+thessali
+theti
+thew
+thei
+thick
+thicken
+thicken
+thicker
+thickest
+thicket
+thickskin
+thief
+thieveri
+thiev
+thievish
+thigh
+thigh
+thimbl
+thimbl
+thin
+thine
+thing
+thing
+think
+thinkest
+think
+think
+think
+thinkst
+thinli
+third
+thirdli
+third
+thirst
+thirst
+thirst
+thirsti
+thirteen
+thirti
+thirtieth
+thirti
+thi
+thisbi
+thisn
+thistl
+thistl
+thither
+thitherward
+thoa
+thoma
+thorn
+thorn
+thorni
+thorough
+thoroughli
+those
+thou
+though
+thought
+thought
+thought
+thousand
+thousand
+thracian
+thraldom
+thrall
+thrall
+thrall
+thrash
+thrason
+thread
+threadbar
+threaden
+thread
+threat
+threaten
+threaten
+threaten
+threatest
+threat
+three
+threefold
+threepenc
+threepil
+three
+threescor
+thresher
+threshold
+threw
+thrice
+thrift
+thriftless
+thrift
+thrifti
+thrill
+thrill
+thrill
+thrive
+thrive
+thriver
+thrive
+thrive
+throat
+throat
+throb
+throb
+throca
+throe
+throe
+thromuldo
+thron
+throne
+throne
+throne
+throng
+throng
+throng
+throstl
+throttl
+through
+throughfar
+throughfar
+throughli
+throughout
+throw
+thrower
+throwest
+throw
+thrown
+throw
+thrum
+thrumm
+thrush
+thrust
+thrusteth
+thrust
+thrust
+thumb
+thumb
+thump
+thund
+thunder
+thunderbolt
+thunderbolt
+thunder
+thunder
+thunderston
+thunderstrok
+thurio
+thursdai
+thu
+thwack
+thwart
+thwart
+thwart
+thwart
+thy
+thyme
+thymu
+thyreu
+thyself
+ti
+tib
+tiber
+tiberio
+tibei
+tice
+tick
+tickl
+tickl
+tickl
+tickl
+tickl
+ticklish
+tiddl
+tide
+tide
+tide
+tidi
+tie
+ti
+ti
+tiff
+tiger
+tiger
+tight
+tightli
+tike
+til
+tile
+till
+tillag
+tilli
+tilt
+tilter
+tilth
+tilt
+tilt
+tiltyard
+tim
+timandra
+timber
+time
+timeless
+timeli
+time
+time
+timon
+timor
+timor
+timor
+tinct
+tinctur
+tinctur
+tinder
+tingl
+tinker
+tinker
+tinsel
+tini
+tip
+tipp
+tippl
+tip
+tipsi
+tipto
+tir
+tire
+tire
+tire
+tirest
+tire
+tirra
+tirrit
+ti
+tish
+tisick
+tissu
+titan
+titania
+tith
+tith
+tith
+titiniu
+titl
+titl
+titleless
+titl
+tittl
+tittl
+titular
+titu
+tn
+to
+toad
+toad
+toadstool
+toast
+toast
+toast
+toast
+toaz
+tobi
+tock
+tod
+todai
+todpol
+tod
+toe
+toe
+tofor
+toge
+toge
+togeth
+toil
+toil
+toil
+toil
+token
+token
+told
+toledo
+toler
+toll
+toll
+tom
+tomb
+tomb
+tomb
+tombless
+tomboi
+tomb
+tomorrow
+tomyri
+ton
+tong
+tongu
+tongu
+tongu
+tongueless
+tongu
+tonight
+too
+took
+tool
+tool
+tooth
+toothach
+toothpick
+toothpick
+top
+topa
+top
+topgal
+topless
+topmast
+topp
+top
+toppl
+toppl
+top
+topsail
+topsi
+torch
+torchbear
+torchbear
+torcher
+torch
+torchlight
+tore
+torment
+tormenta
+torment
+torment
+torment
+tormentor
+torment
+torn
+torrent
+tortiv
+tortois
+tortur
+tortur
+tortur
+tortur
+tortur
+tortur
+torturest
+tortur
+toryn
+toss
+toss
+tosseth
+toss
+tot
+total
+total
+tott
+totter
+totter
+tou
+touch
+touch
+touch
+toucheth
+touch
+touchston
+tough
+tougher
+tough
+tourain
+tournament
+tour
+tou
+tout
+touz
+tow
+toward
+towardli
+toward
+tower
+tower
+tower
+town
+town
+township
+townsman
+townsmen
+towton
+toi
+toi
+trace
+trace
+track
+tract
+tractabl
+trade
+trade
+trader
+trade
+tradesman
+tradesmen
+trade
+tradit
+tradit
+traduc
+traduc
+traduc
+traffic
+traffick
+traffic
+tragedian
+tragedian
+tragedi
+tragedi
+tragic
+tragic
+trail
+train
+train
+train
+train
+trait
+traitor
+traitorli
+traitor
+traitor
+traitor
+traitress
+traject
+trammel
+trampl
+trampl
+trampl
+tranc
+tranc
+tranio
+tranquil
+tranquil
+transcend
+transcend
+transfer
+transfigur
+transfix
+transform
+transform
+transform
+transform
+transgress
+transgress
+transgress
+transgress
+translat
+translat
+translat
+translat
+transmigr
+transmut
+transpar
+transport
+transport
+transport
+transport
+transport
+transpos
+transshap
+trap
+trapp
+trap
+trap
+trash
+travail
+travail
+travel
+travel
+travel
+travel
+travel
+travel
+travel
+travellest
+travel
+travel
+traver
+travers
+trai
+treacher
+treacher
+treacher
+treacheri
+tread
+tread
+tread
+treason
+treason
+treason
+treason
+treasur
+treasur
+treasur
+treasuri
+treasuri
+treat
+treati
+treatis
+treat
+treati
+trebl
+trebl
+trebl
+treboniu
+tree
+tree
+trembl
+trembl
+trembl
+tremblest
+trembl
+tremblingli
+tremor
+trempl
+trench
+trenchant
+trench
+trencher
+trencher
+trencherman
+trencher
+trench
+trench
+trent
+tre
+trespass
+trespass
+tressel
+tress
+trei
+trial
+trial
+trib
+tribe
+tribe
+tribul
+tribun
+tribun
+tribun
+tributari
+tributari
+tribut
+tribut
+trice
+trick
+trick
+trickl
+trick
+tricksi
+trident
+tri
+trier
+trifl
+trifl
+trifler
+trifl
+trifl
+trigon
+trill
+trim
+trimli
+trimm
+trim
+trim
+trim
+trinculo
+trinculo
+trinket
+trip
+tripartit
+tripe
+tripl
+triplex
+tripoli
+tripoli
+tripp
+trip
+trippingli
+trip
+trist
+triton
+triumph
+triumphant
+triumphantli
+triumpher
+triumpher
+triumph
+triumph
+triumvir
+triumvir
+triumvir
+triumviri
+trivial
+troat
+trod
+trodden
+troiant
+troien
+troilu
+troilus
+trojan
+trojan
+troll
+tromperi
+trompet
+troop
+troop
+troop
+trop
+trophi
+trophi
+tropic
+trot
+troth
+troth
+troth
+trot
+trot
+troubl
+troubl
+troubler
+troubl
+troublesom
+troublest
+troublou
+trough
+trout
+trout
+trovato
+trow
+trowel
+trowest
+troi
+troyan
+troyan
+truant
+truce
+truckl
+trudg
+true
+trueborn
+truepenni
+truer
+truest
+truie
+trull
+trull
+truli
+trump
+trumperi
+trumpet
+trumpet
+trumpet
+trumpet
+truncheon
+truncheon
+trundl
+trunk
+trunk
+trust
+trust
+truster
+truster
+trust
+trust
+trusti
+truth
+truth
+try
+ts
+tu
+tuae
+tub
+tubal
+tub
+tuck
+tucket
+tuesdai
+tuft
+tuft
+tug
+tugg
+tug
+tuition
+tullu
+tulli
+tumbl
+tumbl
+tumbler
+tumbl
+tumult
+tumultu
+tun
+tune
+tuneabl
+tune
+tuner
+tune
+tuni
+tun
+tup
+turban
+turban
+turbul
+turbul
+turd
+turf
+turfi
+turk
+turkei
+turkei
+turkish
+turk
+turlygod
+turmoil
+turmoil
+turn
+turnbul
+turncoat
+turncoat
+turn
+turneth
+turn
+turnip
+turn
+turph
+turpitud
+turquois
+turret
+turret
+turtl
+turtl
+turvi
+tuscan
+tush
+tut
+tutor
+tutor
+tutor
+tutto
+twain
+twang
+twangl
+twa
+twai
+tweak
+tween
+twelfth
+twelv
+twelvemonth
+twentieth
+twenti
+twere
+twice
+twig
+twiggen
+twig
+twilight
+twill
+twill
+twin
+twine
+twink
+twinkl
+twinkl
+twinkl
+twinn
+twin
+twire
+twist
+twist
+twit
+twit
+twit
+twixt
+two
+twofold
+twopenc
+twopenc
+two
+twould
+tyb
+tybalt
+tybalt
+tyburn
+ty
+tyke
+tymbria
+type
+type
+typhon
+tyrann
+tyrann
+tyrann
+tyrann
+tyranni
+tyrant
+tyrant
+tyrian
+tyrrel
+u
+ubiqu
+udder
+udg
+ud
+uglier
+ugliest
+ugli
+ulcer
+ulcer
+ulyss
+um
+umber
+umbra
+umbrag
+umfrevil
+umpir
+umpir
+un
+unabl
+unaccommod
+unaccompani
+unaccustom
+unach
+unacquaint
+unact
+unadvi
+unadvis
+unadvisedli
+unagre
+unanel
+unansw
+unappea
+unapprov
+unapt
+unapt
+unarm
+unarm
+unarm
+unassail
+unassail
+unattaint
+unattempt
+unattend
+unauspici
+unauthor
+unavoid
+unawar
+unback
+unbak
+unband
+unbar
+unbarb
+unbash
+unbat
+unbatt
+unbecom
+unbefit
+unbegot
+unbegotten
+unbeliev
+unbend
+unbent
+unbewail
+unbid
+unbidden
+unbind
+unbind
+unbit
+unbless
+unblest
+unbloodi
+unblown
+unbodi
+unbolt
+unbolt
+unbonnet
+unbookish
+unborn
+unbosom
+unbound
+unbound
+unbow
+unbow
+unbrac
+unbrac
+unbraid
+unbreath
+unbr
+unbreech
+unbridl
+unbrok
+unbrui
+unbruis
+unbuckl
+unbuckl
+unbuckl
+unbuild
+unburden
+unburden
+unburi
+unburnt
+unburthen
+unbutton
+unbutton
+uncap
+uncap
+uncas
+uncas
+uncaught
+uncertain
+uncertainti
+unchain
+unchang
+uncharg
+uncharg
+uncharit
+unchari
+unchast
+uncheck
+unchild
+uncivil
+unclaim
+unclasp
+uncl
+unclean
+uncleanli
+uncleanli
+unclean
+uncl
+unclew
+unclog
+uncoin
+uncolt
+uncomeli
+uncomfort
+uncompassion
+uncomprehens
+unconfin
+unconfirm
+unconfirm
+unconqu
+unconqu
+unconsid
+unconst
+unconstrain
+unconstrain
+uncontemn
+uncontrol
+uncorrect
+uncount
+uncoupl
+uncourt
+uncouth
+uncov
+uncov
+uncrop
+uncross
+uncrown
+unction
+unctuou
+uncuckold
+uncur
+uncurb
+uncurb
+uncurl
+uncurr
+uncurs
+undaunt
+undeaf
+undeck
+undeed
+under
+underbear
+underborn
+undercrest
+underfoot
+undergo
+undergo
+undergo
+undergon
+underground
+underhand
+underl
+undermin
+undermin
+underneath
+underpr
+underprop
+understand
+understandeth
+understand
+understand
+understand
+understood
+underta
+undertak
+undertak
+undertak
+undertak
+undertak
+undertak
+undertook
+undervalu
+undervalu
+underw
+underwrit
+underwrit
+undescri
+undeserv
+undeserv
+undeserv
+undeserv
+undetermin
+undid
+undint
+undiscern
+undiscov
+undishonour
+undispo
+undistinguish
+undistinguish
+undivid
+undivid
+undivulg
+undo
+undo
+undo
+undon
+undoubt
+undoubtedli
+undream
+undress
+undress
+undrown
+undut
+unduti
+un
+unear
+unearn
+unearthli
+uneasin
+uneasi
+uneath
+uneduc
+uneffectu
+unelect
+unequ
+uneven
+unexamin
+unexecut
+unexpect
+unexperienc
+unexperi
+unexpress
+unfair
+unfaith
+unfal
+unfam
+unfashion
+unfasten
+unfath
+unfath
+unf
+unfe
+unfeel
+unfeign
+unfeignedli
+unfellow
+unfelt
+unfenc
+unfili
+unfil
+unfinish
+unfirm
+unfit
+unfit
+unfix
+unfledg
+unfold
+unfold
+unfoldeth
+unfold
+unfold
+unfool
+unforc
+unforc
+unforfeit
+unfortifi
+unfortun
+unfought
+unfrequ
+unfriend
+unfurnish
+ungain
+ungal
+ungart
+ungart
+ungenitur
+ungentl
+ungentl
+ungent
+ungird
+ungodli
+ungor
+ungot
+ungotten
+ungovern
+ungraci
+ungrat
+ungrav
+ungrown
+unguard
+unguem
+unguid
+unhack
+unhair
+unhallow
+unhallow
+unhand
+unhandl
+unhandsom
+unhang
+unhappi
+unhappili
+unhappi
+unhappi
+unharden
+unharm
+unhatch
+unheard
+unheart
+unheed
+unheedfulli
+unheedi
+unhelp
+unhidden
+unholi
+unhop
+unhopefullest
+unhors
+unhospit
+unhou
+unhous
+unhurt
+unicorn
+unicorn
+unimprov
+uninhabit
+uninhabit
+unintellig
+union
+union
+unit
+unit
+uniti
+univers
+univers
+univers
+univers
+unjoint
+unjust
+unjustic
+unjustli
+unkennel
+unkept
+unkind
+unkindest
+unkindli
+unkind
+unk
+unkinglik
+unkiss
+unknit
+unknow
+unknown
+unlac
+unlaid
+unlaw
+unlawfulli
+unlearn
+unlearn
+unless
+unlesson
+unlett
+unlett
+unlick
+unlik
+unlik
+unlimit
+unlin
+unlink
+unload
+unload
+unload
+unload
+unlock
+unlock
+unlook
+unlook
+unloo
+unloos
+unlov
+unlov
+unluckili
+unlucki
+unmad
+unmak
+unmanli
+unmann
+unmann
+unmannerd
+unmannerli
+unmarri
+unmask
+unmask
+unmask
+unmask
+unmast
+unmatch
+unmatch
+unmatch
+unmeasur
+unmeet
+unmellow
+unmerci
+unmerit
+unmerit
+unmind
+unmindful
+unmingl
+unmitig
+unmitig
+unmix
+unmoan
+unmov
+unmov
+unmov
+unmuffl
+unmuffl
+unmus
+unmuzzl
+unmuzzl
+unnatur
+unnatur
+unnatur
+unnecessarili
+unnecessari
+unneighbourli
+unnerv
+unnobl
+unnot
+unnumb
+unnumb
+unow
+unpack
+unpaid
+unparagon
+unparallel
+unparti
+unpath
+unpav
+unpai
+unpeac
+unpeg
+unpeopl
+unpeopl
+unperfect
+unperfect
+unpick
+unpin
+unpink
+unpiti
+unpitifulli
+unplagu
+unplaus
+unplea
+unpleas
+unpleas
+unpolici
+unpolish
+unpolish
+unpollut
+unpossess
+unpossess
+unposs
+unpracti
+unpregn
+unpremedit
+unprepar
+unprepar
+unpress
+unprevail
+unprev
+unpriz
+unpriz
+unprofit
+unprofit
+unprop
+unproperli
+unproport
+unprovid
+unprovid
+unprovid
+unprovok
+unprun
+unprun
+unpublish
+unpurg
+unpurpo
+unqual
+unqueen
+unquest
+unquestion
+unquiet
+unquietli
+unquiet
+unrais
+unrak
+unread
+unreadi
+unreal
+unreason
+unreason
+unreclaim
+unreconcil
+unreconcili
+unrecount
+unrecur
+unregard
+unregist
+unrel
+unremov
+unremov
+unrepriev
+unresolv
+unrespect
+unrespect
+unrest
+unrestor
+unrestrain
+unreveng
+unreverend
+unrever
+unrev
+unreward
+unright
+unright
+unrip
+unripp
+unrival
+unrol
+unroof
+unroost
+unroot
+unrough
+unruli
+unsaf
+unsalut
+unsanctifi
+unsatisfi
+unsavouri
+unsai
+unscal
+unscann
+unscarr
+unschool
+unscorch
+unscour
+unscratch
+unseal
+unseam
+unsearch
+unseason
+unseason
+unseason
+unseason
+unsecond
+unsecret
+unseduc
+unse
+unseem
+unseemli
+unseen
+unseminar
+unsepar
+unservic
+unset
+unsettl
+unsettl
+unsev
+unsex
+unshak
+unshak
+unshaken
+unshap
+unshap
+unsheath
+unsheath
+unshorn
+unshout
+unshown
+unshrink
+unshrubb
+unshunn
+unshunn
+unsift
+unsightli
+unsinew
+unsist
+unskil
+unskilfulli
+unskil
+unslip
+unsmirch
+unsoil
+unsolicit
+unsort
+unsought
+unsound
+unsound
+unspeak
+unspeak
+unspeak
+unspher
+unspok
+unspoken
+unspot
+unsquar
+unstabl
+unstaid
+unstain
+unstain
+unstanch
+unstat
+unsteadfast
+unstoop
+unstring
+unstuff
+unsubstanti
+unsuit
+unsuit
+unsulli
+unsunn
+unsur
+unsur
+unsuspect
+unswai
+unsway
+unswai
+unswear
+unswept
+unsworn
+untaint
+untalk
+untangl
+untangl
+untast
+untaught
+untemp
+untend
+untent
+untent
+unthank
+unthank
+unthink
+unthought
+unthread
+unthrift
+unthrift
+unthrifti
+unti
+unti
+until
+untimb
+untim
+untir
+untir
+untir
+untitl
+unto
+untold
+untouch
+untoward
+untowardli
+untrad
+untrain
+untrain
+untread
+untreasur
+untri
+untrim
+untrod
+untrodden
+untroubl
+untru
+untruss
+untruth
+untruth
+untuck
+untun
+untun
+untun
+untutor
+untutor
+untwin
+unurg
+unu
+unus
+unusu
+unvalu
+unvanquish
+unvarnish
+unveil
+unveil
+unvener
+unvex
+unviol
+unvirtu
+unvisit
+unvulner
+unwar
+unwarili
+unwash
+unwatch
+unweari
+unw
+unwedg
+unweed
+unweigh
+unweigh
+unwelcom
+unwept
+unwhipp
+unwholesom
+unwieldi
+unwil
+unwillingli
+unwilling
+unwind
+unwip
+unwis
+unwis
+unwish
+unwish
+unwit
+unwittingli
+unwont
+unwoo
+unworthi
+unworthiest
+unworthili
+unworthi
+unworthi
+unwrung
+unyok
+unyok
+up
+upbraid
+upbraid
+upbraid
+upbraid
+uphoard
+uphold
+upholdeth
+uphold
+uphold
+uplift
+uplift
+upmost
+upon
+upper
+uprear
+uprear
+upright
+upright
+upright
+upris
+upris
+uproar
+uproar
+uprou
+upshoot
+upshot
+upsid
+upspr
+upstair
+upstart
+upturn
+upward
+upward
+urchin
+urchinfield
+urchin
+urg
+urg
+urg
+urgent
+urg
+urgest
+urg
+urin
+urin
+urin
+urn
+urn
+ur
+ursa
+urslei
+ursula
+urswick
+us
+usag
+usanc
+usanc
+us
+us
+us
+useless
+user
+us
+usest
+useth
+usher
+usher
+usher
+usher
+us
+usual
+usual
+usur
+usur
+usuri
+usur
+usurp
+usurp
+usurp
+usurp
+usurp
+usurp
+usurpingli
+usurp
+usuri
+ut
+utensil
+utensil
+util
+utmost
+utt
+utter
+utter
+utter
+uttereth
+utter
+utterli
+uttermost
+utter
+uy
+v
+va
+vacanc
+vacant
+vacat
+vade
+vagabond
+vagabond
+vagram
+vagrom
+vail
+vail
+vail
+vaillant
+vain
+vainer
+vainglori
+vainli
+vain
+vai
+valanc
+valanc
+vale
+valenc
+valentin
+valentinu
+valentio
+valeria
+valeriu
+vale
+valiant
+valiantli
+valiant
+valid
+vallant
+vallei
+vallei
+valli
+valor
+valor
+valor
+valour
+valu
+valuat
+valu
+valu
+valueless
+valu
+valu
+vane
+vanish
+vanish
+vanish
+vanishest
+vanish
+vaniti
+vaniti
+vanquish
+vanquish
+vanquish
+vanquishest
+vanquisheth
+vant
+vantag
+vantag
+vantbrac
+vapian
+vapor
+vapor
+vapour
+vapour
+vara
+variabl
+varianc
+variat
+variat
+vari
+variest
+varieti
+varld
+varlet
+varletri
+varlet
+varletto
+varnish
+varriu
+varro
+vari
+vari
+vassal
+vassalag
+vassal
+vast
+vastid
+vasti
+vat
+vater
+vaudemont
+vaughan
+vault
+vaultag
+vault
+vault
+vault
+vaulti
+vaumond
+vaunt
+vaunt
+vaunter
+vaunt
+vauntingli
+vaunt
+vauvado
+vaux
+vaward
+ve
+veal
+vede
+vehem
+vehem
+vehement
+vehor
+veil
+veil
+veil
+vein
+vein
+vell
+velur
+velutu
+velvet
+vendibl
+vener
+vener
+venetia
+venetian
+venetian
+venei
+veng
+vengeanc
+vengeanc
+veng
+veni
+venial
+venic
+venison
+venit
+venom
+venom
+venom
+vent
+ventag
+vent
+ventidiu
+ventricl
+vent
+ventur
+ventur
+ventur
+ventur
+ventur
+ventur
+venu
+venu
+venuto
+ver
+verb
+verba
+verbal
+verbatim
+verbos
+verdict
+verdun
+verdur
+vere
+verefor
+verg
+verg
+verger
+verg
+verier
+veriest
+verifi
+verifi
+verili
+verit
+verit
+veriti
+veriti
+vermilion
+vermin
+vernon
+verona
+veronesa
+versal
+vers
+vers
+vers
+vert
+veri
+vesper
+vessel
+vessel
+vestal
+vestment
+vestur
+vetch
+vetch
+veux
+vex
+vexat
+vexat
+vex
+vex
+vexest
+vexeth
+vex
+vi
+via
+vial
+vial
+viand
+viand
+vic
+vicar
+vice
+viceger
+vicentio
+viceroi
+viceroi
+vice
+vici
+viciou
+vicious
+vict
+victim
+victor
+victoress
+victori
+victori
+victor
+victori
+victual
+victual
+victual
+videlicet
+video
+vide
+videsn
+vidi
+vie
+vi
+vienna
+view
+viewest
+vieweth
+view
+viewless
+view
+vigil
+vigil
+vigil
+vigit
+vigour
+vii
+viii
+vile
+vile
+vile
+viler
+vilest
+vill
+villag
+villag
+villageri
+villag
+villain
+villaini
+villain
+villain
+villain
+villaini
+villani
+villan
+villani
+villiago
+villian
+villianda
+villian
+vinaigr
+vincentio
+vincer
+vindic
+vine
+vinegar
+vine
+vineyard
+vineyard
+vint
+vintner
+viol
+viola
+violat
+violat
+violat
+violat
+violat
+violenc
+violent
+violenta
+violenteth
+violent
+violet
+violet
+viper
+viper
+viper
+vir
+virgilia
+virgin
+virgin
+virginal
+virgin
+virginiu
+virgin
+virgo
+virtu
+virtu
+virtuou
+virtuous
+visag
+visag
+visag
+visard
+viscount
+visibl
+visibl
+vision
+vision
+visit
+visit
+visit
+visit
+visit
+visit
+visitor
+visitor
+visit
+visor
+vita
+vita
+vital
+vitement
+vitruvio
+vitx
+viva
+vivant
+vive
+vixen
+viz
+vizament
+vizard
+vizard
+vizard
+vizor
+vlout
+vocat
+vocativo
+vocatur
+voce
+voic
+voic
+voic
+void
+void
+void
+voke
+volabl
+volant
+volivorco
+vollei
+volquessen
+volsc
+volsc
+volscian
+volscian
+volt
+voltemand
+volubl
+volubl
+volum
+volum
+volumnia
+volumniu
+voluntari
+voluntari
+voluptu
+voluptu
+vomiss
+vomit
+vomit
+vor
+vore
+vortnight
+vot
+votari
+votarist
+votarist
+votari
+votr
+vouch
+voucher
+voucher
+vouch
+vouch
+vouchsaf
+vouchsaf
+vouchsaf
+vouchsaf
+vouchsaf
+voudrai
+vour
+vou
+voutsaf
+vow
+vow
+vowel
+vowel
+vow
+vow
+vox
+voyag
+voyag
+vraiment
+vulcan
+vulgar
+vulgarli
+vulgar
+vulgo
+vulner
+vultur
+vultur
+vurther
+w
+wad
+waddl
+wade
+wade
+wafer
+waft
+waftag
+waft
+waft
+wag
+wage
+wager
+wager
+wage
+wag
+waggish
+waggl
+waggon
+waggon
+wagon
+wagon
+wag
+wagtail
+wail
+wail
+wail
+wail
+wain
+wainrop
+wainscot
+waist
+wait
+wait
+waiter
+waiteth
+wait
+wait
+wak
+wake
+wake
+wakefield
+waken
+waken
+wake
+wakest
+wake
+wale
+walk
+walk
+walk
+walk
+wall
+wall
+wallet
+wallet
+wallon
+walloon
+wallow
+wall
+walnut
+walter
+wan
+wand
+wander
+wander
+wander
+wander
+wander
+wand
+wane
+wane
+wane
+wane
+wann
+want
+want
+wanteth
+want
+wanton
+wantonli
+wanton
+wanton
+want
+wappen
+war
+warbl
+warbl
+ward
+ward
+warden
+warder
+warder
+wardrob
+wardrop
+ward
+ware
+ware
+warili
+warkworth
+warlik
+warm
+warm
+warmer
+warm
+warm
+warmth
+warn
+warn
+warn
+warn
+warn
+warp
+warp
+warr
+warrant
+warrant
+warranteth
+warrantis
+warrant
+warrant
+warranti
+warren
+warren
+war
+warrior
+warrior
+war
+wart
+warwick
+warwickshir
+wari
+wa
+wash
+wash
+washer
+wash
+washford
+wash
+wasp
+waspish
+wasp
+wassail
+wassail
+wast
+wast
+wast
+wast
+waster
+wast
+wast
+wat
+watch
+watch
+watcher
+watch
+watch
+watch
+watch
+watchman
+watchmen
+watchword
+water
+waterdrop
+water
+waterfli
+waterford
+water
+waterish
+waterpot
+waterrug
+water
+waterton
+wateri
+wav
+wave
+wave
+waver
+waver
+waver
+wave
+wave
+waw
+wawl
+wax
+wax
+waxen
+wax
+wax
+wai
+waylaid
+waylai
+wai
+wayward
+wayward
+wayward
+we
+weak
+weaken
+weaken
+weaker
+weakest
+weakl
+weakli
+weak
+weal
+wealsmen
+wealth
+wealthiest
+wealthili
+wealthi
+wealtlli
+wean
+weapon
+weapon
+wear
+wearer
+wearer
+weari
+weari
+weariest
+wearili
+weari
+wear
+wearisom
+wear
+weari
+weasel
+weather
+weathercock
+weather
+weav
+weav
+weaver
+weaver
+weav
+weav
+web
+wed
+wed
+wed
+wedg
+wedg
+wedg
+wedlock
+wednesdai
+weed
+weed
+weeder
+weed
+weed
+weedi
+week
+week
+weekli
+week
+ween
+ween
+weep
+weeper
+weep
+weepingli
+weep
+weep
+weet
+weigh
+weigh
+weigh
+weigh
+weight
+weightier
+weightless
+weight
+weighti
+weird
+welcom
+welcom
+welcom
+welcom
+welcomest
+welfar
+welkin
+well
+well
+welsh
+welshman
+welshmen
+welshwomen
+wench
+wench
+wench
+wend
+went
+wept
+weradai
+were
+wert
+west
+western
+westminst
+westmoreland
+westward
+wet
+wether
+wet
+wezand
+whale
+whale
+wharf
+wharf
+what
+whate
+whatev
+whatso
+whatsoev
+whatsom
+whe
+wheat
+wheaten
+wheel
+wheel
+wheel
+wheer
+wheeson
+wheez
+whelk
+whelk
+whelm
+whelp
+whelp
+whelp
+when
+whena
+whenc
+whencesoev
+whene
+whenev
+whensoev
+where
+whereabout
+wherea
+whereat
+wherebi
+wherefor
+wherein
+whereinto
+whereof
+whereon
+whereout
+whereso
+whereso
+wheresoev
+wheresom
+whereto
+whereuntil
+whereunto
+whereupon
+wherev
+wherewith
+wherewith
+whet
+whether
+whetston
+whet
+whew
+whei
+which
+whiff
+whiffler
+while
+while
+whilst
+whin
+whine
+whine
+whinid
+whine
+whip
+whipp
+whipper
+whip
+whip
+whipster
+whipstock
+whipt
+whirl
+whirl
+whirligig
+whirl
+whirlpool
+whirl
+whirlwind
+whirlwind
+whisp
+whisper
+whisper
+whisper
+whisper
+whist
+whistl
+whistl
+whistl
+whit
+white
+whitehal
+white
+white
+whiter
+white
+whitest
+whither
+white
+whitmor
+whitster
+whitsun
+whittl
+whizz
+who
+whoa
+whoe
+whoever
+whole
+wholesom
+wholesom
+wholli
+whom
+whoobub
+whoop
+whoop
+whor
+whore
+whoremast
+whoremasterli
+whoremong
+whore
+whoreson
+whoreson
+whore
+whorish
+whose
+whoso
+whoso
+whosoev
+why
+wi
+wick
+wick
+wickedn
+wicked
+wicket
+wicki
+wid
+wide
+widen
+wider
+widow
+widow
+widow
+widowhood
+widow
+wield
+wife
+wight
+wight
+wild
+wildcat
+wilder
+wilder
+wildest
+wildfir
+wildli
+wild
+wild
+wile
+wil
+wilful
+wilfulli
+wilfuln
+wil
+will
+will
+willer
+willeth
+william
+william
+will
+willingli
+willing
+willoughbi
+willow
+will
+wilt
+wiltshir
+wimpl
+win
+winc
+winch
+winchest
+wincot
+wind
+wind
+windgal
+wind
+windlass
+windmil
+window
+window
+windpip
+wind
+windsor
+windi
+wine
+wing
+wing
+wingfield
+wingham
+wing
+wink
+wink
+wink
+winner
+winner
+win
+winnow
+winnow
+winnow
+win
+winter
+winterli
+winter
+wip
+wipe
+wipe
+wipe
+wipe
+wire
+wire
+wiri
+wisdom
+wisdom
+wise
+wiseli
+wise
+wiser
+wisest
+wish
+wish
+wisher
+wisher
+wish
+wishest
+wisheth
+wish
+wish
+wishtli
+wisp
+wist
+wit
+witb
+witch
+witchcraft
+witch
+witch
+with
+withal
+withdraw
+withdraw
+withdrawn
+withdrew
+wither
+wither
+wither
+wither
+withheld
+withhold
+withhold
+within
+withold
+without
+withstand
+withstand
+withstood
+witless
+wit
+wit
+witnesseth
+wit
+wit
+wit
+wittenberg
+wittiest
+wittili
+wit
+wittingli
+wittol
+wittolli
+witti
+wiv
+wive
+wive
+wive
+wive
+wizard
+wizard
+wo
+woe
+woeful
+woeful
+woefullest
+woe
+woful
+wolf
+wolfish
+wolsei
+wolv
+wolvish
+woman
+womanhood
+womanish
+womankind
+womanli
+womb
+womb
+wombi
+women
+won
+woncot
+wond
+wonder
+wonder
+wonder
+wonderfulli
+wonder
+wonder
+wondrou
+wondrous
+wont
+wont
+woo
+wood
+woodbin
+woodcock
+woodcock
+wooden
+woodland
+woodman
+woodmong
+wood
+woodstock
+woodvil
+woo
+wooer
+wooer
+wooe
+woof
+woo
+wooingli
+wool
+woollen
+woolli
+woolsack
+woolsei
+woolward
+woo
+wor
+worcest
+word
+word
+wore
+worin
+work
+worker
+work
+work
+workman
+workmanli
+workmanship
+workmen
+work
+worki
+world
+worldl
+worldli
+world
+worm
+worm
+wormwood
+wormi
+worn
+worri
+worri
+worri
+worri
+wors
+worser
+worship
+worship
+worshipfulli
+worshipp
+worshipp
+worshipp
+worshippest
+worship
+worst
+worst
+wort
+worth
+worthi
+worthier
+worthi
+worthiest
+worthili
+worthi
+worthless
+worth
+worthi
+wort
+wot
+wot
+wot
+wouid
+would
+wouldest
+wouldst
+wound
+wound
+wound
+wound
+woundless
+wound
+woun
+woven
+wow
+wrack
+wrack
+wrangl
+wrangler
+wrangler
+wrangl
+wrap
+wrapp
+wrap
+wrapt
+wrath
+wrath
+wrathfulli
+wrath
+wreak
+wreak
+wreak
+wreath
+wreath
+wreathen
+wreath
+wreck
+wreck
+wreck
+wren
+wrench
+wrench
+wren
+wrest
+wrest
+wrest
+wrestl
+wrestl
+wrestler
+wrestl
+wretch
+wretchcd
+wretch
+wretched
+wretch
+wring
+wringer
+wring
+wring
+wrinkl
+wrinkl
+wrinkl
+wrist
+wrist
+writ
+write
+writer
+writer
+write
+writhl
+write
+write
+writ
+written
+wrong
+wrong
+wronger
+wrong
+wrongfulli
+wrong
+wrongli
+wrong
+wronk
+wrote
+wroth
+wrought
+wrung
+wry
+wry
+wt
+wul
+wye
+x
+xanthipp
+xi
+xii
+xiii
+xiv
+xv
+y
+yard
+yard
+yare
+yare
+yarn
+yaughan
+yaw
+yawn
+yawn
+yclepe
+yclipe
+ye
+yea
+yead
+year
+yearli
+yearn
+yearn
+year
+yea
+yeast
+yedward
+yell
+yellow
+yellow
+yellow
+yellow
+yellow
+yell
+yelp
+yeoman
+yeomen
+yerk
+ye
+yesterdai
+yesterdai
+yesternight
+yesti
+yet
+yew
+yicld
+yield
+yield
+yielder
+yielder
+yield
+yield
+yok
+yoke
+yoke
+yokefellow
+yoke
+yoketh
+yon
+yond
+yonder
+yongrei
+yore
+yorick
+york
+yorkist
+york
+yorkshir
+you
+young
+younger
+youngest
+youngl
+youngl
+youngli
+younker
+your
+your
+yourself
+yourselv
+youth
+youth
+youth
+youtli
+zani
+zani
+zeal
+zealou
+zeal
+zed
+zenelophon
+zenith
+zephyr
+zir
+zo
+zodiac
+zodiac
+zone
+zound
+zwagger
diff --git a/basis/porter-stemmer/test/voc.txt b/basis/porter-stemmer/test/voc.txt
new file mode 100644 (file)
index 0000000..604ef40
--- /dev/null
@@ -0,0 +1,23531 @@
+a
+aaron
+abaissiez
+abandon
+abandoned
+abase
+abash
+abate
+abated
+abatement
+abatements
+abates
+abbess
+abbey
+abbeys
+abbominable
+abbot
+abbots
+abbreviated
+abed
+abel
+aberga
+abergavenny
+abet
+abetting
+abhominable
+abhor
+abhorr
+abhorred
+abhorring
+abhors
+abhorson
+abide
+abides
+abilities
+ability
+abject
+abjectly
+abjects
+abjur
+abjure
+able
+abler
+aboard
+abode
+aboded
+abodements
+aboding
+abominable
+abominably
+abominations
+abortive
+abortives
+abound
+abounding
+about
+above
+abr
+abraham
+abram
+abreast
+abridg
+abridge
+abridged
+abridgment
+abroach
+abroad
+abrogate
+abrook
+abrupt
+abruption
+abruptly
+absence
+absent
+absey
+absolute
+absolutely
+absolv
+absolver
+abstains
+abstemious
+abstinence
+abstract
+absurd
+absyrtus
+abundance
+abundant
+abundantly
+abus
+abuse
+abused
+abuser
+abuses
+abusing
+abutting
+aby
+abysm
+ac
+academe
+academes
+accent
+accents
+accept
+acceptable
+acceptance
+accepted
+accepts
+access
+accessary
+accessible
+accidence
+accident
+accidental
+accidentally
+accidents
+accite
+accited
+accites
+acclamations
+accommodate
+accommodated
+accommodation
+accommodations
+accommodo
+accompanied
+accompany
+accompanying
+accomplices
+accomplish
+accomplished
+accomplishing
+accomplishment
+accompt
+accord
+accordant
+accorded
+accordeth
+according
+accordingly
+accords
+accost
+accosted
+account
+accountant
+accounted
+accounts
+accoutred
+accoutrement
+accoutrements
+accrue
+accumulate
+accumulated
+accumulation
+accurs
+accursed
+accurst
+accus
+accusation
+accusations
+accusative
+accusativo
+accuse
+accused
+accuser
+accusers
+accuses
+accuseth
+accusing
+accustom
+accustomed
+ace
+acerb
+ache
+acheron
+aches
+achiev
+achieve
+achieved
+achievement
+achievements
+achiever
+achieves
+achieving
+achilles
+aching
+achitophel
+acknowledg
+acknowledge
+acknowledged
+acknowledgment
+acknown
+acold
+aconitum
+acordo
+acorn
+acquaint
+acquaintance
+acquainted
+acquaints
+acquir
+acquire
+acquisition
+acquit
+acquittance
+acquittances
+acquitted
+acre
+acres
+across
+act
+actaeon
+acted
+acting
+action
+actions
+actium
+active
+actively
+activity
+actor
+actors
+acts
+actual
+acture
+acute
+acutely
+ad
+adage
+adallas
+adam
+adamant
+add
+added
+adder
+adders
+addeth
+addict
+addicted
+addiction
+adding
+addition
+additions
+addle
+address
+addressing
+addrest
+adds
+adhere
+adheres
+adieu
+adieus
+adjacent
+adjoin
+adjoining
+adjourn
+adjudg
+adjudged
+adjunct
+administer
+administration
+admir
+admirable
+admiral
+admiration
+admire
+admired
+admirer
+admiring
+admiringly
+admission
+admit
+admits
+admittance
+admitted
+admitting
+admonish
+admonishing
+admonishment
+admonishments
+admonition
+ado
+adonis
+adopt
+adopted
+adoptedly
+adoption
+adoptious
+adopts
+ador
+adoration
+adorations
+adore
+adorer
+adores
+adorest
+adoreth
+adoring
+adorn
+adorned
+adornings
+adornment
+adorns
+adown
+adramadio
+adrian
+adriana
+adriano
+adriatic
+adsum
+adulation
+adulterate
+adulterates
+adulterers
+adulteress
+adulteries
+adulterous
+adultery
+adultress
+advanc
+advance
+advanced
+advancement
+advancements
+advances
+advancing
+advantage
+advantageable
+advantaged
+advantageous
+advantages
+advantaging
+advent
+adventur
+adventure
+adventures
+adventuring
+adventurous
+adventurously
+adversaries
+adversary
+adverse
+adversely
+adversities
+adversity
+advertis
+advertise
+advertised
+advertisement
+advertising
+advice
+advis
+advise
+advised
+advisedly
+advises
+advisings
+advocate
+advocation
+aeacida
+aeacides
+aedile
+aediles
+aegeon
+aegion
+aegles
+aemelia
+aemilia
+aemilius
+aeneas
+aeolus
+aer
+aerial
+aery
+aesculapius
+aeson
+aesop
+aetna
+afar
+afear
+afeard
+affability
+affable
+affair
+affaire
+affairs
+affect
+affectation
+affectations
+affected
+affectedly
+affecteth
+affecting
+affection
+affectionate
+affectionately
+affections
+affects
+affeer
+affianc
+affiance
+affianced
+affied
+affin
+affined
+affinity
+affirm
+affirmation
+affirmatives
+afflict
+afflicted
+affliction
+afflictions
+afflicts
+afford
+affordeth
+affords
+affray
+affright
+affrighted
+affrights
+affront
+affronted
+affy
+afield
+afire
+afloat
+afoot
+afore
+aforehand
+aforesaid
+afraid
+afresh
+afric
+africa
+african
+afront
+after
+afternoon
+afterward
+afterwards
+ag
+again
+against
+agamemmon
+agamemnon
+agate
+agaz
+age
+aged
+agenor
+agent
+agents
+ages
+aggravate
+aggrief
+agile
+agincourt
+agitation
+aglet
+agnize
+ago
+agone
+agony
+agree
+agreed
+agreeing
+agreement
+agrees
+agrippa
+aground
+ague
+aguecheek
+agued
+agueface
+agues
+ah
+aha
+ahungry
+ai
+aialvolio
+aiaria
+aid
+aidance
+aidant
+aided
+aiding
+aidless
+aids
+ail
+aim
+aimed
+aimest
+aiming
+aims
+ainsi
+aio
+air
+aired
+airless
+airs
+airy
+ajax
+akilling
+al
+alabaster
+alack
+alacrity
+alarbus
+alarm
+alarms
+alarum
+alarums
+alas
+alb
+alban
+albans
+albany
+albeit
+albion
+alchemist
+alchemy
+alcibiades
+alcides
+alder
+alderman
+aldermen
+ale
+alecto
+alehouse
+alehouses
+alencon
+alengon
+aleppo
+ales
+alewife
+alexander
+alexanders
+alexandria
+alexandrian
+alexas
+alias
+alice
+alien
+aliena
+alight
+alighted
+alights
+aliis
+alike
+alisander
+alive
+all
+alla
+allay
+allayed
+allaying
+allayment
+allayments
+allays
+allegation
+allegations
+allege
+alleged
+allegiance
+allegiant
+alley
+alleys
+allhallowmas
+alliance
+allicholy
+allied
+allies
+alligant
+alligator
+allons
+allot
+allots
+allotted
+allottery
+allow
+allowance
+allowed
+allowing
+allows
+allur
+allure
+allurement
+alluring
+allusion
+ally
+allycholly
+almain
+almanac
+almanack
+almanacs
+almighty
+almond
+almost
+alms
+almsman
+aloes
+aloft
+alone
+along
+alonso
+aloof
+aloud
+alphabet
+alphabetical
+alphonso
+alps
+already
+also
+alt
+altar
+altars
+alter
+alteration
+altered
+alters
+althaea
+although
+altitude
+altogether
+alton
+alway
+always
+am
+amaimon
+amain
+amaking
+amamon
+amaz
+amaze
+amazed
+amazedly
+amazedness
+amazement
+amazes
+amazeth
+amazing
+amazon
+amazonian
+amazons
+ambassador
+ambassadors
+amber
+ambiguides
+ambiguities
+ambiguous
+ambition
+ambitions
+ambitious
+ambitiously
+amble
+ambled
+ambles
+ambling
+ambo
+ambuscadoes
+ambush
+amen
+amend
+amended
+amendment
+amends
+amerce
+america
+ames
+amiable
+amid
+amidst
+amiens
+amis
+amiss
+amities
+amity
+amnipotent
+among
+amongst
+amorous
+amorously
+amort
+amount
+amounts
+amour
+amphimacus
+ample
+ampler
+amplest
+amplified
+amplify
+amply
+ampthill
+amurath
+amyntas
+an
+anatomiz
+anatomize
+anatomy
+ancestor
+ancestors
+ancestry
+anchises
+anchor
+anchorage
+anchored
+anchoring
+anchors
+anchovies
+ancient
+ancientry
+ancients
+ancus
+and
+andirons
+andpholus
+andren
+andrew
+andromache
+andronici
+andronicus
+anew
+ang
+angel
+angelica
+angelical
+angelo
+angels
+anger
+angerly
+angers
+anges
+angiers
+angl
+anglais
+angle
+angler
+angleterre
+angliae
+angling
+anglish
+angrily
+angry
+anguish
+angus
+animal
+animals
+animis
+anjou
+ankle
+anna
+annals
+anne
+annex
+annexed
+annexions
+annexment
+annothanize
+announces
+annoy
+annoyance
+annoying
+annual
+anoint
+anointed
+anon
+another
+anselmo
+answer
+answerable
+answered
+answerest
+answering
+answers
+ant
+ante
+antenor
+antenorides
+anteroom
+anthem
+anthems
+anthony
+anthropophagi
+anthropophaginian
+antiates
+antic
+anticipate
+anticipates
+anticipatest
+anticipating
+anticipation
+antick
+anticly
+antics
+antidote
+antidotes
+antigonus
+antiopa
+antipathy
+antipholus
+antipholuses
+antipodes
+antiquary
+antique
+antiquity
+antium
+antoniad
+antonio
+antonius
+antony
+antres
+anvil
+any
+anybody
+anyone
+anything
+anywhere
+ap
+apace
+apart
+apartment
+apartments
+ape
+apemantus
+apennines
+apes
+apiece
+apish
+apollinem
+apollo
+apollodorus
+apology
+apoplex
+apoplexy
+apostle
+apostles
+apostrophas
+apoth
+apothecary
+appal
+appall
+appalled
+appals
+apparel
+apparell
+apparelled
+apparent
+apparently
+apparition
+apparitions
+appeach
+appeal
+appeals
+appear
+appearance
+appeared
+appeareth
+appearing
+appears
+appeas
+appease
+appeased
+appelant
+appele
+appelee
+appeles
+appelez
+appellant
+appellants
+appelons
+appendix
+apperil
+appertain
+appertaining
+appertainings
+appertains
+appertinent
+appertinents
+appetite
+appetites
+applaud
+applauded
+applauding
+applause
+applauses
+apple
+apples
+appletart
+appliance
+appliances
+applications
+applied
+applies
+apply
+applying
+appoint
+appointed
+appointment
+appointments
+appoints
+apprehend
+apprehended
+apprehends
+apprehension
+apprehensions
+apprehensive
+apprendre
+apprenne
+apprenticehood
+appris
+approach
+approachers
+approaches
+approacheth
+approaching
+approbation
+approof
+appropriation
+approv
+approve
+approved
+approvers
+approves
+appurtenance
+appurtenances
+apricocks
+april
+apron
+aprons
+apt
+apter
+aptest
+aptly
+aptness
+aqua
+aquilon
+aquitaine
+arabia
+arabian
+araise
+arbitrate
+arbitrating
+arbitrator
+arbitrement
+arbors
+arbour
+arc
+arch
+archbishop
+archbishopric
+archdeacon
+arched
+archelaus
+archer
+archers
+archery
+archibald
+archidamus
+architect
+arcu
+arde
+arden
+ardent
+ardour
+are
+argal
+argier
+argo
+argosies
+argosy
+argu
+argue
+argued
+argues
+arguing
+argument
+arguments
+argus
+ariachne
+ariadne
+ariel
+aries
+aright
+arinado
+arinies
+arion
+arise
+arises
+ariseth
+arising
+aristode
+aristotle
+arithmetic
+arithmetician
+ark
+arm
+arma
+armado
+armadoes
+armagnac
+arme
+armed
+armenia
+armies
+armigero
+arming
+armipotent
+armor
+armour
+armourer
+armourers
+armours
+armoury
+arms
+army
+arn
+aroint
+arose
+arouse
+aroused
+arragon
+arraign
+arraigned
+arraigning
+arraignment
+arrant
+arras
+array
+arrearages
+arrest
+arrested
+arrests
+arriv
+arrival
+arrivance
+arrive
+arrived
+arrives
+arriving
+arrogance
+arrogancy
+arrogant
+arrow
+arrows
+art
+artemidorus
+arteries
+arthur
+article
+articles
+articulate
+artificer
+artificial
+artillery
+artire
+artist
+artists
+artless
+artois
+arts
+artus
+arviragus
+as
+asaph
+ascanius
+ascend
+ascended
+ascendeth
+ascends
+ascension
+ascent
+ascribe
+ascribes
+ash
+asham
+ashamed
+asher
+ashes
+ashford
+ashore
+ashouting
+ashy
+asia
+aside
+ask
+askance
+asked
+asker
+asketh
+asking
+asks
+aslant
+asleep
+asmath
+asp
+aspect
+aspects
+aspen
+aspersion
+aspic
+aspicious
+aspics
+aspir
+aspiration
+aspire
+aspiring
+asquint
+ass
+assail
+assailable
+assailant
+assailants
+assailed
+assaileth
+assailing
+assails
+assassination
+assault
+assaulted
+assaults
+assay
+assaying
+assays
+assemblance
+assemble
+assembled
+assemblies
+assembly
+assent
+asses
+assez
+assign
+assigned
+assigns
+assinico
+assist
+assistance
+assistances
+assistant
+assistants
+assisted
+assisting
+associate
+associated
+associates
+assuage
+assubjugate
+assum
+assume
+assumes
+assumption
+assur
+assurance
+assure
+assured
+assuredly
+assures
+assyrian
+astonish
+astonished
+astraea
+astray
+astrea
+astronomer
+astronomers
+astronomical
+astronomy
+asunder
+at
+atalanta
+ate
+ates
+athenian
+athenians
+athens
+athol
+athversary
+athwart
+atlas
+atomies
+atomy
+atone
+atonement
+atonements
+atropos
+attach
+attached
+attachment
+attain
+attainder
+attains
+attaint
+attainted
+attainture
+attempt
+attemptable
+attempted
+attempting
+attempts
+attend
+attendance
+attendant
+attendants
+attended
+attendents
+attendeth
+attending
+attends
+attent
+attention
+attentive
+attentivenes
+attest
+attested
+attir
+attire
+attired
+attires
+attorney
+attorneyed
+attorneys
+attorneyship
+attract
+attraction
+attractive
+attracts
+attribute
+attributed
+attributes
+attribution
+attributive
+atwain
+au
+aubrey
+auburn
+aucun
+audacious
+audaciously
+audacity
+audible
+audience
+audis
+audit
+auditor
+auditors
+auditory
+audre
+audrey
+aufidius
+aufidiuses
+auger
+aught
+augment
+augmentation
+augmented
+augmenting
+augurer
+augurers
+augures
+auguring
+augurs
+augury
+august
+augustus
+auld
+aumerle
+aunchient
+aunt
+aunts
+auricular
+aurora
+auspicious
+aussi
+austere
+austerely
+austereness
+austerity
+austria
+aut
+authentic
+author
+authorities
+authority
+authorized
+authorizing
+authors
+autolycus
+autre
+autumn
+auvergne
+avail
+avails
+avarice
+avaricious
+avaunt
+ave
+aveng
+avenge
+avenged
+averring
+avert
+aves
+avez
+avis
+avoid
+avoided
+avoiding
+avoids
+avoirdupois
+avouch
+avouched
+avouches
+avouchment
+avow
+aw
+await
+awaits
+awak
+awake
+awaked
+awaken
+awakened
+awakens
+awakes
+awaking
+award
+awards
+awasy
+away
+awe
+aweary
+aweless
+awful
+awhile
+awkward
+awl
+awooing
+awork
+awry
+axe
+axle
+axletree
+ay
+aye
+ayez
+ayli
+azur
+azure
+b
+ba
+baa
+babbl
+babble
+babbling
+babe
+babes
+babies
+baboon
+baboons
+baby
+babylon
+bacare
+bacchanals
+bacchus
+bach
+bachelor
+bachelors
+back
+backbite
+backbitten
+backing
+backs
+backward
+backwardly
+backwards
+bacon
+bacons
+bad
+bade
+badge
+badged
+badges
+badly
+badness
+baes
+baffl
+baffle
+baffled
+bag
+baggage
+bagot
+bagpipe
+bags
+bail
+bailiff
+baillez
+baily
+baisant
+baisees
+baiser
+bait
+baited
+baiting
+baitings
+baits
+bajazet
+bak
+bake
+baked
+baker
+bakers
+bakes
+baking
+bal
+balanc
+balance
+balcony
+bald
+baldrick
+bale
+baleful
+balk
+ball
+ballad
+ballads
+ballast
+ballasting
+ballet
+ballow
+balls
+balm
+balms
+balmy
+balsam
+balsamum
+balth
+balthasar
+balthazar
+bames
+ban
+banbury
+band
+bandied
+banding
+bandit
+banditti
+banditto
+bands
+bandy
+bandying
+bane
+banes
+bang
+bangor
+banish
+banished
+banishers
+banishment
+banister
+bank
+bankrout
+bankrupt
+bankrupts
+banks
+banner
+bannerets
+banners
+banning
+banns
+banquet
+banqueted
+banqueting
+banquets
+banquo
+bans
+baptism
+baptista
+baptiz
+bar
+barbarian
+barbarians
+barbarism
+barbarous
+barbary
+barbason
+barbed
+barber
+barbermonger
+bard
+bardolph
+bards
+bare
+bared
+barefac
+barefaced
+barefoot
+bareheaded
+barely
+bareness
+barful
+bargain
+bargains
+barge
+bargulus
+baring
+bark
+barking
+barkloughly
+barks
+barky
+barley
+barm
+barn
+barnacles
+barnardine
+barne
+barnes
+barnet
+barns
+baron
+barons
+barony
+barr
+barrabas
+barrel
+barrels
+barren
+barrenly
+barrenness
+barricado
+barricadoes
+barrow
+bars
+barson
+barter
+bartholomew
+bas
+basan
+base
+baseless
+basely
+baseness
+baser
+bases
+basest
+bashful
+bashfulness
+basilisco
+basilisk
+basilisks
+basimecu
+basin
+basingstoke
+basins
+basis
+bask
+basket
+baskets
+bass
+bassanio
+basset
+bassianus
+basta
+bastard
+bastardizing
+bastardly
+bastards
+bastardy
+basted
+bastes
+bastinado
+basting
+bat
+batailles
+batch
+bate
+bated
+bates
+bath
+bathe
+bathed
+bathing
+baths
+bating
+batler
+bats
+batt
+battalia
+battalions
+batten
+batter
+battering
+batters
+battery
+battle
+battled
+battlefield
+battlements
+battles
+batty
+bauble
+baubles
+baubling
+baulk
+bavin
+bawcock
+bawd
+bawdry
+bawds
+bawdy
+bawl
+bawling
+bay
+baying
+baynard
+bayonne
+bays
+be
+beach
+beached
+beachy
+beacon
+bead
+beaded
+beadle
+beadles
+beads
+beadsmen
+beagle
+beagles
+beak
+beaks
+beam
+beamed
+beams
+bean
+beans
+bear
+beard
+bearded
+beardless
+beards
+bearer
+bearers
+bearest
+beareth
+bearing
+bears
+beast
+beastliest
+beastliness
+beastly
+beasts
+beat
+beated
+beaten
+beating
+beatrice
+beats
+beau
+beaufort
+beaumond
+beaumont
+beauteous
+beautied
+beauties
+beautified
+beautiful
+beautify
+beauty
+beaver
+beavers
+became
+because
+bechanc
+bechance
+bechanced
+beck
+beckon
+beckons
+becks
+becom
+become
+becomed
+becomes
+becoming
+becomings
+bed
+bedabbled
+bedash
+bedaub
+bedazzled
+bedchamber
+bedclothes
+bedded
+bedeck
+bedecking
+bedew
+bedfellow
+bedfellows
+bedford
+bedlam
+bedrench
+bedrid
+beds
+bedtime
+bedward
+bee
+beef
+beefs
+beehives
+been
+beer
+bees
+beest
+beetle
+beetles
+beeves
+befall
+befallen
+befalls
+befell
+befits
+befitted
+befitting
+befor
+before
+beforehand
+befortune
+befriend
+befriended
+befriends
+beg
+began
+beget
+begets
+begetting
+begg
+beggar
+beggared
+beggarly
+beggarman
+beggars
+beggary
+begging
+begin
+beginners
+beginning
+beginnings
+begins
+begnawn
+begone
+begot
+begotten
+begrimed
+begs
+beguil
+beguile
+beguiled
+beguiles
+beguiling
+begun
+behalf
+behalfs
+behav
+behaved
+behavedst
+behavior
+behaviors
+behaviour
+behaviours
+behead
+beheaded
+beheld
+behest
+behests
+behind
+behold
+beholder
+beholders
+beholdest
+beholding
+beholds
+behoof
+behooffull
+behooves
+behove
+behoves
+behowls
+being
+bel
+belarius
+belch
+belching
+beldam
+beldame
+beldams
+belee
+belgia
+belie
+belied
+belief
+beliest
+believ
+believe
+believed
+believes
+believest
+believing
+belike
+bell
+bellario
+belle
+bellied
+bellies
+bellman
+bellona
+bellow
+bellowed
+bellowing
+bellows
+bells
+belly
+bellyful
+belman
+belmont
+belock
+belong
+belonging
+belongings
+belongs
+belov
+beloved
+beloving
+below
+belt
+belzebub
+bemadding
+bemet
+bemete
+bemoan
+bemoaned
+bemock
+bemoil
+bemonster
+ben
+bench
+bencher
+benches
+bend
+bended
+bending
+bends
+bene
+beneath
+benedicite
+benedick
+benediction
+benedictus
+benefactors
+benefice
+beneficial
+benefit
+benefited
+benefits
+benetted
+benevolence
+benevolences
+benied
+benison
+bennet
+bent
+bentii
+bentivolii
+bents
+benumbed
+benvolio
+bepaint
+bepray
+bequeath
+bequeathed
+bequeathing
+bequest
+ber
+berard
+berattle
+beray
+bere
+bereave
+bereaved
+bereaves
+bereft
+bergamo
+bergomask
+berhym
+berhyme
+berkeley
+bermoothes
+bernardo
+berod
+berowne
+berri
+berries
+berrord
+berry
+bertram
+berwick
+bescreen
+beseech
+beseeched
+beseechers
+beseeching
+beseek
+beseem
+beseemeth
+beseeming
+beseems
+beset
+beshrew
+beside
+besides
+besieg
+besiege
+besieged
+beslubber
+besmear
+besmeared
+besmirch
+besom
+besort
+besotted
+bespake
+bespeak
+bespice
+bespoke
+bespotted
+bess
+bessy
+best
+bestained
+bested
+bestial
+bestir
+bestirr
+bestow
+bestowed
+bestowing
+bestows
+bestraught
+bestrew
+bestrid
+bestride
+bestrides
+bet
+betake
+beteem
+bethink
+bethought
+bethrothed
+bethump
+betid
+betide
+betideth
+betime
+betimes
+betoken
+betook
+betossed
+betray
+betrayed
+betraying
+betrays
+betrims
+betroth
+betrothed
+betroths
+bett
+betted
+better
+bettered
+bettering
+betters
+betting
+bettre
+between
+betwixt
+bevel
+beverage
+bevis
+bevy
+bewail
+bewailed
+bewailing
+bewails
+beware
+bewasted
+beweep
+bewept
+bewet
+bewhored
+bewitch
+bewitched
+bewitchment
+bewray
+beyond
+bezonian
+bezonians
+bianca
+bianco
+bias
+bibble
+bickerings
+bid
+bidden
+bidding
+biddings
+biddy
+bide
+bides
+biding
+bids
+bien
+bier
+bifold
+big
+bigamy
+biggen
+bigger
+bigness
+bigot
+bilberry
+bilbo
+bilboes
+bilbow
+bill
+billeted
+billets
+billiards
+billing
+billow
+billows
+bills
+bin
+bind
+bindeth
+binding
+binds
+biondello
+birch
+bird
+birding
+birdlime
+birds
+birnam
+birth
+birthday
+birthdom
+birthplace
+birthright
+birthrights
+births
+bis
+biscuit
+bishop
+bishops
+bisson
+bit
+bitch
+bite
+biter
+bites
+biting
+bits
+bitt
+bitten
+bitter
+bitterest
+bitterly
+bitterness
+blab
+blabb
+blabbing
+blabs
+black
+blackamoor
+blackamoors
+blackberries
+blackberry
+blacker
+blackest
+blackfriars
+blackheath
+blackmere
+blackness
+blacks
+bladder
+bladders
+blade
+bladed
+blades
+blains
+blam
+blame
+blamed
+blameful
+blameless
+blames
+blanc
+blanca
+blanch
+blank
+blanket
+blanks
+blaspheme
+blaspheming
+blasphemous
+blasphemy
+blast
+blasted
+blasting
+blastments
+blasts
+blaz
+blaze
+blazes
+blazing
+blazon
+blazoned
+blazoning
+bleach
+bleaching
+bleak
+blear
+bleared
+bleat
+bleated
+bleats
+bled
+bleed
+bleedest
+bleedeth
+bleeding
+bleeds
+blemish
+blemishes
+blench
+blenches
+blend
+blended
+blent
+bless
+blessed
+blessedly
+blessedness
+blesses
+blesseth
+blessing
+blessings
+blest
+blew
+blind
+blinded
+blindfold
+blinding
+blindly
+blindness
+blinds
+blink
+blinking
+bliss
+blist
+blister
+blisters
+blithe
+blithild
+bloat
+block
+blockish
+blocks
+blois
+blood
+blooded
+bloodhound
+bloodied
+bloodier
+bloodiest
+bloodily
+bloodless
+bloods
+bloodshed
+bloodshedding
+bloodstained
+bloody
+bloom
+blooms
+blossom
+blossoming
+blossoms
+blot
+blots
+blotted
+blotting
+blount
+blow
+blowed
+blowers
+blowest
+blowing
+blown
+blows
+blowse
+blubb
+blubber
+blubbering
+blue
+bluecaps
+bluest
+blunt
+blunted
+blunter
+bluntest
+blunting
+bluntly
+bluntness
+blunts
+blur
+blurr
+blurs
+blush
+blushes
+blushest
+blushing
+blust
+bluster
+blusterer
+blusters
+bo
+boar
+board
+boarded
+boarding
+boards
+boarish
+boars
+boast
+boasted
+boastful
+boasting
+boasts
+boat
+boats
+boatswain
+bob
+bobb
+boblibindo
+bobtail
+bocchus
+bode
+boded
+bodements
+bodes
+bodg
+bodied
+bodies
+bodiless
+bodily
+boding
+bodkin
+body
+bodykins
+bog
+boggle
+boggler
+bogs
+bohemia
+bohemian
+bohun
+boil
+boiling
+boils
+boist
+boisterous
+boisterously
+boitier
+bold
+bolden
+bolder
+boldest
+boldly
+boldness
+bolds
+bolingbroke
+bolster
+bolt
+bolted
+bolter
+bolters
+bolting
+bolts
+bombard
+bombards
+bombast
+bon
+bona
+bond
+bondage
+bonded
+bondmaid
+bondman
+bondmen
+bonds
+bondslave
+bone
+boneless
+bones
+bonfire
+bonfires
+bonjour
+bonne
+bonnet
+bonneted
+bonny
+bonos
+bonto
+bonville
+bood
+book
+bookish
+books
+boon
+boor
+boorish
+boors
+boot
+booted
+booties
+bootless
+boots
+booty
+bor
+bora
+borachio
+bordeaux
+border
+bordered
+borderers
+borders
+bore
+boreas
+bores
+boring
+born
+borne
+borough
+boroughs
+borrow
+borrowed
+borrower
+borrowing
+borrows
+bosko
+boskos
+bosky
+bosom
+bosoms
+boson
+boss
+bosworth
+botch
+botcher
+botches
+botchy
+both
+bots
+bottle
+bottled
+bottles
+bottom
+bottomless
+bottoms
+bouciqualt
+bouge
+bough
+boughs
+bought
+bounce
+bouncing
+bound
+bounded
+bounden
+boundeth
+bounding
+boundless
+bounds
+bounteous
+bounteously
+bounties
+bountiful
+bountifully
+bounty
+bourbier
+bourbon
+bourchier
+bourdeaux
+bourn
+bout
+bouts
+bove
+bow
+bowcase
+bowed
+bowels
+bower
+bowing
+bowl
+bowler
+bowling
+bowls
+bows
+bowsprit
+bowstring
+box
+boxes
+boy
+boyet
+boyish
+boys
+brabant
+brabantio
+brabble
+brabbler
+brac
+brace
+bracelet
+bracelets
+brach
+bracy
+brag
+bragg
+braggardism
+braggards
+braggart
+braggarts
+bragged
+bragging
+bragless
+brags
+braid
+braided
+brain
+brained
+brainford
+brainish
+brainless
+brains
+brainsick
+brainsickly
+brake
+brakenbury
+brakes
+brambles
+bran
+branch
+branches
+branchless
+brand
+branded
+brandish
+brandon
+brands
+bras
+brass
+brassy
+brat
+brats
+brav
+brave
+braved
+bravely
+braver
+bravery
+braves
+bravest
+braving
+brawl
+brawler
+brawling
+brawls
+brawn
+brawns
+bray
+braying
+braz
+brazen
+brazier
+breach
+breaches
+bread
+breadth
+break
+breaker
+breakfast
+breaking
+breaks
+breast
+breasted
+breasting
+breastplate
+breasts
+breath
+breathe
+breathed
+breather
+breathers
+breathes
+breathest
+breathing
+breathless
+breaths
+brecknock
+bred
+breech
+breeches
+breeching
+breed
+breeder
+breeders
+breeding
+breeds
+breese
+breeze
+breff
+bretagne
+brethen
+bretheren
+brethren
+brevis
+brevity
+brew
+brewage
+brewer
+brewers
+brewing
+brews
+briareus
+briars
+brib
+bribe
+briber
+bribes
+brick
+bricklayer
+bricks
+bridal
+bride
+bridegroom
+bridegrooms
+brides
+bridge
+bridgenorth
+bridges
+bridget
+bridle
+bridled
+brief
+briefer
+briefest
+briefly
+briefness
+brier
+briers
+brigandine
+bright
+brighten
+brightest
+brightly
+brightness
+brim
+brimful
+brims
+brimstone
+brinded
+brine
+bring
+bringer
+bringeth
+bringing
+bringings
+brings
+brinish
+brink
+brisk
+brisky
+bristle
+bristled
+bristly
+bristol
+bristow
+britain
+britaine
+britaines
+british
+briton
+britons
+brittany
+brittle
+broach
+broached
+broad
+broader
+broadsides
+brocas
+brock
+brogues
+broil
+broiling
+broils
+broke
+broken
+brokenly
+broker
+brokers
+brokes
+broking
+brooch
+brooches
+brood
+brooded
+brooding
+brook
+brooks
+broom
+broomstaff
+broth
+brothel
+brother
+brotherhood
+brotherhoods
+brotherly
+brothers
+broths
+brought
+brow
+brown
+browner
+brownist
+browny
+brows
+browse
+browsing
+bruis
+bruise
+bruised
+bruises
+bruising
+bruit
+bruited
+brundusium
+brunt
+brush
+brushes
+brute
+brutish
+brutus
+bubble
+bubbles
+bubbling
+bubukles
+buck
+bucket
+buckets
+bucking
+buckingham
+buckle
+buckled
+buckler
+bucklers
+bucklersbury
+buckles
+buckram
+bucks
+bud
+budded
+budding
+budge
+budger
+budget
+buds
+buff
+buffet
+buffeting
+buffets
+bug
+bugbear
+bugle
+bugs
+build
+builded
+buildeth
+building
+buildings
+builds
+built
+bulk
+bulks
+bull
+bullcalf
+bullen
+bullens
+bullet
+bullets
+bullocks
+bulls
+bully
+bulmer
+bulwark
+bulwarks
+bum
+bumbast
+bump
+bumper
+bums
+bunch
+bunches
+bundle
+bung
+bunghole
+bungle
+bunting
+buoy
+bur
+burbolt
+burd
+burden
+burdened
+burdening
+burdenous
+burdens
+burgh
+burgher
+burghers
+burglary
+burgomasters
+burgonet
+burgundy
+burial
+buried
+burier
+buriest
+burly
+burn
+burned
+burnet
+burneth
+burning
+burnish
+burns
+burnt
+burr
+burrows
+burs
+burst
+bursting
+bursts
+burthen
+burthens
+burton
+bury
+burying
+bush
+bushels
+bushes
+bushy
+busied
+busily
+busines
+business
+businesses
+buskin
+busky
+buss
+busses
+bussing
+bustle
+bustling
+busy
+but
+butcheed
+butcher
+butchered
+butcheries
+butcherly
+butchers
+butchery
+butler
+butt
+butter
+buttered
+butterflies
+butterfly
+butterwoman
+buttery
+buttock
+buttocks
+button
+buttonhole
+buttons
+buttress
+buttry
+butts
+buxom
+buy
+buyer
+buying
+buys
+buzz
+buzzard
+buzzards
+buzzers
+buzzing
+by
+bye
+byzantium
+c
+ca
+cabbage
+cabileros
+cabin
+cabins
+cable
+cables
+cackling
+cacodemon
+caddis
+caddisses
+cade
+cadence
+cadent
+cades
+cadmus
+caduceus
+cadwal
+cadwallader
+caelius
+caelo
+caesar
+caesarion
+caesars
+cage
+caged
+cagion
+cain
+caithness
+caitiff
+caitiffs
+caius
+cak
+cake
+cakes
+calaber
+calais
+calamities
+calamity
+calchas
+calculate
+calen
+calendar
+calendars
+calf
+caliban
+calibans
+calipolis
+cality
+caliver
+call
+callat
+called
+callet
+calling
+calls
+calm
+calmest
+calmly
+calmness
+calms
+calpurnia
+calumniate
+calumniating
+calumnious
+calumny
+calve
+calved
+calves
+calveskins
+calydon
+cam
+cambio
+cambria
+cambric
+cambrics
+cambridge
+cambyses
+came
+camel
+camelot
+camels
+camest
+camillo
+camlet
+camomile
+camp
+campeius
+camping
+camps
+can
+canakin
+canaries
+canary
+cancel
+cancell
+cancelled
+cancelling
+cancels
+cancer
+candidatus
+candied
+candle
+candles
+candlesticks
+candy
+canidius
+cank
+canker
+cankerblossom
+cankers
+cannibally
+cannibals
+cannon
+cannoneer
+cannons
+cannot
+canon
+canoniz
+canonize
+canonized
+canons
+canopied
+canopies
+canopy
+canst
+canstick
+canterbury
+cantle
+cantons
+canus
+canvas
+canvass
+canzonet
+cap
+capability
+capable
+capacities
+capacity
+caparison
+capdv
+cape
+capel
+capels
+caper
+capers
+capet
+caphis
+capilet
+capitaine
+capital
+capite
+capitol
+capitulate
+capocchia
+capon
+capons
+capp
+cappadocia
+capriccio
+capricious
+caps
+capt
+captain
+captains
+captainship
+captious
+captivate
+captivated
+captivates
+captive
+captives
+captivity
+captum
+capucius
+capulet
+capulets
+car
+carack
+caracks
+carat
+caraways
+carbonado
+carbuncle
+carbuncled
+carbuncles
+carcanet
+carcase
+carcases
+carcass
+carcasses
+card
+cardecue
+carded
+carders
+cardinal
+cardinally
+cardinals
+cardmaker
+cards
+carduus
+care
+cared
+career
+careers
+careful
+carefully
+careless
+carelessly
+carelessness
+cares
+caret
+cargo
+carl
+carlisle
+carlot
+carman
+carmen
+carnal
+carnally
+carnarvonshire
+carnation
+carnations
+carol
+carous
+carouse
+caroused
+carouses
+carousing
+carp
+carpenter
+carper
+carpet
+carpets
+carping
+carriage
+carriages
+carried
+carrier
+carriers
+carries
+carrion
+carrions
+carry
+carrying
+cars
+cart
+carters
+carthage
+carts
+carv
+carve
+carved
+carver
+carves
+carving
+cas
+casa
+casaer
+casca
+case
+casement
+casements
+cases
+cash
+cashier
+casing
+cask
+casket
+casketed
+caskets
+casque
+casques
+cassado
+cassandra
+cassibelan
+cassio
+cassius
+cassocks
+cast
+castalion
+castaway
+castaways
+casted
+caster
+castigate
+castigation
+castile
+castiliano
+casting
+castle
+castles
+casts
+casual
+casually
+casualties
+casualty
+cat
+cataian
+catalogue
+cataplasm
+cataracts
+catarrhs
+catastrophe
+catch
+catcher
+catches
+catching
+cate
+catechising
+catechism
+catechize
+cater
+caterpillars
+caters
+caterwauling
+cates
+catesby
+cathedral
+catlike
+catling
+catlings
+cato
+cats
+cattle
+caucasus
+caudle
+cauf
+caught
+cauldron
+caus
+cause
+caused
+causeless
+causer
+causes
+causest
+causeth
+cautel
+cautelous
+cautels
+cauterizing
+caution
+cautions
+cavaleiro
+cavalery
+cavaliers
+cave
+cavern
+caverns
+caves
+caveto
+caviary
+cavil
+cavilling
+cawdor
+cawdron
+cawing
+ce
+ceas
+cease
+ceases
+ceaseth
+cedar
+cedars
+cedius
+celebrate
+celebrated
+celebrates
+celebration
+celerity
+celestial
+celia
+cell
+cellar
+cellarage
+celsa
+cement
+censer
+censor
+censorinus
+censur
+censure
+censured
+censurers
+censures
+censuring
+centaur
+centaurs
+centre
+cents
+centuries
+centurion
+centurions
+century
+cerberus
+cerecloth
+cerements
+ceremonial
+ceremonies
+ceremonious
+ceremoniously
+ceremony
+ceres
+cerns
+certain
+certainer
+certainly
+certainties
+certainty
+certes
+certificate
+certified
+certifies
+certify
+ces
+cesario
+cess
+cesse
+cestern
+cetera
+cette
+chaces
+chaf
+chafe
+chafed
+chafes
+chaff
+chaffless
+chafing
+chain
+chains
+chair
+chairs
+chalic
+chalice
+chalices
+chalk
+chalks
+chalky
+challeng
+challenge
+challenged
+challenger
+challengers
+challenges
+cham
+chamber
+chamberers
+chamberlain
+chamberlains
+chambermaid
+chambermaids
+chambers
+chameleon
+champ
+champagne
+champain
+champains
+champion
+champions
+chanc
+chance
+chanced
+chancellor
+chances
+chandler
+chang
+change
+changeable
+changed
+changeful
+changeling
+changelings
+changer
+changes
+changest
+changing
+channel
+channels
+chanson
+chant
+chanticleer
+chanting
+chantries
+chantry
+chants
+chaos
+chap
+chape
+chapel
+chapeless
+chapels
+chaplain
+chaplains
+chapless
+chaplet
+chapmen
+chaps
+chapter
+character
+charactered
+characterless
+characters
+charactery
+characts
+charbon
+chare
+chares
+charg
+charge
+charged
+chargeful
+charges
+chargeth
+charging
+chariest
+chariness
+charing
+chariot
+chariots
+charitable
+charitably
+charities
+charity
+charlemain
+charles
+charm
+charmed
+charmer
+charmeth
+charmian
+charming
+charmingly
+charms
+charneco
+charnel
+charolois
+charon
+charter
+charters
+chartreux
+chary
+charybdis
+chas
+chase
+chased
+chaser
+chaseth
+chasing
+chaste
+chastely
+chastis
+chastise
+chastised
+chastisement
+chastity
+chat
+chatham
+chatillon
+chats
+chatt
+chattels
+chatter
+chattering
+chattles
+chaud
+chaunted
+chaw
+chawdron
+che
+cheap
+cheapen
+cheaper
+cheapest
+cheaply
+cheapside
+cheat
+cheated
+cheater
+cheaters
+cheating
+cheats
+check
+checked
+checker
+checking
+checks
+cheek
+cheeks
+cheer
+cheered
+cheerer
+cheerful
+cheerfully
+cheering
+cheerless
+cheerly
+cheers
+cheese
+chequer
+cher
+cherish
+cherished
+cherisher
+cherishes
+cherishing
+cherries
+cherry
+cherrypit
+chertsey
+cherub
+cherubims
+cherubin
+cherubins
+cheshu
+chess
+chest
+chester
+chestnut
+chestnuts
+chests
+chetas
+chev
+cheval
+chevalier
+chevaliers
+cheveril
+chew
+chewed
+chewet
+chewing
+chez
+chi
+chick
+chicken
+chickens
+chicurmurco
+chid
+chidden
+chide
+chiders
+chides
+chiding
+chief
+chiefest
+chiefly
+chien
+child
+childed
+childeric
+childhood
+childhoods
+childing
+childish
+childishness
+childlike
+childness
+children
+chill
+chilling
+chime
+chimes
+chimney
+chimneypiece
+chimneys
+chimurcho
+chin
+china
+chine
+chines
+chink
+chinks
+chins
+chipp
+chipper
+chips
+chiron
+chirping
+chirrah
+chirurgeonly
+chisel
+chitopher
+chivalrous
+chivalry
+choice
+choicely
+choicest
+choir
+choirs
+chok
+choke
+choked
+chokes
+choking
+choler
+choleric
+cholers
+chollors
+choose
+chooser
+chooses
+chooseth
+choosing
+chop
+chopine
+choplogic
+chopp
+chopped
+chopping
+choppy
+chops
+chopt
+chor
+choristers
+chorus
+chose
+chosen
+chough
+choughs
+chrish
+christ
+christen
+christendom
+christendoms
+christening
+christenings
+christian
+christianlike
+christians
+christmas
+christom
+christopher
+christophero
+chronicle
+chronicled
+chronicler
+chroniclers
+chronicles
+chrysolite
+chuck
+chucks
+chud
+chuffs
+church
+churches
+churchman
+churchmen
+churchyard
+churchyards
+churl
+churlish
+churlishly
+churls
+churn
+chus
+cicatrice
+cicatrices
+cicely
+cicero
+ciceter
+ciel
+ciitzens
+cilicia
+cimber
+cimmerian
+cinable
+cincture
+cinders
+cine
+cinna
+cinque
+cipher
+ciphers
+circa
+circe
+circle
+circled
+circlets
+circling
+circuit
+circum
+circumcised
+circumference
+circummur
+circumscrib
+circumscribed
+circumscription
+circumspect
+circumstance
+circumstanced
+circumstances
+circumstantial
+circumvent
+circumvention
+cistern
+citadel
+cital
+cite
+cited
+cites
+cities
+citing
+citizen
+citizens
+cittern
+city
+civet
+civil
+civility
+civilly
+clack
+clad
+claim
+claiming
+claims
+clamb
+clamber
+clammer
+clamor
+clamorous
+clamors
+clamour
+clamours
+clang
+clangor
+clap
+clapp
+clapped
+clapper
+clapping
+claps
+clare
+clarence
+claret
+claribel
+clasp
+clasps
+clatter
+claud
+claudio
+claudius
+clause
+claw
+clawed
+clawing
+claws
+clay
+clays
+clean
+cleanliest
+cleanly
+cleans
+cleanse
+cleansing
+clear
+clearer
+clearest
+clearly
+clearness
+clears
+cleave
+cleaving
+clef
+cleft
+cleitus
+clemency
+clement
+cleomenes
+cleopatpa
+cleopatra
+clepeth
+clept
+clerestories
+clergy
+clergyman
+clergymen
+clerk
+clerkly
+clerks
+clew
+client
+clients
+cliff
+clifford
+cliffords
+cliffs
+clifton
+climate
+climature
+climb
+climbed
+climber
+climbeth
+climbing
+climbs
+clime
+cling
+clink
+clinking
+clinquant
+clip
+clipp
+clipper
+clippeth
+clipping
+clipt
+clitus
+clo
+cloak
+cloakbag
+cloaks
+clock
+clocks
+clod
+cloddy
+clodpole
+clog
+clogging
+clogs
+cloister
+cloistress
+cloquence
+clos
+close
+closed
+closely
+closeness
+closer
+closes
+closest
+closet
+closing
+closure
+cloten
+clotens
+cloth
+clothair
+clotharius
+clothe
+clothes
+clothier
+clothiers
+clothing
+cloths
+clotpoles
+clotpoll
+cloud
+clouded
+cloudiness
+clouds
+cloudy
+clout
+clouted
+clouts
+cloven
+clover
+cloves
+clovest
+clowder
+clown
+clownish
+clowns
+cloy
+cloyed
+cloying
+cloyless
+cloyment
+cloys
+club
+clubs
+cluck
+clung
+clust
+clusters
+clutch
+clyster
+cneius
+cnemies
+co
+coach
+coaches
+coachmakers
+coact
+coactive
+coagulate
+coal
+coals
+coarse
+coarsely
+coast
+coasting
+coasts
+coat
+coated
+coats
+cobble
+cobbled
+cobbler
+cobham
+cobloaf
+cobweb
+cobwebs
+cock
+cockatrice
+cockatrices
+cockle
+cockled
+cockney
+cockpit
+cocks
+cocksure
+coctus
+cocytus
+cod
+codding
+codling
+codpiece
+codpieces
+cods
+coelestibus
+coesar
+coeur
+coffer
+coffers
+coffin
+coffins
+cog
+cogging
+cogitation
+cogitations
+cognition
+cognizance
+cogscomb
+cohabitants
+coher
+cohere
+coherence
+coherent
+cohorts
+coif
+coign
+coil
+coin
+coinage
+coiner
+coining
+coins
+col
+colbrand
+colchos
+cold
+colder
+coldest
+coldly
+coldness
+coldspur
+colebrook
+colic
+collar
+collars
+collateral
+colleagued
+collect
+collected
+collection
+college
+colleges
+collied
+collier
+colliers
+collop
+collusion
+colme
+colmekill
+coloquintida
+color
+colors
+colossus
+colour
+colourable
+coloured
+colouring
+colours
+colt
+colted
+colts
+columbine
+columbines
+colville
+com
+comagene
+comart
+comb
+combat
+combatant
+combatants
+combated
+combating
+combin
+combinate
+combination
+combine
+combined
+combless
+combustion
+come
+comedian
+comedians
+comedy
+comeliness
+comely
+comer
+comers
+comes
+comest
+comet
+cometh
+comets
+comfect
+comfit
+comfits
+comfort
+comfortable
+comforted
+comforter
+comforting
+comfortless
+comforts
+comic
+comical
+coming
+comings
+cominius
+comma
+command
+commande
+commanded
+commander
+commanders
+commanding
+commandment
+commandments
+commands
+comme
+commenc
+commence
+commenced
+commencement
+commences
+commencing
+commend
+commendable
+commendation
+commendations
+commended
+commending
+commends
+comment
+commentaries
+commenting
+comments
+commerce
+commingled
+commiseration
+commission
+commissioners
+commissions
+commit
+commits
+committ
+committed
+committing
+commix
+commixed
+commixtion
+commixture
+commodious
+commodities
+commodity
+common
+commonalty
+commoner
+commoners
+commonly
+commons
+commonweal
+commonwealth
+commotion
+commotions
+commune
+communicat
+communicate
+communication
+communities
+community
+comonty
+compact
+companies
+companion
+companions
+companionship
+company
+compar
+comparative
+compare
+compared
+comparing
+comparison
+comparisons
+compartner
+compass
+compasses
+compassing
+compassion
+compassionate
+compeers
+compel
+compell
+compelled
+compelling
+compels
+compensation
+competence
+competency
+competent
+competitor
+competitors
+compil
+compile
+compiled
+complain
+complainer
+complainest
+complaining
+complainings
+complains
+complaint
+complaints
+complement
+complements
+complete
+complexion
+complexioned
+complexions
+complices
+complies
+compliment
+complimental
+compliments
+complot
+complots
+complotted
+comply
+compos
+compose
+composed
+composition
+compost
+composture
+composure
+compound
+compounded
+compounds
+comprehend
+comprehended
+comprehends
+compremises
+compris
+comprising
+compromis
+compromise
+compt
+comptible
+comptrollers
+compulsatory
+compulsion
+compulsive
+compunctious
+computation
+comrade
+comrades
+comutual
+con
+concave
+concavities
+conceal
+concealed
+concealing
+concealment
+concealments
+conceals
+conceit
+conceited
+conceitless
+conceits
+conceiv
+conceive
+conceived
+conceives
+conceiving
+conception
+conceptions
+conceptious
+concern
+concernancy
+concerneth
+concerning
+concernings
+concerns
+conclave
+conclud
+conclude
+concluded
+concludes
+concluding
+conclusion
+conclusions
+concolinel
+concord
+concubine
+concupiscible
+concupy
+concur
+concurring
+concurs
+condemn
+condemnation
+condemned
+condemning
+condemns
+condescend
+condign
+condition
+conditionally
+conditions
+condole
+condolement
+condoling
+conduce
+conduct
+conducted
+conducting
+conductor
+conduit
+conduits
+conected
+coney
+confection
+confectionary
+confections
+confederacy
+confederate
+confederates
+confer
+conference
+conferr
+conferring
+confess
+confessed
+confesses
+confesseth
+confessing
+confession
+confessions
+confessor
+confidence
+confident
+confidently
+confin
+confine
+confined
+confineless
+confiners
+confines
+confining
+confirm
+confirmation
+confirmations
+confirmed
+confirmer
+confirmers
+confirming
+confirmities
+confirms
+confiscate
+confiscated
+confiscation
+confixed
+conflict
+conflicting
+conflicts
+confluence
+conflux
+conform
+conformable
+confound
+confounded
+confounding
+confounds
+confront
+confronted
+confus
+confused
+confusedly
+confusion
+confusions
+confutation
+confutes
+congeal
+congealed
+congealment
+congee
+conger
+congest
+congied
+congratulate
+congreeing
+congreeted
+congregate
+congregated
+congregation
+congregations
+congruent
+congruing
+conies
+conjectural
+conjecture
+conjectures
+conjoin
+conjoined
+conjoins
+conjointly
+conjunct
+conjunction
+conjunctive
+conjur
+conjuration
+conjurations
+conjure
+conjured
+conjurer
+conjurers
+conjures
+conjuring
+conjuro
+conn
+connected
+connive
+conqu
+conquer
+conquered
+conquering
+conqueror
+conquerors
+conquers
+conquest
+conquests
+conquring
+conrade
+cons
+consanguineous
+consanguinity
+conscienc
+conscience
+consciences
+conscionable
+consecrate
+consecrated
+consecrations
+consent
+consented
+consenting
+consents
+consequence
+consequences
+consequently
+conserve
+conserved
+conserves
+consider
+considerance
+considerate
+consideration
+considerations
+considered
+considering
+considerings
+considers
+consign
+consigning
+consist
+consisteth
+consisting
+consistory
+consists
+consolate
+consolation
+consonancy
+consonant
+consort
+consorted
+consortest
+conspectuities
+conspir
+conspiracy
+conspirant
+conspirator
+conspirators
+conspire
+conspired
+conspirers
+conspires
+conspiring
+constable
+constables
+constance
+constancies
+constancy
+constant
+constantine
+constantinople
+constantly
+constellation
+constitution
+constrain
+constrained
+constraineth
+constrains
+constraint
+constring
+construction
+construe
+consul
+consuls
+consulship
+consulships
+consult
+consulting
+consults
+consum
+consume
+consumed
+consumes
+consuming
+consummate
+consummation
+consumption
+consumptions
+contagion
+contagious
+contain
+containing
+contains
+contaminate
+contaminated
+contemn
+contemned
+contemning
+contemns
+contemplate
+contemplation
+contemplative
+contempt
+contemptible
+contempts
+contemptuous
+contemptuously
+contend
+contended
+contending
+contendon
+content
+contenta
+contented
+contenteth
+contention
+contentious
+contentless
+contento
+contents
+contest
+contestation
+continence
+continency
+continent
+continents
+continu
+continual
+continually
+continuance
+continuantly
+continuate
+continue
+continued
+continuer
+continues
+continuing
+contract
+contracted
+contracting
+contraction
+contradict
+contradicted
+contradiction
+contradicts
+contraries
+contrarieties
+contrariety
+contrarious
+contrariously
+contrary
+contre
+contribution
+contributors
+contrite
+contriv
+contrive
+contrived
+contriver
+contrives
+contriving
+control
+controll
+controller
+controlling
+controlment
+controls
+controversy
+contumelious
+contumeliously
+contumely
+contusions
+convenience
+conveniences
+conveniency
+convenient
+conveniently
+convented
+conventicles
+convents
+convers
+conversant
+conversation
+conversations
+converse
+conversed
+converses
+conversing
+conversion
+convert
+converted
+convertest
+converting
+convertite
+convertites
+converts
+convey
+conveyance
+conveyances
+conveyers
+conveying
+convict
+convicted
+convince
+convinced
+convinces
+convive
+convocation
+convoy
+convulsions
+cony
+cook
+cookery
+cooks
+cool
+cooled
+cooling
+cools
+coop
+coops
+cop
+copatain
+cope
+cophetua
+copied
+copies
+copious
+copper
+copperspur
+coppice
+copulation
+copulatives
+copy
+cor
+coragio
+coral
+coram
+corambus
+coranto
+corantos
+corbo
+cord
+corded
+cordelia
+cordial
+cordis
+cords
+core
+corin
+corinth
+corinthian
+coriolanus
+corioli
+cork
+corky
+cormorant
+corn
+cornelia
+cornelius
+corner
+corners
+cornerstone
+cornets
+cornish
+corns
+cornuto
+cornwall
+corollary
+coronal
+coronation
+coronet
+coronets
+corporal
+corporals
+corporate
+corpse
+corpulent
+correct
+corrected
+correcting
+correction
+correctioner
+corrects
+correspondence
+correspondent
+corresponding
+corresponsive
+corrigible
+corrival
+corrivals
+corroborate
+corrosive
+corrupt
+corrupted
+corrupter
+corrupters
+corruptible
+corruptibly
+corrupting
+corruption
+corruptly
+corrupts
+corse
+corses
+corslet
+cosmo
+cost
+costard
+costermongers
+costlier
+costly
+costs
+cot
+cote
+coted
+cotsall
+cotsole
+cotswold
+cottage
+cottages
+cotus
+couch
+couched
+couching
+couchings
+coude
+cough
+coughing
+could
+couldst
+coulter
+council
+councillor
+councils
+counsel
+counsell
+counsellor
+counsellors
+counselor
+counselors
+counsels
+count
+counted
+countenanc
+countenance
+countenances
+counter
+counterchange
+countercheck
+counterfeit
+counterfeited
+counterfeiting
+counterfeitly
+counterfeits
+countermand
+countermands
+countermines
+counterpart
+counterpoints
+counterpois
+counterpoise
+counters
+countervail
+countess
+countesses
+counties
+counting
+countless
+countries
+countrv
+country
+countryman
+countrymen
+counts
+county
+couper
+couple
+coupled
+couplement
+couples
+couplet
+couplets
+cour
+courage
+courageous
+courageously
+courages
+courier
+couriers
+couronne
+cours
+course
+coursed
+courser
+coursers
+courses
+coursing
+court
+courted
+courteous
+courteously
+courtesan
+courtesies
+courtesy
+courtezan
+courtezans
+courtier
+courtiers
+courtlike
+courtly
+courtney
+courts
+courtship
+cousin
+cousins
+couterfeit
+coutume
+covenant
+covenants
+covent
+coventry
+cover
+covered
+covering
+coverlet
+covers
+covert
+covertly
+coverture
+covet
+coveted
+coveting
+covetings
+covetous
+covetously
+covetousness
+covets
+cow
+coward
+cowarded
+cowardice
+cowardly
+cowards
+cowardship
+cowish
+cowl
+cowslip
+cowslips
+cox
+coxcomb
+coxcombs
+coy
+coystrill
+coz
+cozen
+cozenage
+cozened
+cozener
+cozeners
+cozening
+coziers
+crab
+crabbed
+crabs
+crack
+cracked
+cracker
+crackers
+cracking
+cracks
+cradle
+cradled
+cradles
+craft
+crafted
+craftied
+craftier
+craftily
+crafts
+craftsmen
+crafty
+cram
+cramm
+cramp
+cramps
+crams
+cranking
+cranks
+cranmer
+crannied
+crannies
+cranny
+crants
+crare
+crash
+crassus
+crav
+crave
+craved
+craven
+cravens
+craves
+craveth
+craving
+crawl
+crawling
+crawls
+craz
+crazed
+crazy
+creaking
+cream
+create
+created
+creates
+creating
+creation
+creator
+creature
+creatures
+credence
+credent
+credible
+credit
+creditor
+creditors
+credo
+credulity
+credulous
+creed
+creek
+creeks
+creep
+creeping
+creeps
+crept
+crescent
+crescive
+cressets
+cressid
+cressida
+cressids
+cressy
+crest
+crested
+crestfall
+crestless
+crests
+cretan
+crete
+crevice
+crew
+crews
+crib
+cribb
+cribs
+cricket
+crickets
+cried
+criedst
+crier
+cries
+criest
+crieth
+crime
+crimeful
+crimeless
+crimes
+criminal
+crimson
+cringe
+cripple
+crisp
+crisped
+crispian
+crispianus
+crispin
+critic
+critical
+critics
+croak
+croaking
+croaks
+crocodile
+cromer
+cromwell
+crone
+crook
+crookback
+crooked
+crooking
+crop
+cropp
+crosby
+cross
+crossed
+crosses
+crossest
+crossing
+crossings
+crossly
+crossness
+crost
+crotchets
+crouch
+crouching
+crow
+crowd
+crowded
+crowding
+crowds
+crowflowers
+crowing
+crowkeeper
+crown
+crowned
+crowner
+crownet
+crownets
+crowning
+crowns
+crows
+crudy
+cruel
+cruell
+crueller
+cruelly
+cruels
+cruelty
+crum
+crumble
+crumbs
+crupper
+crusadoes
+crush
+crushed
+crushest
+crushing
+crust
+crusts
+crusty
+crutch
+crutches
+cry
+crying
+crystal
+crystalline
+crystals
+cub
+cubbert
+cubiculo
+cubit
+cubs
+cuckold
+cuckoldly
+cuckolds
+cuckoo
+cucullus
+cudgel
+cudgeled
+cudgell
+cudgelling
+cudgels
+cue
+cues
+cuff
+cuffs
+cuique
+cull
+culling
+cullion
+cullionly
+cullions
+culpable
+culverin
+cum
+cumber
+cumberland
+cunning
+cunningly
+cunnings
+cuore
+cup
+cupbearer
+cupboarding
+cupid
+cupids
+cuppele
+cups
+cur
+curan
+curate
+curb
+curbed
+curbing
+curbs
+curd
+curdied
+curds
+cure
+cured
+cureless
+curer
+cures
+curfew
+curing
+curio
+curiosity
+curious
+curiously
+curl
+curled
+curling
+curls
+currance
+currants
+current
+currents
+currish
+curry
+curs
+curse
+cursed
+curses
+cursies
+cursing
+cursorary
+curst
+curster
+curstest
+curstness
+cursy
+curtail
+curtain
+curtains
+curtal
+curtis
+curtle
+curtsied
+curtsies
+curtsy
+curvet
+curvets
+cushes
+cushion
+cushions
+custalorum
+custard
+custody
+custom
+customary
+customed
+customer
+customers
+customs
+custure
+cut
+cutler
+cutpurse
+cutpurses
+cuts
+cutter
+cutting
+cuttle
+cxsar
+cyclops
+cydnus
+cygnet
+cygnets
+cym
+cymbals
+cymbeline
+cyme
+cynic
+cynthia
+cypress
+cypriot
+cyprus
+cyrus
+cytherea
+d
+dabbled
+dace
+dad
+daedalus
+daemon
+daff
+daffed
+daffest
+daffodils
+dagger
+daggers
+dagonet
+daily
+daintier
+dainties
+daintiest
+daintily
+daintiness
+daintry
+dainty
+daisied
+daisies
+daisy
+dale
+dalliance
+dallied
+dallies
+dally
+dallying
+dalmatians
+dam
+damage
+damascus
+damask
+damasked
+dame
+dames
+damm
+damn
+damnable
+damnably
+damnation
+damned
+damns
+damoiselle
+damon
+damosella
+damp
+dams
+damsel
+damsons
+dan
+danc
+dance
+dancer
+dances
+dancing
+dandle
+dandy
+dane
+dang
+danger
+dangerous
+dangerously
+dangers
+dangling
+daniel
+danish
+dank
+dankish
+danskers
+daphne
+dappled
+dapples
+dar
+dardan
+dardanian
+dardanius
+dare
+dared
+dareful
+dares
+darest
+daring
+darius
+dark
+darken
+darkening
+darkens
+darker
+darkest
+darkling
+darkly
+darkness
+darling
+darlings
+darnel
+darraign
+dart
+darted
+darter
+dartford
+darting
+darts
+dash
+dashes
+dashing
+dastard
+dastards
+dat
+datchet
+date
+dated
+dateless
+dates
+daub
+daughter
+daughters
+daunt
+daunted
+dauntless
+dauphin
+daventry
+davy
+daw
+dawn
+dawning
+daws
+day
+daylight
+days
+dazzle
+dazzled
+dazzling
+de
+dead
+deadly
+deaf
+deafing
+deafness
+deafs
+deal
+dealer
+dealers
+dealest
+dealing
+dealings
+deals
+dealt
+dean
+deanery
+dear
+dearer
+dearest
+dearly
+dearness
+dears
+dearth
+dearths
+death
+deathbed
+deathful
+deaths
+deathsman
+deathsmen
+debarred
+debase
+debate
+debated
+debatement
+debateth
+debating
+debauch
+debile
+debility
+debitor
+debonair
+deborah
+debosh
+debt
+debted
+debtor
+debtors
+debts
+debuty
+decay
+decayed
+decayer
+decaying
+decays
+deceas
+decease
+deceased
+deceit
+deceitful
+deceits
+deceiv
+deceivable
+deceive
+deceived
+deceiver
+deceivers
+deceives
+deceivest
+deceiveth
+deceiving
+december
+decent
+deceptious
+decerns
+decide
+decides
+decimation
+decipher
+deciphers
+decision
+decius
+deck
+decking
+decks
+deckt
+declare
+declares
+declension
+declensions
+declin
+decline
+declined
+declines
+declining
+decoct
+decorum
+decreas
+decrease
+decreasing
+decree
+decreed
+decrees
+decrepit
+dedicate
+dedicated
+dedicates
+dedication
+deed
+deedless
+deeds
+deem
+deemed
+deep
+deeper
+deepest
+deeply
+deeps
+deepvow
+deer
+deesse
+defac
+deface
+defaced
+defacer
+defacers
+defacing
+defam
+default
+defeat
+defeated
+defeats
+defeatures
+defect
+defective
+defects
+defence
+defences
+defend
+defendant
+defended
+defender
+defenders
+defending
+defends
+defense
+defensible
+defensive
+defer
+deferr
+defiance
+deficient
+defied
+defies
+defil
+defile
+defiler
+defiles
+defiling
+define
+definement
+definite
+definitive
+definitively
+deflow
+deflower
+deflowered
+deform
+deformed
+deformities
+deformity
+deftly
+defunct
+defunction
+defuse
+defy
+defying
+degenerate
+degraded
+degree
+degrees
+deified
+deifying
+deign
+deigned
+deiphobus
+deities
+deity
+deja
+deject
+dejected
+delabreth
+delay
+delayed
+delaying
+delays
+delectable
+deliberate
+delicate
+delicates
+delicious
+deliciousness
+delight
+delighted
+delightful
+delights
+delinquents
+deliv
+deliver
+deliverance
+delivered
+delivering
+delivers
+delivery
+delphos
+deluded
+deluding
+deluge
+delve
+delver
+delves
+demand
+demanded
+demanding
+demands
+demean
+demeanor
+demeanour
+demerits
+demesnes
+demetrius
+demi
+demigod
+demise
+demoiselles
+demon
+demonstrable
+demonstrate
+demonstrated
+demonstrating
+demonstration
+demonstrative
+demure
+demurely
+demuring
+den
+denay
+deni
+denial
+denials
+denied
+denier
+denies
+deniest
+denis
+denmark
+dennis
+denny
+denote
+denoted
+denotement
+denounc
+denounce
+denouncing
+dens
+denunciation
+deny
+denying
+deo
+depart
+departed
+departest
+departing
+departure
+depeche
+depend
+dependant
+dependants
+depended
+dependence
+dependences
+dependency
+dependent
+dependents
+depender
+depending
+depends
+deplore
+deploring
+depopulate
+depos
+depose
+deposed
+deposing
+depositaries
+deprav
+depravation
+deprave
+depraved
+depraves
+depress
+depriv
+deprive
+depth
+depths
+deputation
+depute
+deputed
+deputies
+deputing
+deputy
+deracinate
+derby
+dercetas
+dere
+derides
+derision
+deriv
+derivation
+derivative
+derive
+derived
+derives
+derogate
+derogately
+derogation
+des
+desartless
+descant
+descend
+descended
+descending
+descends
+descension
+descent
+descents
+describe
+described
+describes
+descried
+description
+descriptions
+descry
+desdemon
+desdemona
+desert
+deserts
+deserv
+deserve
+deserved
+deservedly
+deserver
+deservers
+deserves
+deservest
+deserving
+deservings
+design
+designment
+designments
+designs
+desir
+desire
+desired
+desirers
+desires
+desirest
+desiring
+desirous
+desist
+desk
+desolate
+desolation
+desp
+despair
+despairing
+despairs
+despatch
+desperate
+desperately
+desperation
+despis
+despise
+despised
+despiser
+despiseth
+despising
+despite
+despiteful
+despoiled
+dest
+destin
+destined
+destinies
+destiny
+destitute
+destroy
+destroyed
+destroyer
+destroyers
+destroying
+destroys
+destruction
+destructions
+det
+detain
+detains
+detect
+detected
+detecting
+detection
+detector
+detects
+detention
+determin
+determinate
+determination
+determinations
+determine
+determined
+determines
+detest
+detestable
+detested
+detesting
+detests
+detract
+detraction
+detractions
+deucalion
+deuce
+deum
+deux
+devant
+devesting
+device
+devices
+devil
+devilish
+devils
+devis
+devise
+devised
+devises
+devising
+devoid
+devonshire
+devote
+devoted
+devotion
+devour
+devoured
+devourers
+devouring
+devours
+devout
+devoutly
+dew
+dewberries
+dewdrops
+dewlap
+dewlapp
+dews
+dewy
+dexter
+dexteriously
+dexterity
+di
+diable
+diablo
+diadem
+dial
+dialect
+dialogue
+dialogued
+dials
+diameter
+diamond
+diamonds
+dian
+diana
+diaper
+dibble
+dic
+dice
+dicers
+dich
+dick
+dickens
+dickon
+dicky
+dictator
+diction
+dictynna
+did
+diddle
+didest
+dido
+didst
+die
+died
+diedst
+dies
+diest
+diet
+dieted
+dieter
+dieu
+diff
+differ
+difference
+differences
+differency
+different
+differing
+differs
+difficile
+difficult
+difficulties
+difficulty
+diffidence
+diffidences
+diffus
+diffused
+diffusest
+dig
+digest
+digested
+digestion
+digestions
+digg
+digging
+dighton
+dignified
+dignifies
+dignify
+dignities
+dignity
+digress
+digressing
+digression
+digs
+digt
+dilate
+dilated
+dilations
+dilatory
+dild
+dildos
+dilemma
+dilemmas
+diligence
+diligent
+diluculo
+dim
+dimension
+dimensions
+diminish
+diminishing
+diminution
+diminutive
+diminutives
+dimm
+dimmed
+dimming
+dimpled
+dimples
+dims
+din
+dine
+dined
+diner
+dines
+ding
+dining
+dinner
+dinners
+dinnertime
+dint
+diomed
+diomede
+diomedes
+dion
+dip
+dipp
+dipping
+dips
+dir
+dire
+direct
+directed
+directing
+direction
+directions
+directitude
+directive
+directly
+directs
+direful
+direness
+direst
+dirge
+dirges
+dirt
+dirty
+dis
+disability
+disable
+disabled
+disabling
+disadvantage
+disagree
+disallow
+disanimates
+disannul
+disannuls
+disappointed
+disarm
+disarmed
+disarmeth
+disarms
+disaster
+disasters
+disastrous
+disbench
+disbranch
+disburdened
+disburs
+disburse
+disbursed
+discandy
+discandying
+discard
+discarded
+discase
+discased
+discern
+discerner
+discerning
+discernings
+discerns
+discharg
+discharge
+discharged
+discharging
+discipled
+disciples
+disciplin
+discipline
+disciplined
+disciplines
+disclaim
+disclaiming
+disclaims
+disclos
+disclose
+disclosed
+discloses
+discolour
+discoloured
+discolours
+discomfit
+discomfited
+discomfiture
+discomfort
+discomfortable
+discommend
+disconsolate
+discontent
+discontented
+discontentedly
+discontenting
+discontents
+discontinue
+discontinued
+discord
+discordant
+discords
+discourse
+discoursed
+discourser
+discourses
+discoursive
+discourtesy
+discov
+discover
+discovered
+discoverers
+discoveries
+discovering
+discovers
+discovery
+discredit
+discredited
+discredits
+discreet
+discreetly
+discretion
+discretions
+discuss
+disdain
+disdained
+disdaineth
+disdainful
+disdainfully
+disdaining
+disdains
+disdnguish
+diseas
+disease
+diseased
+diseases
+disedg
+disembark
+disfigure
+disfigured
+disfurnish
+disgorge
+disgrac
+disgrace
+disgraced
+disgraceful
+disgraces
+disgracing
+disgracious
+disguis
+disguise
+disguised
+disguiser
+disguises
+disguising
+dish
+dishabited
+dishclout
+dishearten
+disheartens
+dishes
+dishonest
+dishonestly
+dishonesty
+dishonor
+dishonorable
+dishonors
+dishonour
+dishonourable
+dishonoured
+dishonours
+disinherit
+disinherited
+disjoin
+disjoining
+disjoins
+disjoint
+disjunction
+dislik
+dislike
+disliken
+dislikes
+dislimns
+dislocate
+dislodg
+disloyal
+disloyalty
+dismal
+dismantle
+dismantled
+dismask
+dismay
+dismayed
+dismemb
+dismember
+dismes
+dismiss
+dismissed
+dismissing
+dismission
+dismount
+dismounted
+disnatur
+disobedience
+disobedient
+disobey
+disobeys
+disorb
+disorder
+disordered
+disorderly
+disorders
+disparage
+disparagement
+disparagements
+dispark
+dispatch
+dispensation
+dispense
+dispenses
+dispers
+disperse
+dispersed
+dispersedly
+dispersing
+dispiteous
+displac
+displace
+displaced
+displant
+displanting
+display
+displayed
+displeas
+displease
+displeased
+displeasing
+displeasure
+displeasures
+disponge
+disport
+disports
+dispos
+dispose
+disposed
+disposer
+disposing
+disposition
+dispositions
+dispossess
+dispossessing
+disprais
+dispraise
+dispraising
+dispraisingly
+dispropertied
+disproportion
+disproportioned
+disprov
+disprove
+disproved
+dispursed
+disputable
+disputation
+disputations
+dispute
+disputed
+disputes
+disputing
+disquantity
+disquiet
+disquietly
+disrelish
+disrobe
+disseat
+dissemble
+dissembled
+dissembler
+dissemblers
+dissembling
+dissembly
+dissension
+dissensions
+dissentious
+dissever
+dissipation
+dissolute
+dissolutely
+dissolution
+dissolutions
+dissolv
+dissolve
+dissolved
+dissolves
+dissuade
+dissuaded
+distaff
+distaffs
+distain
+distains
+distance
+distant
+distaste
+distasted
+distasteful
+distemp
+distemper
+distemperature
+distemperatures
+distempered
+distempering
+distil
+distill
+distillation
+distilled
+distills
+distilment
+distinct
+distinction
+distinctly
+distingue
+distinguish
+distinguishes
+distinguishment
+distract
+distracted
+distractedly
+distraction
+distractions
+distracts
+distrain
+distraught
+distress
+distressed
+distresses
+distressful
+distribute
+distributed
+distribution
+distrust
+distrustful
+disturb
+disturbed
+disturbers
+disturbing
+disunite
+disvalued
+disvouch
+dit
+ditch
+ditchers
+ditches
+dites
+ditties
+ditty
+diurnal
+div
+dive
+diver
+divers
+diversely
+diversity
+divert
+diverted
+diverts
+dives
+divest
+dividable
+dividant
+divide
+divided
+divides
+divideth
+divin
+divination
+divine
+divinely
+divineness
+diviner
+divines
+divinest
+divining
+divinity
+division
+divisions
+divorc
+divorce
+divorced
+divorcement
+divorcing
+divulg
+divulge
+divulged
+divulging
+dizy
+dizzy
+do
+doating
+dobbin
+dock
+docks
+doct
+doctor
+doctors
+doctrine
+document
+dodge
+doe
+doer
+doers
+does
+doest
+doff
+dog
+dogberry
+dogfish
+dogg
+dogged
+dogs
+doigts
+doing
+doings
+doit
+doits
+dolabella
+dole
+doleful
+doll
+dollar
+dollars
+dolor
+dolorous
+dolour
+dolours
+dolphin
+dolt
+dolts
+domestic
+domestics
+dominance
+dominations
+dominator
+domine
+domineer
+domineering
+dominical
+dominion
+dominions
+domitius
+dommelton
+don
+donalbain
+donation
+donc
+doncaster
+done
+dong
+donn
+donne
+donner
+donnerai
+doom
+doomsday
+door
+doorkeeper
+doors
+dorcas
+doreus
+doricles
+dormouse
+dorothy
+dorset
+dorsetshire
+dost
+dotage
+dotant
+dotard
+dotards
+dote
+doted
+doters
+dotes
+doteth
+doth
+doting
+double
+doubled
+doubleness
+doubler
+doublet
+doublets
+doubling
+doubly
+doubt
+doubted
+doubtful
+doubtfully
+doubting
+doubtless
+doubts
+doug
+dough
+doughty
+doughy
+douglas
+dout
+doute
+douts
+dove
+dovehouse
+dover
+doves
+dow
+dowager
+dowdy
+dower
+dowerless
+dowers
+dowlas
+dowle
+down
+downfall
+downright
+downs
+downstairs
+downtrod
+downward
+downwards
+downy
+dowries
+dowry
+dowsabel
+doxy
+dozed
+dozen
+dozens
+dozy
+drab
+drabbing
+drabs
+drachma
+drachmas
+draff
+drag
+dragg
+dragged
+dragging
+dragon
+dragonish
+dragons
+drain
+drained
+drains
+drake
+dram
+dramatis
+drank
+draught
+draughts
+drave
+draw
+drawbridge
+drawer
+drawers
+draweth
+drawing
+drawling
+drawn
+draws
+drayman
+draymen
+dread
+dreaded
+dreadful
+dreadfully
+dreading
+dreads
+dream
+dreamer
+dreamers
+dreaming
+dreams
+dreamt
+drearning
+dreary
+dreg
+dregs
+drench
+drenched
+dress
+dressed
+dresser
+dressing
+dressings
+drest
+drew
+dribbling
+dried
+drier
+dries
+drift
+drily
+drink
+drinketh
+drinking
+drinkings
+drinks
+driv
+drive
+drivelling
+driven
+drives
+driveth
+driving
+drizzle
+drizzled
+drizzles
+droit
+drollery
+dromio
+dromios
+drone
+drones
+droop
+droopeth
+drooping
+droops
+drop
+dropheir
+droplets
+dropp
+dropper
+droppeth
+dropping
+droppings
+drops
+dropsied
+dropsies
+dropsy
+dropt
+dross
+drossy
+drought
+drove
+droven
+drovier
+drown
+drowned
+drowning
+drowns
+drows
+drowse
+drowsily
+drowsiness
+drowsy
+drudge
+drudgery
+drudges
+drug
+drugg
+drugs
+drum
+drumble
+drummer
+drumming
+drums
+drunk
+drunkard
+drunkards
+drunken
+drunkenly
+drunkenness
+dry
+dryness
+dst
+du
+dub
+dubb
+ducat
+ducats
+ducdame
+duchess
+duchies
+duchy
+duck
+ducking
+ducks
+dudgeon
+due
+duellist
+duello
+duer
+dues
+duff
+dug
+dugs
+duke
+dukedom
+dukedoms
+dukes
+dulcet
+dulche
+dull
+dullard
+duller
+dullest
+dulling
+dullness
+dulls
+dully
+dulness
+duly
+dumain
+dumb
+dumbe
+dumbly
+dumbness
+dump
+dumps
+dun
+duncan
+dung
+dungeon
+dungeons
+dunghill
+dunghills
+dungy
+dunnest
+dunsinane
+dunsmore
+dunstable
+dupp
+durance
+during
+durst
+dusky
+dust
+dusted
+dusty
+dutch
+dutchman
+duteous
+duties
+dutiful
+duty
+dwarf
+dwarfish
+dwell
+dwellers
+dwelling
+dwells
+dwelt
+dwindle
+dy
+dye
+dyed
+dyer
+dying
+e
+each
+eager
+eagerly
+eagerness
+eagle
+eagles
+eaning
+eanlings
+ear
+earing
+earl
+earldom
+earlier
+earliest
+earliness
+earls
+early
+earn
+earned
+earnest
+earnestly
+earnestness
+earns
+ears
+earth
+earthen
+earthlier
+earthly
+earthquake
+earthquakes
+earthy
+eas
+ease
+eased
+easeful
+eases
+easier
+easiest
+easiliest
+easily
+easiness
+easing
+east
+eastcheap
+easter
+eastern
+eastward
+easy
+eat
+eaten
+eater
+eaters
+eating
+eats
+eaux
+eaves
+ebb
+ebbing
+ebbs
+ebon
+ebony
+ebrew
+ecce
+echapper
+echo
+echoes
+eclips
+eclipse
+eclipses
+ecolier
+ecoutez
+ecstacy
+ecstasies
+ecstasy
+ecus
+eden
+edg
+edgar
+edge
+edged
+edgeless
+edges
+edict
+edicts
+edifice
+edifices
+edified
+edifies
+edition
+edm
+edmund
+edmunds
+edmundsbury
+educate
+educated
+education
+edward
+eel
+eels
+effect
+effected
+effectless
+effects
+effectual
+effectually
+effeminate
+effigies
+effus
+effuse
+effusion
+eftest
+egal
+egally
+eget
+egeus
+egg
+eggs
+eggshell
+eglamour
+eglantine
+egma
+ego
+egregious
+egregiously
+egress
+egypt
+egyptian
+egyptians
+eie
+eight
+eighteen
+eighth
+eightpenny
+eighty
+eisel
+either
+eject
+eke
+el
+elbe
+elbow
+elbows
+eld
+elder
+elders
+eldest
+eleanor
+elect
+elected
+election
+elegancy
+elegies
+element
+elements
+elephant
+elephants
+elevated
+eleven
+eleventh
+elf
+elflocks
+eliads
+elinor
+elizabeth
+ell
+elle
+ellen
+elm
+eloquence
+eloquent
+else
+elsewhere
+elsinore
+eltham
+elves
+elvish
+ely
+elysium
+em
+emballing
+embalm
+embalms
+embark
+embarked
+embarquements
+embassade
+embassage
+embassies
+embassy
+embattailed
+embattl
+embattle
+embay
+embellished
+embers
+emblaze
+emblem
+emblems
+embodied
+embold
+emboldens
+emboss
+embossed
+embounded
+embowel
+embowell
+embrac
+embrace
+embraced
+embracement
+embracements
+embraces
+embracing
+embrasures
+embroider
+embroidery
+emhracing
+emilia
+eminence
+eminent
+eminently
+emmanuel
+emnity
+empale
+emperal
+emperess
+emperial
+emperor
+empery
+emphasis
+empire
+empirics
+empiricutic
+empleached
+employ
+employed
+employer
+employment
+employments
+empoison
+empress
+emptied
+emptier
+empties
+emptiness
+empty
+emptying
+emulate
+emulation
+emulations
+emulator
+emulous
+en
+enact
+enacted
+enacts
+enactures
+enamell
+enamelled
+enamour
+enamoured
+enanmour
+encamp
+encamped
+encave
+enceladus
+enchaf
+enchafed
+enchant
+enchanted
+enchanting
+enchantingly
+enchantment
+enchantress
+enchants
+enchas
+encircle
+encircled
+enclos
+enclose
+enclosed
+encloses
+encloseth
+enclosing
+enclouded
+encompass
+encompassed
+encompasseth
+encompassment
+encore
+encorporal
+encount
+encounter
+encountered
+encounters
+encourage
+encouraged
+encouragement
+encrimsoned
+encroaching
+encumb
+end
+endamage
+endamagement
+endanger
+endart
+endear
+endeared
+endeavour
+endeavours
+ended
+ender
+ending
+endings
+endite
+endless
+endow
+endowed
+endowments
+endows
+ends
+endu
+endue
+endur
+endurance
+endure
+endured
+endures
+enduring
+endymion
+eneas
+enemies
+enemy
+enernies
+enew
+enfeebled
+enfeebles
+enfeoff
+enfetter
+enfoldings
+enforc
+enforce
+enforced
+enforcedly
+enforcement
+enforces
+enforcest
+enfranched
+enfranchis
+enfranchise
+enfranchised
+enfranchisement
+enfreed
+enfreedoming
+engag
+engage
+engaged
+engagements
+engaging
+engaol
+engend
+engender
+engenders
+engilds
+engine
+engineer
+enginer
+engines
+engirt
+england
+english
+englishman
+englishmen
+engluts
+englutted
+engraffed
+engraft
+engrafted
+engrav
+engrave
+engross
+engrossed
+engrossest
+engrossing
+engrossments
+enguard
+enigma
+enigmatical
+enjoin
+enjoined
+enjoy
+enjoyed
+enjoyer
+enjoying
+enjoys
+enkindle
+enkindled
+enlard
+enlarg
+enlarge
+enlarged
+enlargement
+enlargeth
+enlighten
+enlink
+enmesh
+enmities
+enmity
+ennoble
+ennobled
+enobarb
+enobarbus
+enon
+enormity
+enormous
+enough
+enow
+enpatron
+enpierced
+enquir
+enquire
+enquired
+enrag
+enrage
+enraged
+enrages
+enrank
+enrapt
+enrich
+enriched
+enriches
+enridged
+enrings
+enrob
+enrobe
+enroll
+enrolled
+enrooted
+enrounded
+enschedul
+ensconce
+ensconcing
+enseamed
+ensear
+enseigne
+enseignez
+ensemble
+enshelter
+enshielded
+enshrines
+ensign
+ensigns
+enskied
+ensman
+ensnare
+ensnared
+ensnareth
+ensteep
+ensu
+ensue
+ensued
+ensues
+ensuing
+enswathed
+ent
+entail
+entame
+entangled
+entangles
+entendre
+enter
+entered
+entering
+enterprise
+enterprises
+enters
+entertain
+entertained
+entertainer
+entertaining
+entertainment
+entertainments
+enthrall
+enthralled
+enthron
+enthroned
+entice
+enticements
+enticing
+entire
+entirely
+entitle
+entitled
+entitling
+entomb
+entombed
+entrails
+entrance
+entrances
+entrap
+entrapp
+entre
+entreat
+entreated
+entreaties
+entreating
+entreatments
+entreats
+entreaty
+entrench
+entry
+entwist
+envelop
+envenom
+envenomed
+envenoms
+envied
+envies
+envious
+enviously
+environ
+environed
+envoy
+envy
+envying
+enwheel
+enwombed
+enwraps
+ephesian
+ephesians
+ephesus
+epicure
+epicurean
+epicures
+epicurism
+epicurus
+epidamnum
+epidaurus
+epigram
+epilepsy
+epileptic
+epilogue
+epilogues
+epistles
+epistrophus
+epitaph
+epitaphs
+epithet
+epitheton
+epithets
+epitome
+equal
+equalities
+equality
+equall
+equally
+equalness
+equals
+equinoctial
+equinox
+equipage
+equity
+equivocal
+equivocate
+equivocates
+equivocation
+equivocator
+er
+erbear
+erbearing
+erbears
+erbeat
+erblows
+erboard
+erborne
+ercame
+ercast
+ercharg
+ercharged
+ercharging
+ercles
+ercome
+ercover
+ercrows
+erdoing
+ere
+erebus
+erect
+erected
+erecting
+erection
+erects
+erewhile
+erflourish
+erflow
+erflowing
+erflows
+erfraught
+erga
+ergalled
+erglanced
+ergo
+ergone
+ergrow
+ergrown
+ergrowth
+erhang
+erhanging
+erhasty
+erhear
+erheard
+eringoes
+erjoy
+erleap
+erleaps
+erleavens
+erlook
+erlooking
+ermaster
+ermengare
+ermount
+ern
+ernight
+eros
+erpaid
+erparted
+erpast
+erpays
+erpeer
+erperch
+erpicturing
+erpingham
+erposting
+erpow
+erpress
+erpressed
+err
+errand
+errands
+errant
+errate
+erraught
+erreaches
+erred
+errest
+erring
+erroneous
+error
+errors
+errs
+errule
+errun
+erset
+ershade
+ershades
+ershine
+ershot
+ersized
+erskip
+erslips
+erspreads
+erst
+erstare
+erstep
+erstunk
+ersway
+ersways
+erswell
+erta
+ertake
+erteemed
+erthrow
+erthrown
+erthrows
+ertook
+ertop
+ertopping
+ertrip
+erturn
+erudition
+eruption
+eruptions
+ervalues
+erwalk
+erwatch
+erween
+erweens
+erweigh
+erweighs
+erwhelm
+erwhelmed
+erworn
+es
+escalus
+escap
+escape
+escaped
+escapes
+eschew
+escoted
+esill
+especial
+especially
+esperance
+espials
+espied
+espies
+espous
+espouse
+espy
+esquire
+esquires
+essay
+essays
+essence
+essential
+essentially
+esses
+essex
+est
+establish
+established
+estate
+estates
+esteem
+esteemed
+esteemeth
+esteeming
+esteems
+estimable
+estimate
+estimation
+estimations
+estime
+estranged
+estridge
+estridges
+et
+etc
+etceteras
+ete
+eternal
+eternally
+eterne
+eternity
+eterniz
+etes
+ethiop
+ethiope
+ethiopes
+ethiopian
+etna
+eton
+etre
+eunuch
+eunuchs
+euphrates
+euphronius
+euriphile
+europa
+europe
+ev
+evade
+evades
+evans
+evasion
+evasions
+eve
+even
+evening
+evenly
+event
+eventful
+events
+ever
+everlasting
+everlastingly
+evermore
+every
+everyone
+everything
+everywhere
+evidence
+evidences
+evident
+evil
+evilly
+evils
+evitate
+ewe
+ewer
+ewers
+ewes
+exact
+exacted
+exactest
+exacting
+exaction
+exactions
+exactly
+exacts
+exalt
+exalted
+examin
+examination
+examinations
+examine
+examined
+examines
+exampl
+example
+exampled
+examples
+exasperate
+exasperates
+exceed
+exceeded
+exceedeth
+exceeding
+exceedingly
+exceeds
+excel
+excelled
+excellence
+excellencies
+excellency
+excellent
+excellently
+excelling
+excels
+except
+excepted
+excepting
+exception
+exceptions
+exceptless
+excess
+excessive
+exchang
+exchange
+exchanged
+exchequer
+exchequers
+excite
+excited
+excitements
+excites
+exclaim
+exclaims
+exclamation
+exclamations
+excludes
+excommunicate
+excommunication
+excrement
+excrements
+excursion
+excursions
+excus
+excusable
+excuse
+excused
+excuses
+excusez
+excusing
+execrable
+execrations
+execute
+executed
+executing
+execution
+executioner
+executioners
+executor
+executors
+exempt
+exempted
+exequies
+exercise
+exercises
+exeter
+exeunt
+exhal
+exhalation
+exhalations
+exhale
+exhales
+exhaust
+exhibit
+exhibiters
+exhibition
+exhort
+exhortation
+exigent
+exil
+exile
+exiled
+exion
+exist
+exists
+exit
+exits
+exorciser
+exorcisms
+exorcist
+expect
+expectance
+expectancy
+expectation
+expectations
+expected
+expecters
+expecting
+expects
+expedience
+expedient
+expediently
+expedition
+expeditious
+expel
+expell
+expelling
+expels
+expend
+expense
+expenses
+experienc
+experience
+experiences
+experiment
+experimental
+experiments
+expert
+expertness
+expiate
+expiation
+expir
+expiration
+expire
+expired
+expires
+expiring
+explication
+exploit
+exploits
+expos
+expose
+exposing
+exposition
+expositor
+expostulate
+expostulation
+exposture
+exposure
+expound
+expounded
+express
+expressed
+expresseth
+expressing
+expressive
+expressly
+expressure
+expuls
+expulsion
+exquisite
+exsufflicate
+extant
+extemporal
+extemporally
+extempore
+extend
+extended
+extends
+extent
+extenuate
+extenuated
+extenuates
+extenuation
+exterior
+exteriorly
+exteriors
+extermin
+extern
+external
+extinct
+extincted
+extincture
+extinguish
+extirp
+extirpate
+extirped
+extol
+extoll
+extolment
+exton
+extort
+extorted
+extortion
+extortions
+extra
+extract
+extracted
+extracting
+extraordinarily
+extraordinary
+extraught
+extravagancy
+extravagant
+extreme
+extremely
+extremes
+extremest
+extremities
+extremity
+exuent
+exult
+exultation
+ey
+eyas
+eyases
+eye
+eyeball
+eyeballs
+eyebrow
+eyebrows
+eyed
+eyeless
+eyelid
+eyelids
+eyes
+eyesight
+eyestrings
+eying
+eyne
+eyrie
+fa
+fabian
+fable
+fables
+fabric
+fabulous
+fac
+face
+faced
+facere
+faces
+faciant
+facile
+facility
+facinerious
+facing
+facit
+fact
+faction
+factionary
+factions
+factious
+factor
+factors
+faculties
+faculty
+fade
+faded
+fadeth
+fadge
+fading
+fadings
+fadom
+fadoms
+fagot
+fagots
+fail
+failing
+fails
+fain
+faint
+fainted
+fainter
+fainting
+faintly
+faintness
+faints
+fair
+fairer
+fairest
+fairies
+fairing
+fairings
+fairly
+fairness
+fairs
+fairwell
+fairy
+fais
+fait
+faites
+faith
+faithful
+faithfull
+faithfully
+faithless
+faiths
+faitors
+fal
+falchion
+falcon
+falconbridge
+falconer
+falconers
+fall
+fallacy
+fallen
+falleth
+falliable
+fallible
+falling
+fallow
+fallows
+falls
+fally
+falorous
+false
+falsehood
+falsely
+falseness
+falser
+falsify
+falsing
+falstaff
+falstaffs
+falter
+fam
+fame
+famed
+familiar
+familiarity
+familiarly
+familiars
+family
+famine
+famish
+famished
+famous
+famoused
+famously
+fan
+fanatical
+fancies
+fancy
+fane
+fanes
+fang
+fangled
+fangless
+fangs
+fann
+fanning
+fans
+fantasied
+fantasies
+fantastic
+fantastical
+fantastically
+fantasticoes
+fantasy
+fap
+far
+farborough
+farced
+fardel
+fardels
+fare
+fares
+farewell
+farewells
+fariner
+faring
+farm
+farmer
+farmhouse
+farms
+farre
+farrow
+farther
+farthest
+farthing
+farthingale
+farthingales
+farthings
+fartuous
+fas
+fashion
+fashionable
+fashioning
+fashions
+fast
+fasted
+fasten
+fastened
+faster
+fastest
+fasting
+fastly
+fastolfe
+fasts
+fat
+fatal
+fatally
+fate
+fated
+fates
+father
+fathered
+fatherless
+fatherly
+fathers
+fathom
+fathomless
+fathoms
+fatigate
+fatness
+fats
+fatted
+fatter
+fattest
+fatting
+fatuus
+fauconbridge
+faulconbridge
+fault
+faultiness
+faultless
+faults
+faulty
+fausse
+fauste
+faustuses
+faut
+favor
+favorable
+favorably
+favors
+favour
+favourable
+favoured
+favouredly
+favourer
+favourers
+favouring
+favourite
+favourites
+favours
+favout
+fawn
+fawneth
+fawning
+fawns
+fay
+fe
+fealty
+fear
+feared
+fearest
+fearful
+fearfull
+fearfully
+fearfulness
+fearing
+fearless
+fears
+feast
+feasted
+feasting
+feasts
+feat
+feated
+feater
+feather
+feathered
+feathers
+featly
+feats
+featur
+feature
+featured
+featureless
+features
+february
+fecks
+fed
+fedary
+federary
+fee
+feeble
+feebled
+feebleness
+feebling
+feebly
+feed
+feeder
+feeders
+feedeth
+feeding
+feeds
+feel
+feeler
+feeling
+feelingly
+feels
+fees
+feet
+fehemently
+feign
+feigned
+feigning
+feil
+feith
+felicitate
+felicity
+fell
+fellest
+fellies
+fellow
+fellowly
+fellows
+fellowship
+fellowships
+fells
+felon
+felonious
+felony
+felt
+female
+females
+feminine
+fen
+fenc
+fence
+fencer
+fencing
+fends
+fennel
+fenny
+fens
+fenton
+fer
+ferdinand
+fere
+fernseed
+ferrara
+ferrers
+ferret
+ferry
+ferryman
+fertile
+fertility
+fervency
+fervour
+fery
+fest
+feste
+fester
+festinate
+festinately
+festival
+festivals
+fet
+fetch
+fetches
+fetching
+fetlock
+fetlocks
+fett
+fetter
+fettering
+fetters
+fettle
+feu
+feud
+fever
+feverous
+fevers
+few
+fewer
+fewest
+fewness
+fickle
+fickleness
+fico
+fiction
+fiddle
+fiddler
+fiddlestick
+fidele
+fidelicet
+fidelity
+fidius
+fie
+field
+fielded
+fields
+fiend
+fiends
+fierce
+fiercely
+fierceness
+fiery
+fife
+fifes
+fifteen
+fifteens
+fifteenth
+fifth
+fifty
+fiftyfold
+fig
+fight
+fighter
+fightest
+fighteth
+fighting
+fights
+figo
+figs
+figur
+figure
+figured
+figures
+figuring
+fike
+fil
+filberts
+filch
+filches
+filching
+file
+filed
+files
+filial
+filius
+fill
+filled
+fillet
+filling
+fillip
+fills
+filly
+film
+fils
+filth
+filths
+filthy
+fin
+finally
+finch
+find
+finder
+findeth
+finding
+findings
+finds
+fine
+fineless
+finely
+finem
+fineness
+finer
+fines
+finest
+fing
+finger
+fingering
+fingers
+fingre
+fingres
+finical
+finish
+finished
+finisher
+finless
+finn
+fins
+finsbury
+fir
+firago
+fire
+firebrand
+firebrands
+fired
+fires
+firework
+fireworks
+firing
+firk
+firm
+firmament
+firmly
+firmness
+first
+firstlings
+fish
+fisher
+fishermen
+fishers
+fishes
+fishified
+fishmonger
+fishpond
+fisnomy
+fist
+fisting
+fists
+fistula
+fit
+fitchew
+fitful
+fitly
+fitment
+fitness
+fits
+fitted
+fitter
+fittest
+fitteth
+fitting
+fitzwater
+five
+fivepence
+fives
+fix
+fixed
+fixes
+fixeth
+fixing
+fixture
+fl
+flag
+flagging
+flagon
+flagons
+flags
+flail
+flakes
+flaky
+flam
+flame
+flamen
+flamens
+flames
+flaming
+flaminius
+flanders
+flannel
+flap
+flaring
+flash
+flashes
+flashing
+flask
+flat
+flatly
+flatness
+flats
+flatt
+flatter
+flattered
+flatterer
+flatterers
+flatterest
+flatteries
+flattering
+flatters
+flattery
+flaunts
+flavio
+flavius
+flaw
+flaws
+flax
+flaxen
+flay
+flaying
+flea
+fleance
+fleas
+flecked
+fled
+fledge
+flee
+fleec
+fleece
+fleeces
+fleer
+fleering
+fleers
+fleet
+fleeter
+fleeting
+fleming
+flemish
+flesh
+fleshes
+fleshly
+fleshment
+fleshmonger
+flew
+flexible
+flexure
+flibbertigibbet
+flickering
+flidge
+fliers
+flies
+flieth
+flight
+flights
+flighty
+flinch
+fling
+flint
+flints
+flinty
+flirt
+float
+floated
+floating
+flock
+flocks
+flood
+floodgates
+floods
+floor
+flora
+florence
+florentine
+florentines
+florentius
+florizel
+flote
+floulish
+flour
+flourish
+flourishes
+flourisheth
+flourishing
+flout
+flouted
+flouting
+flouts
+flow
+flowed
+flower
+flowerets
+flowers
+flowing
+flown
+flows
+fluellen
+fluent
+flung
+flush
+flushing
+fluster
+flute
+flutes
+flutter
+flux
+fluxive
+fly
+flying
+fo
+foal
+foals
+foam
+foamed
+foaming
+foams
+foamy
+fob
+focative
+fodder
+foe
+foeman
+foemen
+foes
+fog
+foggy
+fogs
+foh
+foi
+foil
+foiled
+foils
+foin
+foining
+foins
+fois
+foison
+foisons
+foist
+foix
+fold
+folded
+folds
+folio
+folk
+folks
+follies
+follow
+followed
+follower
+followers
+followest
+following
+follows
+folly
+fond
+fonder
+fondly
+fondness
+font
+fontibell
+food
+fool
+fooleries
+foolery
+foolhardy
+fooling
+foolish
+foolishly
+foolishness
+fools
+foot
+football
+footboy
+footboys
+footed
+footfall
+footing
+footman
+footmen
+footpath
+footsteps
+footstool
+fopp
+fopped
+foppery
+foppish
+fops
+for
+forage
+foragers
+forbade
+forbear
+forbearance
+forbears
+forbid
+forbidden
+forbiddenly
+forbids
+forbod
+forborne
+forc
+force
+forced
+forceful
+forceless
+forces
+forcible
+forcibly
+forcing
+ford
+fordid
+fordo
+fordoes
+fordone
+fore
+forecast
+forefather
+forefathers
+forefinger
+forego
+foregone
+forehand
+forehead
+foreheads
+forehorse
+foreign
+foreigner
+foreigners
+foreknowing
+foreknowledge
+foremost
+forenamed
+forenoon
+forerun
+forerunner
+forerunning
+foreruns
+foresaid
+foresaw
+foresay
+foresee
+foreseeing
+foresees
+foreshow
+foreskirt
+forespent
+forest
+forestall
+forestalled
+forester
+foresters
+forests
+foretell
+foretelling
+foretells
+forethink
+forethought
+foretold
+forever
+foreward
+forewarn
+forewarned
+forewarning
+forfeit
+forfeited
+forfeiters
+forfeiting
+forfeits
+forfeiture
+forfeitures
+forfend
+forfended
+forg
+forgave
+forge
+forged
+forgeries
+forgery
+forges
+forget
+forgetful
+forgetfulness
+forgetive
+forgets
+forgetting
+forgive
+forgiven
+forgiveness
+forgo
+forgoing
+forgone
+forgot
+forgotten
+fork
+forked
+forks
+forlorn
+form
+formal
+formally
+formed
+former
+formerly
+formless
+forms
+fornication
+fornications
+fornicatress
+forres
+forrest
+forsake
+forsaken
+forsaketh
+forslow
+forsook
+forsooth
+forspent
+forspoke
+forswear
+forswearing
+forswore
+forsworn
+fort
+forted
+forth
+forthcoming
+forthlight
+forthright
+forthwith
+fortification
+fortifications
+fortified
+fortifies
+fortify
+fortinbras
+fortitude
+fortnight
+fortress
+fortresses
+forts
+fortun
+fortuna
+fortunate
+fortunately
+fortune
+fortuned
+fortunes
+fortward
+forty
+forum
+forward
+forwarding
+forwardness
+forwards
+forwearied
+fosset
+fost
+foster
+fostered
+fought
+foughten
+foul
+fouler
+foulest
+foully
+foulness
+found
+foundation
+foundations
+founded
+founder
+fount
+fountain
+fountains
+founts
+four
+fourscore
+fourteen
+fourth
+foutra
+fowl
+fowler
+fowling
+fowls
+fox
+foxes
+foxship
+fracted
+fraction
+fractions
+fragile
+fragment
+fragments
+fragrant
+frail
+frailer
+frailties
+frailty
+fram
+frame
+framed
+frames
+frampold
+fran
+francais
+france
+frances
+franchise
+franchised
+franchisement
+franchises
+franciae
+francis
+francisca
+franciscan
+francisco
+frank
+franker
+frankfort
+franklin
+franklins
+frankly
+frankness
+frantic
+franticly
+frateretto
+fratrum
+fraud
+fraudful
+fraught
+fraughtage
+fraughting
+fray
+frays
+freckl
+freckled
+freckles
+frederick
+free
+freed
+freedom
+freedoms
+freehearted
+freelier
+freely
+freeman
+freemen
+freeness
+freer
+frees
+freestone
+freetown
+freeze
+freezes
+freezing
+freezings
+french
+frenchman
+frenchmen
+frenchwoman
+frenzy
+frequent
+frequents
+fresh
+fresher
+freshes
+freshest
+freshly
+freshness
+fret
+fretful
+frets
+fretted
+fretten
+fretting
+friar
+friars
+friday
+fridays
+friend
+friended
+friending
+friendless
+friendliness
+friendly
+friends
+friendship
+friendships
+frieze
+fright
+frighted
+frightened
+frightful
+frighting
+frights
+fringe
+fringed
+frippery
+frisk
+fritters
+frivolous
+fro
+frock
+frog
+frogmore
+froissart
+frolic
+from
+front
+fronted
+frontier
+frontiers
+fronting
+frontlet
+fronts
+frost
+frosts
+frosty
+froth
+froward
+frown
+frowning
+frowningly
+frowns
+froze
+frozen
+fructify
+frugal
+fruit
+fruiterer
+fruitful
+fruitfully
+fruitfulness
+fruition
+fruitless
+fruits
+frush
+frustrate
+frutify
+fry
+fubb
+fuel
+fugitive
+fulfil
+fulfill
+fulfilling
+fulfils
+full
+fullam
+fuller
+fullers
+fullest
+fullness
+fully
+fulness
+fulsome
+fulvia
+fum
+fumble
+fumbles
+fumblest
+fumbling
+fume
+fumes
+fuming
+fumiter
+fumitory
+fun
+function
+functions
+fundamental
+funeral
+funerals
+fur
+furbish
+furies
+furious
+furlongs
+furnace
+furnaces
+furnish
+furnished
+furnishings
+furniture
+furnival
+furor
+furr
+furrow
+furrowed
+furrows
+furth
+further
+furtherance
+furtherer
+furthermore
+furthest
+fury
+furze
+furzes
+fust
+fustian
+fustilarian
+fusty
+fut
+future
+futurity
+g
+gabble
+gaberdine
+gabriel
+gad
+gadding
+gads
+gadshill
+gag
+gage
+gaged
+gagg
+gaging
+gagne
+gain
+gained
+gainer
+gaingiving
+gains
+gainsaid
+gainsay
+gainsaying
+gainsays
+gainst
+gait
+gaited
+galathe
+gale
+galen
+gales
+gall
+gallant
+gallantly
+gallantry
+gallants
+galled
+gallery
+galley
+galleys
+gallia
+gallian
+galliard
+galliasses
+gallimaufry
+galling
+gallons
+gallop
+galloping
+gallops
+gallow
+galloway
+gallowglasses
+gallows
+gallowses
+galls
+gallus
+gam
+gambol
+gambold
+gambols
+gamboys
+game
+gamers
+games
+gamesome
+gamester
+gaming
+gammon
+gamut
+gan
+gangren
+ganymede
+gaol
+gaoler
+gaolers
+gaols
+gap
+gape
+gapes
+gaping
+gar
+garb
+garbage
+garboils
+garcon
+gard
+garde
+garden
+gardener
+gardeners
+gardens
+gardez
+gardiner
+gardon
+gargantua
+gargrave
+garish
+garland
+garlands
+garlic
+garment
+garments
+garmet
+garner
+garners
+garnish
+garnished
+garret
+garrison
+garrisons
+gart
+garter
+garterd
+gartering
+garters
+gascony
+gash
+gashes
+gaskins
+gasp
+gasping
+gasted
+gastness
+gat
+gate
+gated
+gates
+gath
+gather
+gathered
+gathering
+gathers
+gatories
+gatory
+gaud
+gaudeo
+gaudy
+gauge
+gaul
+gaultree
+gaunt
+gauntlet
+gauntlets
+gav
+gave
+gavest
+gawded
+gawds
+gawsey
+gay
+gayness
+gaz
+gaze
+gazed
+gazer
+gazers
+gazes
+gazeth
+gazing
+gear
+geck
+geese
+geffrey
+geld
+gelded
+gelding
+gelida
+gelidus
+gelt
+gem
+geminy
+gems
+gen
+gender
+genders
+general
+generally
+generals
+generation
+generations
+generative
+generosity
+generous
+genitive
+genitivo
+genius
+gennets
+genoa
+genoux
+gens
+gent
+gentilhomme
+gentility
+gentle
+gentlefolks
+gentleman
+gentlemanlike
+gentlemen
+gentleness
+gentler
+gentles
+gentlest
+gentlewoman
+gentlewomen
+gently
+gentry
+george
+gerard
+germaines
+germains
+german
+germane
+germans
+germany
+gertrude
+gest
+gests
+gesture
+gestures
+get
+getrude
+gets
+getter
+getting
+ghastly
+ghost
+ghosted
+ghostly
+ghosts
+gi
+giant
+giantess
+giantlike
+giants
+gib
+gibber
+gibbet
+gibbets
+gibe
+giber
+gibes
+gibing
+gibingly
+giddily
+giddiness
+giddy
+gift
+gifts
+gig
+giglets
+giglot
+gilbert
+gild
+gilded
+gilding
+gilliams
+gillian
+gills
+gillyvors
+gilt
+gimmal
+gimmers
+gin
+ging
+ginger
+gingerbread
+gingerly
+ginn
+gins
+gioucestershire
+gipes
+gipsies
+gipsy
+gird
+girded
+girdle
+girdled
+girdles
+girdling
+girl
+girls
+girt
+girth
+gis
+giv
+give
+given
+giver
+givers
+gives
+givest
+giveth
+giving
+givings
+glad
+gladded
+gladding
+gladly
+gladness
+glamis
+glanc
+glance
+glanced
+glances
+glancing
+glanders
+glansdale
+glare
+glares
+glass
+glasses
+glassy
+glaz
+glazed
+gleams
+glean
+gleaned
+gleaning
+gleeful
+gleek
+gleeking
+gleeks
+glend
+glendower
+glib
+glide
+glided
+glides
+glideth
+gliding
+glimmer
+glimmering
+glimmers
+glimpse
+glimpses
+glist
+glistening
+glister
+glistering
+glisters
+glitt
+glittering
+globe
+globes
+glooming
+gloomy
+glories
+glorified
+glorify
+glorious
+gloriously
+glory
+glose
+gloss
+glosses
+glou
+glouceste
+gloucester
+gloucestershire
+glove
+glover
+gloves
+glow
+glowed
+glowing
+glowworm
+gloz
+gloze
+glozes
+glu
+glue
+glued
+glues
+glut
+glutt
+glutted
+glutton
+gluttoning
+gluttony
+gnarled
+gnarling
+gnat
+gnats
+gnaw
+gnawing
+gnawn
+gnaws
+go
+goad
+goaded
+goads
+goal
+goat
+goatish
+goats
+gobbets
+gobbo
+goblet
+goblets
+goblin
+goblins
+god
+godded
+godden
+goddess
+goddesses
+goddild
+godfather
+godfathers
+godhead
+godlike
+godliness
+godly
+godmother
+gods
+godson
+goer
+goers
+goes
+goest
+goeth
+goffe
+gogs
+going
+gold
+golden
+goldenly
+goldsmith
+goldsmiths
+golgotha
+goliases
+goliath
+gon
+gondola
+gondolier
+gone
+goneril
+gong
+gonzago
+gonzalo
+good
+goodfellow
+goodlier
+goodliest
+goodly
+goodman
+goodness
+goodnight
+goodrig
+goods
+goodwife
+goodwill
+goodwin
+goodwins
+goodyear
+goodyears
+goose
+gooseberry
+goosequills
+goot
+gor
+gorbellied
+gorboduc
+gordian
+gore
+gored
+gorg
+gorge
+gorgeous
+gorget
+gorging
+gorgon
+gormandize
+gormandizing
+gory
+gosling
+gospel
+gospels
+goss
+gossamer
+gossip
+gossiping
+gossiplike
+gossips
+got
+goth
+goths
+gotten
+gourd
+gout
+gouts
+gouty
+govern
+governance
+governed
+governess
+government
+governor
+governors
+governs
+gower
+gown
+gowns
+grac
+grace
+graced
+graceful
+gracefully
+graceless
+graces
+gracing
+gracious
+graciously
+gradation
+graff
+graffing
+graft
+grafted
+grafters
+grain
+grained
+grains
+gramercies
+gramercy
+grammar
+grand
+grandam
+grandame
+grandchild
+grande
+grandeur
+grandfather
+grandjurors
+grandmother
+grandpre
+grandsir
+grandsire
+grandsires
+grange
+grant
+granted
+granting
+grants
+grape
+grapes
+grapple
+grapples
+grappling
+grasp
+grasped
+grasps
+grass
+grasshoppers
+grassy
+grate
+grated
+grateful
+grates
+gratiano
+gratify
+gratii
+gratillity
+grating
+gratis
+gratitude
+gratulate
+grav
+grave
+gravediggers
+gravel
+graveless
+gravell
+gravely
+graven
+graveness
+graver
+graves
+gravest
+gravestone
+gravities
+gravity
+gravy
+gray
+graymalkin
+graz
+graze
+grazed
+grazing
+grease
+greases
+greasily
+greasy
+great
+greater
+greatest
+greatly
+greatness
+grecian
+grecians
+gree
+greece
+greed
+greedily
+greediness
+greedy
+greeing
+greek
+greekish
+greeks
+green
+greener
+greenly
+greens
+greensleeves
+greenwich
+greenwood
+greet
+greeted
+greeting
+greetings
+greets
+greg
+gregory
+gremio
+grew
+grey
+greybeard
+greybeards
+greyhound
+greyhounds
+grief
+griefs
+griev
+grievance
+grievances
+grieve
+grieved
+grieves
+grievest
+grieving
+grievingly
+grievous
+grievously
+griffin
+griffith
+grim
+grime
+grimly
+grin
+grind
+grinding
+grindstone
+grinning
+grip
+gripe
+gripes
+griping
+grise
+grisly
+grissel
+grize
+grizzle
+grizzled
+groan
+groaning
+groans
+groat
+groats
+groin
+groom
+grooms
+grop
+groping
+gros
+gross
+grosser
+grossly
+grossness
+ground
+grounded
+groundlings
+grounds
+grove
+grovel
+grovelling
+groves
+grow
+groweth
+growing
+grown
+grows
+growth
+grub
+grubb
+grubs
+grudge
+grudged
+grudges
+grudging
+gruel
+grumble
+grumblest
+grumbling
+grumblings
+grumio
+grund
+grunt
+gualtier
+guard
+guardage
+guardant
+guarded
+guardian
+guardians
+guards
+guardsman
+gud
+gudgeon
+guerdon
+guerra
+guess
+guesses
+guessingly
+guest
+guests
+guiana
+guichard
+guide
+guided
+guider
+guiderius
+guides
+guiding
+guidon
+guienne
+guil
+guildenstern
+guilders
+guildford
+guildhall
+guile
+guiled
+guileful
+guilfords
+guilt
+guiltian
+guiltier
+guiltily
+guiltiness
+guiltless
+guilts
+guilty
+guinea
+guinever
+guise
+gul
+gules
+gulf
+gulfs
+gull
+gulls
+gum
+gumm
+gums
+gun
+gunner
+gunpowder
+guns
+gurnet
+gurney
+gust
+gusts
+gusty
+guts
+gutter
+guy
+guynes
+guysors
+gypsy
+gyve
+gyved
+gyves
+h
+ha
+haberdasher
+habiliment
+habiliments
+habit
+habitation
+habited
+habits
+habitude
+hack
+hacket
+hackney
+hacks
+had
+hadst
+haec
+haeres
+hag
+hagar
+haggard
+haggards
+haggish
+haggled
+hags
+hail
+hailed
+hailstone
+hailstones
+hair
+hairless
+hairs
+hairy
+hal
+halberd
+halberds
+halcyon
+hale
+haled
+hales
+half
+halfcan
+halfpence
+halfpenny
+halfpennyworth
+halfway
+halidom
+hall
+halloa
+halloing
+hallond
+halloo
+hallooing
+hallow
+hallowed
+hallowmas
+hallown
+hals
+halt
+halter
+halters
+halting
+halts
+halves
+ham
+hames
+hamlet
+hammer
+hammered
+hammering
+hammers
+hamper
+hampton
+hams
+hamstring
+hand
+handed
+handful
+handicraft
+handicraftsmen
+handing
+handiwork
+handkercher
+handkerchers
+handkerchief
+handle
+handled
+handles
+handless
+handlest
+handling
+handmaid
+handmaids
+hands
+handsaw
+handsome
+handsomely
+handsomeness
+handwriting
+handy
+hang
+hanged
+hangers
+hangeth
+hanging
+hangings
+hangman
+hangmen
+hangs
+hannibal
+hap
+hapless
+haply
+happ
+happen
+happened
+happier
+happies
+happiest
+happily
+happiness
+happy
+haps
+harbinger
+harbingers
+harbor
+harbour
+harbourage
+harbouring
+harbours
+harcourt
+hard
+harder
+hardest
+hardiest
+hardiment
+hardiness
+hardly
+hardness
+hardocks
+hardy
+hare
+harelip
+hares
+harfleur
+hark
+harlot
+harlotry
+harlots
+harm
+harmed
+harmful
+harming
+harmless
+harmonious
+harmony
+harms
+harness
+harp
+harper
+harpier
+harping
+harpy
+harried
+harrow
+harrows
+harry
+harsh
+harshly
+harshness
+hart
+harts
+harum
+harvest
+has
+hast
+haste
+hasted
+hasten
+hastes
+hastily
+hasting
+hastings
+hasty
+hat
+hatch
+hatches
+hatchet
+hatching
+hatchment
+hate
+hated
+hateful
+hater
+haters
+hates
+hateth
+hatfield
+hath
+hating
+hatred
+hats
+haud
+hauf
+haught
+haughtiness
+haughty
+haunch
+haunches
+haunt
+haunted
+haunting
+haunts
+hautboy
+hautboys
+have
+haven
+havens
+haver
+having
+havings
+havior
+haviour
+havoc
+hawk
+hawking
+hawks
+hawthorn
+hawthorns
+hay
+hazard
+hazarded
+hazards
+hazel
+hazelnut
+he
+head
+headborough
+headed
+headier
+heading
+headland
+headless
+headlong
+heads
+headsman
+headstrong
+heady
+heal
+healed
+healing
+heals
+health
+healthful
+healths
+healthsome
+healthy
+heap
+heaping
+heaps
+hear
+heard
+hearer
+hearers
+hearest
+heareth
+hearing
+hearings
+heark
+hearken
+hearkens
+hears
+hearsay
+hearse
+hearsed
+hearst
+heart
+heartache
+heartbreak
+heartbreaking
+hearted
+hearten
+hearth
+hearths
+heartily
+heartiness
+heartless
+heartlings
+heartly
+hearts
+heartsick
+heartstrings
+hearty
+heat
+heated
+heath
+heathen
+heathenish
+heating
+heats
+heauties
+heav
+heave
+heaved
+heaven
+heavenly
+heavens
+heaves
+heavier
+heaviest
+heavily
+heaviness
+heaving
+heavings
+heavy
+hebona
+hebrew
+hecate
+hectic
+hector
+hectors
+hecuba
+hedg
+hedge
+hedgehog
+hedgehogs
+hedges
+heed
+heeded
+heedful
+heedfull
+heedfully
+heedless
+heel
+heels
+hefted
+hefts
+heifer
+heifers
+heigh
+height
+heighten
+heinous
+heinously
+heir
+heiress
+heirless
+heirs
+held
+helen
+helena
+helenus
+helias
+helicons
+hell
+hellespont
+hellfire
+hellish
+helm
+helmed
+helmet
+helmets
+helms
+help
+helper
+helpers
+helpful
+helping
+helpless
+helps
+helter
+hem
+heme
+hemlock
+hemm
+hemp
+hempen
+hems
+hen
+hence
+henceforth
+henceforward
+henchman
+henri
+henricus
+henry
+hens
+hent
+henton
+her
+herald
+heraldry
+heralds
+herb
+herbert
+herblets
+herbs
+herculean
+hercules
+herd
+herds
+herdsman
+herdsmen
+here
+hereabout
+hereabouts
+hereafter
+hereby
+hereditary
+hereford
+herefordshire
+herein
+hereof
+heresies
+heresy
+heretic
+heretics
+hereto
+hereupon
+heritage
+heritier
+hermes
+hermia
+hermione
+hermit
+hermitage
+hermits
+herne
+hero
+herod
+herods
+heroes
+heroic
+heroical
+herring
+herrings
+hers
+herself
+hesperides
+hesperus
+hest
+hests
+heure
+heureux
+hew
+hewgh
+hewing
+hewn
+hews
+hey
+heyday
+hibocrates
+hic
+hiccups
+hick
+hid
+hidden
+hide
+hideous
+hideously
+hideousness
+hides
+hidest
+hiding
+hie
+hied
+hiems
+hies
+hig
+high
+higher
+highest
+highly
+highmost
+highness
+hight
+highway
+highways
+hilding
+hildings
+hill
+hillo
+hilloa
+hills
+hilt
+hilts
+hily
+him
+himself
+hinc
+hinckley
+hind
+hinder
+hindered
+hinders
+hindmost
+hinds
+hing
+hinge
+hinges
+hint
+hip
+hipp
+hipparchus
+hippolyta
+hips
+hir
+hire
+hired
+hiren
+hirtius
+his
+hisperia
+hiss
+hisses
+hissing
+hist
+historical
+history
+hit
+hither
+hitherto
+hitherward
+hitherwards
+hits
+hitting
+hive
+hives
+hizzing
+ho
+hoa
+hoar
+hoard
+hoarded
+hoarding
+hoars
+hoarse
+hoary
+hob
+hobbididence
+hobby
+hobbyhorse
+hobgoblin
+hobnails
+hoc
+hod
+hodge
+hog
+hogs
+hogshead
+hogsheads
+hois
+hoise
+hoist
+hoisted
+hoists
+holborn
+hold
+holden
+holder
+holdeth
+holdfast
+holding
+holds
+hole
+holes
+holidam
+holidame
+holiday
+holidays
+holier
+holiest
+holily
+holiness
+holla
+holland
+hollander
+hollanders
+holloa
+holloaing
+hollow
+hollowly
+hollowness
+holly
+holmedon
+holofernes
+holp
+holy
+homage
+homager
+home
+homely
+homes
+homespuns
+homeward
+homewards
+homicide
+homicides
+homily
+hominem
+hommes
+homo
+honest
+honester
+honestest
+honestly
+honesty
+honey
+honeycomb
+honeying
+honeyless
+honeysuckle
+honeysuckles
+honi
+honneur
+honor
+honorable
+honorably
+honorato
+honorificabilitudinitatibus
+honors
+honour
+honourable
+honourably
+honoured
+honourest
+honourible
+honouring
+honours
+hoo
+hood
+hooded
+hoodman
+hoods
+hoodwink
+hoof
+hoofs
+hook
+hooking
+hooks
+hoop
+hoops
+hoot
+hooted
+hooting
+hoots
+hop
+hope
+hopeful
+hopeless
+hopes
+hopest
+hoping
+hopkins
+hoppedance
+hor
+horace
+horatio
+horizon
+horn
+hornbook
+horned
+horner
+horning
+hornpipes
+horns
+horologe
+horrible
+horribly
+horrid
+horrider
+horridly
+horror
+horrors
+hors
+horse
+horseback
+horsed
+horsehairs
+horseman
+horsemanship
+horsemen
+horses
+horseway
+horsing
+hortensio
+hortensius
+horum
+hose
+hospitable
+hospital
+hospitality
+host
+hostage
+hostages
+hostess
+hostile
+hostility
+hostilius
+hosts
+hot
+hotly
+hotspur
+hotter
+hottest
+hound
+hounds
+hour
+hourly
+hours
+hous
+house
+household
+householder
+householders
+households
+housekeeper
+housekeepers
+housekeeping
+houseless
+houses
+housewife
+housewifery
+housewives
+hovel
+hover
+hovered
+hovering
+hovers
+how
+howbeit
+howe
+howeer
+however
+howl
+howled
+howlet
+howling
+howls
+howsoe
+howsoever
+howsome
+hoxes
+hoy
+hoyday
+hubert
+huddled
+huddling
+hue
+hued
+hues
+hug
+huge
+hugely
+hugeness
+hugg
+hugger
+hugh
+hugs
+hujus
+hulk
+hulks
+hull
+hulling
+hullo
+hum
+human
+humane
+humanely
+humanity
+humble
+humbled
+humbleness
+humbler
+humbles
+humblest
+humbling
+humbly
+hume
+humh
+humidity
+humility
+humming
+humor
+humorous
+humors
+humour
+humourists
+humours
+humphrey
+humphry
+hums
+hundred
+hundreds
+hundredth
+hung
+hungarian
+hungary
+hunger
+hungerford
+hungerly
+hungry
+hunt
+hunted
+hunter
+hunters
+hunteth
+hunting
+huntington
+huntress
+hunts
+huntsman
+huntsmen
+hurdle
+hurl
+hurling
+hurls
+hurly
+hurlyburly
+hurricano
+hurricanoes
+hurried
+hurries
+hurry
+hurt
+hurting
+hurtled
+hurtless
+hurtling
+hurts
+husband
+husbanded
+husbandless
+husbandry
+husbands
+hush
+hushes
+husht
+husks
+huswife
+huswifes
+hutch
+hybla
+hydra
+hyen
+hymen
+hymenaeus
+hymn
+hymns
+hyperboles
+hyperbolical
+hyperion
+hypocrisy
+hypocrite
+hypocrites
+hyrcan
+hyrcania
+hyrcanian
+hyssop
+hysterica
+i
+iachimo
+iaculis
+iago
+iament
+ibat
+icarus
+ice
+iceland
+ici
+icicle
+icicles
+icy
+idea
+ideas
+idem
+iden
+ides
+idiot
+idiots
+idle
+idleness
+idles
+idly
+idol
+idolatrous
+idolatry
+ield
+if
+ifs
+ignis
+ignoble
+ignobly
+ignominious
+ignominy
+ignomy
+ignorance
+ignorant
+ii
+iii
+iiii
+il
+ilbow
+ild
+ilion
+ilium
+ill
+illegitimate
+illiterate
+illness
+illo
+ills
+illume
+illumin
+illuminate
+illumineth
+illusion
+illusions
+illustrate
+illustrated
+illustrious
+illyria
+illyrian
+ils
+im
+image
+imagery
+images
+imagin
+imaginary
+imagination
+imaginations
+imagine
+imagining
+imaginings
+imbar
+imbecility
+imbrue
+imitari
+imitate
+imitated
+imitation
+imitations
+immaculate
+immanity
+immask
+immaterial
+immediacy
+immediate
+immediately
+imminence
+imminent
+immoderate
+immoderately
+immodest
+immoment
+immortal
+immortaliz
+immortally
+immur
+immured
+immures
+imogen
+imp
+impaint
+impair
+impairing
+impale
+impaled
+impanelled
+impart
+imparted
+impartial
+impartment
+imparts
+impasted
+impatience
+impatient
+impatiently
+impawn
+impeach
+impeached
+impeachment
+impeachments
+impedes
+impediment
+impediments
+impenetrable
+imperator
+imperceiverant
+imperfect
+imperfection
+imperfections
+imperfectly
+imperial
+imperious
+imperiously
+impertinency
+impertinent
+impeticos
+impetuosity
+impetuous
+impieties
+impiety
+impious
+implacable
+implements
+implies
+implor
+implorators
+implore
+implored
+imploring
+impon
+import
+importance
+importancy
+important
+importantly
+imported
+importeth
+importing
+importless
+imports
+importun
+importunacy
+importunate
+importune
+importunes
+importunity
+impos
+impose
+imposed
+imposition
+impositions
+impossibilities
+impossibility
+impossible
+imposthume
+impostor
+impostors
+impotence
+impotent
+impounded
+impregnable
+imprese
+impress
+impressed
+impressest
+impression
+impressure
+imprimendum
+imprimis
+imprint
+imprinted
+imprison
+imprisoned
+imprisoning
+imprisonment
+improbable
+improper
+improve
+improvident
+impudence
+impudency
+impudent
+impudently
+impudique
+impugn
+impugns
+impure
+imputation
+impute
+in
+inaccessible
+inaidable
+inaudible
+inauspicious
+incaged
+incantations
+incapable
+incardinate
+incarnadine
+incarnate
+incarnation
+incens
+incense
+incensed
+incensement
+incenses
+incensing
+incertain
+incertainties
+incertainty
+incessant
+incessantly
+incest
+incestuous
+inch
+incharitable
+inches
+incidency
+incident
+incision
+incite
+incites
+incivil
+incivility
+inclin
+inclinable
+inclination
+incline
+inclined
+inclines
+inclining
+inclips
+include
+included
+includes
+inclusive
+incomparable
+incomprehensible
+inconsiderate
+inconstancy
+inconstant
+incontinency
+incontinent
+incontinently
+inconvenience
+inconveniences
+inconvenient
+incony
+incorporate
+incorps
+incorrect
+increas
+increase
+increases
+increaseth
+increasing
+incredible
+incredulous
+incur
+incurable
+incurr
+incurred
+incursions
+ind
+inde
+indebted
+indeed
+indent
+indented
+indenture
+indentures
+index
+indexes
+india
+indian
+indict
+indicted
+indictment
+indies
+indifferency
+indifferent
+indifferently
+indigent
+indigest
+indigested
+indign
+indignation
+indignations
+indigne
+indignities
+indignity
+indirect
+indirection
+indirections
+indirectly
+indiscreet
+indiscretion
+indispos
+indisposition
+indissoluble
+indistinct
+indistinguish
+indistinguishable
+indited
+individable
+indrench
+indu
+indubitate
+induc
+induce
+induced
+inducement
+induction
+inductions
+indue
+indued
+indues
+indulgence
+indulgences
+indulgent
+indurance
+industrious
+industriously
+industry
+inequality
+inestimable
+inevitable
+inexecrable
+inexorable
+inexplicable
+infallible
+infallibly
+infamonize
+infamous
+infamy
+infancy
+infant
+infants
+infect
+infected
+infecting
+infection
+infections
+infectious
+infectiously
+infects
+infer
+inference
+inferior
+inferiors
+infernal
+inferr
+inferreth
+inferring
+infest
+infidel
+infidels
+infinite
+infinitely
+infinitive
+infirm
+infirmities
+infirmity
+infixed
+infixing
+inflam
+inflame
+inflaming
+inflammation
+inflict
+infliction
+influence
+influences
+infold
+inform
+informal
+information
+informations
+informed
+informer
+informs
+infortunate
+infring
+infringe
+infringed
+infus
+infuse
+infused
+infusing
+infusion
+ingener
+ingenious
+ingeniously
+inglorious
+ingots
+ingraffed
+ingraft
+ingrate
+ingrated
+ingrateful
+ingratitude
+ingratitudes
+ingredient
+ingredients
+ingross
+inhabit
+inhabitable
+inhabitants
+inhabited
+inhabits
+inhearse
+inhearsed
+inherent
+inherit
+inheritance
+inherited
+inheriting
+inheritor
+inheritors
+inheritrix
+inherits
+inhibited
+inhibition
+inhoop
+inhuman
+iniquities
+iniquity
+initiate
+injointed
+injunction
+injunctions
+injur
+injure
+injurer
+injuries
+injurious
+injury
+injustice
+ink
+inkhorn
+inkle
+inkles
+inkling
+inky
+inlaid
+inland
+inlay
+inly
+inmost
+inn
+inner
+innkeeper
+innocence
+innocency
+innocent
+innocents
+innovation
+innovator
+inns
+innumerable
+inoculate
+inordinate
+inprimis
+inquir
+inquire
+inquiry
+inquisition
+inquisitive
+inroads
+insane
+insanie
+insatiate
+insconce
+inscrib
+inscription
+inscriptions
+inscroll
+inscrutable
+insculp
+insculpture
+insensible
+inseparable
+inseparate
+insert
+inserted
+inset
+inshell
+inshipp
+inside
+insinewed
+insinuate
+insinuateth
+insinuating
+insinuation
+insisted
+insisting
+insisture
+insociable
+insolence
+insolent
+insomuch
+inspir
+inspiration
+inspirations
+inspire
+inspired
+install
+installed
+instalment
+instance
+instances
+instant
+instantly
+instate
+instead
+insteeped
+instigate
+instigated
+instigation
+instigations
+instigator
+instinct
+instinctively
+institute
+institutions
+instruct
+instructed
+instruction
+instructions
+instructs
+instrument
+instrumental
+instruments
+insubstantial
+insufficience
+insufficiency
+insult
+insulted
+insulting
+insultment
+insults
+insupportable
+insuppressive
+insurrection
+insurrections
+int
+integer
+integritas
+integrity
+intellect
+intellects
+intellectual
+intelligence
+intelligencer
+intelligencing
+intelligent
+intelligis
+intelligo
+intemperance
+intemperate
+intend
+intended
+intendeth
+intending
+intendment
+intends
+intenible
+intent
+intention
+intentively
+intents
+inter
+intercept
+intercepted
+intercepter
+interception
+intercepts
+intercession
+intercessors
+interchained
+interchang
+interchange
+interchangeably
+interchangement
+interchanging
+interdiction
+interest
+interim
+interims
+interior
+interjections
+interjoin
+interlude
+intermingle
+intermission
+intermissive
+intermit
+intermix
+intermixed
+interpose
+interposer
+interposes
+interpret
+interpretation
+interpreted
+interpreter
+interpreters
+interprets
+interr
+interred
+interrogatories
+interrupt
+interrupted
+interrupter
+interruptest
+interruption
+interrupts
+intertissued
+intervallums
+interview
+intestate
+intestine
+intil
+intimate
+intimation
+intitled
+intituled
+into
+intolerable
+intoxicates
+intreasured
+intreat
+intrench
+intrenchant
+intricate
+intrinse
+intrinsicate
+intrude
+intruder
+intruding
+intrusion
+inundation
+inure
+inurn
+invade
+invades
+invasion
+invasive
+invectively
+invectives
+inveigled
+invent
+invented
+invention
+inventions
+inventor
+inventorially
+inventoried
+inventors
+inventory
+inverness
+invert
+invest
+invested
+investing
+investments
+inveterate
+invincible
+inviolable
+invised
+invisible
+invitation
+invite
+invited
+invites
+inviting
+invitis
+invocate
+invocation
+invoke
+invoked
+invulnerable
+inward
+inwardly
+inwardness
+inwards
+ionia
+ionian
+ipse
+ipswich
+ira
+irae
+iras
+ire
+ireful
+ireland
+iris
+irish
+irishman
+irishmen
+irks
+irksome
+iron
+irons
+irreconcil
+irrecoverable
+irregular
+irregulous
+irreligious
+irremovable
+irreparable
+irresolute
+irrevocable
+is
+isabel
+isabella
+isbel
+isbels
+iscariot
+ise
+ish
+isidore
+isis
+island
+islander
+islanders
+islands
+isle
+isles
+israel
+issu
+issue
+issued
+issueless
+issues
+issuing
+ist
+ista
+it
+italian
+italy
+itch
+itches
+itching
+item
+items
+iteration
+ithaca
+its
+itself
+itshall
+iv
+ivory
+ivy
+iwis
+ix
+j
+jacet
+jack
+jackanapes
+jacks
+jacksauce
+jackslave
+jacob
+jade
+jaded
+jades
+jail
+jakes
+jamany
+james
+jamy
+jane
+jangled
+jangling
+january
+janus
+japhet
+jaquenetta
+jaques
+jar
+jarring
+jars
+jarteer
+jasons
+jaunce
+jauncing
+jaundice
+jaundies
+jaw
+jawbone
+jaws
+jay
+jays
+jc
+je
+jealous
+jealousies
+jealousy
+jeer
+jeering
+jelly
+jenny
+jeopardy
+jephtha
+jephthah
+jerkin
+jerkins
+jerks
+jeronimy
+jerusalem
+jeshu
+jesses
+jessica
+jest
+jested
+jester
+jesters
+jesting
+jests
+jesu
+jesus
+jet
+jets
+jew
+jewel
+jeweller
+jewels
+jewess
+jewish
+jewry
+jews
+jezebel
+jig
+jigging
+jill
+jills
+jingling
+joan
+job
+jockey
+jocund
+jog
+jogging
+john
+johns
+join
+joinder
+joined
+joiner
+joineth
+joins
+joint
+jointed
+jointing
+jointly
+jointress
+joints
+jointure
+jollity
+jolly
+jolt
+joltheads
+jordan
+joseph
+joshua
+jot
+jour
+jourdain
+journal
+journey
+journeying
+journeyman
+journeymen
+journeys
+jove
+jovem
+jovial
+jowl
+jowls
+joy
+joyed
+joyful
+joyfully
+joyless
+joyous
+joys
+juan
+jud
+judas
+judases
+jude
+judg
+judge
+judged
+judgement
+judges
+judgest
+judging
+judgment
+judgments
+judicious
+jug
+juggle
+juggled
+juggler
+jugglers
+juggling
+jugs
+juice
+juiced
+jul
+jule
+julia
+juliet
+julietta
+julio
+julius
+july
+jump
+jumpeth
+jumping
+jumps
+june
+junes
+junior
+junius
+junkets
+juno
+jupiter
+jure
+jurement
+jurisdiction
+juror
+jurors
+jury
+jurymen
+just
+justeius
+justest
+justice
+justicer
+justicers
+justices
+justification
+justified
+justify
+justle
+justled
+justles
+justling
+justly
+justness
+justs
+jutting
+jutty
+juvenal
+kam
+kate
+kated
+kates
+katharine
+katherina
+katherine
+kecksies
+keech
+keel
+keels
+keen
+keenness
+keep
+keepdown
+keeper
+keepers
+keepest
+keeping
+keeps
+keiser
+ken
+kendal
+kennel
+kent
+kentish
+kentishman
+kentishmen
+kept
+kerchief
+kerely
+kern
+kernal
+kernel
+kernels
+kerns
+kersey
+kettle
+kettledrum
+kettledrums
+key
+keys
+kibe
+kibes
+kick
+kicked
+kickshaws
+kickshawses
+kicky
+kid
+kidney
+kikely
+kildare
+kill
+killed
+killer
+killeth
+killing
+killingworth
+kills
+kiln
+kimbolton
+kin
+kind
+kinder
+kindest
+kindle
+kindled
+kindless
+kindlier
+kindling
+kindly
+kindness
+kindnesses
+kindred
+kindreds
+kinds
+kine
+king
+kingdom
+kingdoms
+kingly
+kings
+kinred
+kins
+kinsman
+kinsmen
+kinswoman
+kirtle
+kirtles
+kiss
+kissed
+kisses
+kissing
+kitchen
+kitchens
+kite
+kites
+kitten
+kj
+kl
+klll
+knack
+knacks
+knapp
+knav
+knave
+knaveries
+knavery
+knaves
+knavish
+knead
+kneaded
+kneading
+knee
+kneel
+kneeling
+kneels
+knees
+knell
+knew
+knewest
+knife
+knight
+knighted
+knighthood
+knighthoods
+knightly
+knights
+knit
+knits
+knitters
+knitteth
+knives
+knobs
+knock
+knocking
+knocks
+knog
+knoll
+knot
+knots
+knotted
+knotty
+know
+knower
+knowest
+knowing
+knowingly
+knowings
+knowledge
+known
+knows
+l
+la
+laban
+label
+labell
+labienus
+labio
+labor
+laboring
+labors
+labour
+laboured
+labourer
+labourers
+labouring
+labours
+laboursome
+labras
+labyrinth
+lac
+lace
+laced
+lacedaemon
+laces
+lacies
+lack
+lackbeard
+lacked
+lackey
+lackeying
+lackeys
+lacking
+lacks
+lad
+ladder
+ladders
+lade
+laden
+ladies
+lading
+lads
+lady
+ladybird
+ladyship
+ladyships
+laer
+laertes
+lafeu
+lag
+lagging
+laid
+lain
+laissez
+lake
+lakes
+lakin
+lam
+lamb
+lambert
+lambkin
+lambkins
+lambs
+lame
+lamely
+lameness
+lament
+lamentable
+lamentably
+lamentation
+lamentations
+lamented
+lamenting
+lamentings
+laments
+lames
+laming
+lammas
+lammastide
+lamound
+lamp
+lampass
+lamps
+lanc
+lancaster
+lance
+lances
+lanceth
+lanch
+land
+landed
+landing
+landless
+landlord
+landmen
+lands
+lane
+lanes
+langage
+langley
+langton
+language
+languageless
+languages
+langues
+languish
+languished
+languishes
+languishing
+languishings
+languishment
+languor
+lank
+lantern
+lanterns
+lanthorn
+lap
+lapis
+lapland
+lapp
+laps
+lapse
+lapsed
+lapsing
+lapwing
+laquais
+larded
+larder
+larding
+lards
+large
+largely
+largeness
+larger
+largess
+largest
+lark
+larks
+larron
+lartius
+larum
+larums
+las
+lascivious
+lash
+lass
+lasses
+last
+lasted
+lasting
+lastly
+lasts
+latch
+latches
+late
+lated
+lately
+later
+latest
+lath
+latin
+latten
+latter
+lattice
+laud
+laudable
+laudis
+laugh
+laughable
+laughed
+laugher
+laughest
+laughing
+laughs
+laughter
+launce
+launcelot
+launces
+launch
+laund
+laundress
+laundry
+laur
+laura
+laurel
+laurels
+laurence
+laus
+lavache
+lave
+lavee
+lavender
+lavina
+lavinia
+lavish
+lavishly
+lavolt
+lavoltas
+law
+lawful
+lawfully
+lawless
+lawlessly
+lawn
+lawns
+lawrence
+laws
+lawyer
+lawyers
+lay
+layer
+layest
+laying
+lays
+lazar
+lazars
+lazarus
+lazy
+lc
+ld
+ldst
+le
+lead
+leaden
+leader
+leaders
+leadest
+leading
+leads
+leaf
+leagu
+league
+leagued
+leaguer
+leagues
+leah
+leak
+leaky
+lean
+leander
+leaner
+leaning
+leanness
+leans
+leap
+leaped
+leaping
+leaps
+leapt
+lear
+learn
+learned
+learnedly
+learning
+learnings
+learns
+learnt
+leas
+lease
+leases
+leash
+leasing
+least
+leather
+leathern
+leav
+leave
+leaven
+leavening
+leaver
+leaves
+leaving
+leavy
+lecher
+lecherous
+lechers
+lechery
+lecon
+lecture
+lectures
+led
+leda
+leech
+leeches
+leek
+leeks
+leer
+leers
+lees
+leese
+leet
+leets
+left
+leg
+legacies
+legacy
+legate
+legatine
+lege
+legerity
+leges
+legg
+legion
+legions
+legitimate
+legitimation
+legs
+leicester
+leicestershire
+leiger
+leigers
+leisure
+leisurely
+leisures
+leman
+lemon
+lena
+lend
+lender
+lending
+lendings
+lends
+length
+lengthen
+lengthens
+lengths
+lenity
+lennox
+lent
+lenten
+lentus
+leo
+leon
+leonardo
+leonati
+leonato
+leonatus
+leontes
+leopard
+leopards
+leper
+leperous
+lepidus
+leprosy
+lequel
+lers
+les
+less
+lessen
+lessens
+lesser
+lesson
+lessoned
+lessons
+lest
+lestrake
+let
+lethargied
+lethargies
+lethargy
+lethe
+lets
+lett
+letter
+letters
+letting
+lettuce
+leur
+leve
+level
+levell
+levelled
+levels
+leven
+levers
+leviathan
+leviathans
+levied
+levies
+levity
+levy
+levying
+lewd
+lewdly
+lewdness
+lewdsters
+lewis
+liable
+liar
+liars
+libbard
+libelling
+libels
+liberal
+liberality
+liberte
+liberties
+libertine
+libertines
+liberty
+library
+libya
+licence
+licens
+license
+licentious
+lichas
+licio
+lick
+licked
+licker
+lictors
+lid
+lids
+lie
+lied
+lief
+liefest
+liege
+liegeman
+liegemen
+lien
+lies
+liest
+lieth
+lieu
+lieutenant
+lieutenantry
+lieutenants
+lieve
+life
+lifeblood
+lifeless
+lifelings
+lift
+lifted
+lifter
+lifteth
+lifting
+lifts
+lig
+ligarius
+liggens
+light
+lighted
+lighten
+lightens
+lighter
+lightest
+lightly
+lightness
+lightning
+lightnings
+lights
+lik
+like
+liked
+likeliest
+likelihood
+likelihoods
+likely
+likeness
+liker
+likes
+likest
+likewise
+liking
+likings
+lilies
+lily
+lim
+limander
+limb
+limbeck
+limbecks
+limber
+limbo
+limbs
+lime
+limed
+limehouse
+limekilns
+limit
+limitation
+limited
+limits
+limn
+limp
+limping
+limps
+lin
+lincoln
+lincolnshire
+line
+lineal
+lineally
+lineament
+lineaments
+lined
+linen
+linens
+lines
+ling
+lingare
+linger
+lingered
+lingers
+linguist
+lining
+link
+links
+linsey
+linstock
+linta
+lion
+lionel
+lioness
+lions
+lip
+lipp
+lips
+lipsbury
+liquid
+liquor
+liquorish
+liquors
+lirra
+lisbon
+lisp
+lisping
+list
+listen
+listening
+lists
+literatured
+lither
+litter
+little
+littlest
+liv
+live
+lived
+livelier
+livelihood
+livelong
+lively
+liver
+liveries
+livers
+livery
+lives
+livest
+liveth
+livia
+living
+livings
+lizard
+lizards
+ll
+lll
+llous
+lnd
+lo
+loa
+loach
+load
+loaden
+loading
+loads
+loaf
+loam
+loan
+loath
+loathe
+loathed
+loather
+loathes
+loathing
+loathly
+loathness
+loathsome
+loathsomeness
+loathsomest
+loaves
+lob
+lobbies
+lobby
+local
+lochaber
+lock
+locked
+locking
+lockram
+locks
+locusts
+lode
+lodg
+lodge
+lodged
+lodgers
+lodges
+lodging
+lodgings
+lodovico
+lodowick
+lofty
+log
+logger
+loggerhead
+loggerheads
+loggets
+logic
+logs
+loins
+loiter
+loiterer
+loiterers
+loitering
+lolling
+lolls
+lombardy
+london
+londoners
+lone
+loneliness
+lonely
+long
+longaville
+longboat
+longed
+longer
+longest
+longeth
+longing
+longings
+longly
+longs
+longtail
+loo
+loof
+look
+looked
+looker
+lookers
+lookest
+looking
+looks
+loon
+loop
+loos
+loose
+loosed
+loosely
+loosen
+loosing
+lop
+lopp
+loquitur
+lord
+lorded
+lording
+lordings
+lordliness
+lordly
+lords
+lordship
+lordships
+lorenzo
+lorn
+lorraine
+lorship
+los
+lose
+loser
+losers
+loses
+losest
+loseth
+losing
+loss
+losses
+lost
+lot
+lots
+lott
+lottery
+loud
+louder
+loudly
+lour
+loureth
+louring
+louse
+louses
+lousy
+lout
+louted
+louts
+louvre
+lov
+love
+loved
+lovedst
+lovel
+lovelier
+loveliness
+lovell
+lovely
+lover
+lovered
+lovers
+loves
+lovest
+loveth
+loving
+lovingly
+low
+lowe
+lower
+lowest
+lowing
+lowliness
+lowly
+lown
+lowness
+loyal
+loyally
+loyalties
+loyalty
+lozel
+lt
+lubber
+lubberly
+luc
+luccicos
+luce
+lucentio
+luces
+lucetta
+luciana
+lucianus
+lucifer
+lucifier
+lucilius
+lucina
+lucio
+lucius
+luck
+luckier
+luckiest
+luckily
+luckless
+lucky
+lucre
+lucrece
+lucretia
+lucullius
+lucullus
+lucy
+lud
+ludlow
+lug
+lugg
+luggage
+luke
+lukewarm
+lull
+lulla
+lullaby
+lulls
+lumbert
+lump
+lumpish
+luna
+lunacies
+lunacy
+lunatic
+lunatics
+lunes
+lungs
+lupercal
+lurch
+lure
+lurk
+lurketh
+lurking
+lurks
+luscious
+lush
+lust
+lusted
+luster
+lustful
+lustier
+lustiest
+lustig
+lustihood
+lustily
+lustre
+lustrous
+lusts
+lusty
+lute
+lutes
+lutestring
+lutheran
+luxurious
+luxuriously
+luxury
+ly
+lycaonia
+lycurguses
+lydia
+lye
+lyen
+lying
+lym
+lymoges
+lynn
+lysander
+m
+ma
+maan
+mab
+macbeth
+maccabaeus
+macdonwald
+macduff
+mace
+macedon
+maces
+machiavel
+machination
+machinations
+machine
+mack
+macmorris
+maculate
+maculation
+mad
+madam
+madame
+madams
+madcap
+madded
+madding
+made
+madeira
+madly
+madman
+madmen
+madness
+madonna
+madrigals
+mads
+maecenas
+maggot
+maggots
+magic
+magical
+magician
+magistrate
+magistrates
+magnanimity
+magnanimous
+magni
+magnifi
+magnificence
+magnificent
+magnifico
+magnificoes
+magnus
+mahomet
+mahu
+maid
+maiden
+maidenhead
+maidenheads
+maidenhood
+maidenhoods
+maidenliest
+maidenly
+maidens
+maidhood
+maids
+mail
+mailed
+mails
+maim
+maimed
+maims
+main
+maincourse
+maine
+mainly
+mainmast
+mains
+maintain
+maintained
+maintains
+maintenance
+mais
+maison
+majestas
+majestee
+majestic
+majestical
+majestically
+majesties
+majesty
+major
+majority
+mak
+make
+makeless
+maker
+makers
+makes
+makest
+maketh
+making
+makings
+mal
+mala
+maladies
+malady
+malapert
+malcolm
+malcontent
+malcontents
+male
+maledictions
+malefactions
+malefactor
+malefactors
+males
+malevolence
+malevolent
+malhecho
+malice
+malicious
+maliciously
+malign
+malignancy
+malignant
+malignantly
+malkin
+mall
+mallard
+mallet
+mallows
+malmsey
+malt
+maltworms
+malvolio
+mamillius
+mammering
+mammet
+mammets
+mammock
+man
+manacle
+manacles
+manage
+managed
+manager
+managing
+manakin
+manchus
+mandate
+mandragora
+mandrake
+mandrakes
+mane
+manent
+manes
+manet
+manfully
+mangle
+mangled
+mangles
+mangling
+mangy
+manhood
+manhoods
+manifest
+manifested
+manifests
+manifold
+manifoldly
+manka
+mankind
+manlike
+manly
+mann
+manna
+manner
+mannerly
+manners
+manningtree
+mannish
+manor
+manors
+mans
+mansion
+mansionry
+mansions
+manslaughter
+mantle
+mantled
+mantles
+mantua
+mantuan
+manual
+manure
+manured
+manus
+many
+map
+mapp
+maps
+mar
+marble
+marbled
+marcade
+marcellus
+march
+marches
+marcheth
+marching
+marchioness
+marchpane
+marcians
+marcius
+marcus
+mardian
+mare
+mares
+marg
+margarelon
+margaret
+marge
+margent
+margery
+maria
+marian
+mariana
+maries
+marigold
+mariner
+mariners
+maritime
+marjoram
+mark
+marked
+market
+marketable
+marketplace
+markets
+marking
+markman
+marks
+marl
+marle
+marmoset
+marquess
+marquis
+marr
+marriage
+marriages
+married
+marries
+marring
+marrow
+marrowless
+marrows
+marry
+marrying
+mars
+marseilles
+marsh
+marshal
+marshalsea
+marshalship
+mart
+marted
+martem
+martext
+martial
+martin
+martino
+martius
+martlemas
+martlet
+marts
+martyr
+martyrs
+marullus
+marv
+marvel
+marvell
+marvellous
+marvellously
+marvels
+mary
+mas
+masculine
+masham
+mask
+masked
+masker
+maskers
+masking
+masks
+mason
+masonry
+masons
+masque
+masquers
+masques
+masquing
+mass
+massacre
+massacres
+masses
+massy
+mast
+mastcr
+master
+masterdom
+masterest
+masterless
+masterly
+masterpiece
+masters
+mastership
+mastic
+mastiff
+mastiffs
+masts
+match
+matches
+matcheth
+matching
+matchless
+mate
+mated
+mater
+material
+mates
+mathematics
+matin
+matron
+matrons
+matter
+matters
+matthew
+mattock
+mattress
+mature
+maturity
+maud
+maudlin
+maugre
+maul
+maund
+mauri
+mauritania
+mauvais
+maw
+maws
+maxim
+may
+mayday
+mayest
+mayor
+maypole
+mayst
+maz
+maze
+mazed
+mazes
+mazzard
+me
+meacock
+mead
+meadow
+meadows
+meads
+meagre
+meal
+meals
+mealy
+mean
+meanders
+meaner
+meanest
+meaneth
+meaning
+meanings
+meanly
+means
+meant
+meantime
+meanwhile
+measles
+measur
+measurable
+measure
+measured
+measureless
+measures
+measuring
+meat
+meats
+mechanic
+mechanical
+mechanicals
+mechanics
+mechante
+med
+medal
+meddle
+meddler
+meddling
+mede
+medea
+media
+mediation
+mediators
+medice
+medicinal
+medicine
+medicines
+meditate
+meditates
+meditating
+meditation
+meditations
+mediterranean
+mediterraneum
+medlar
+medlars
+meed
+meeds
+meek
+meekly
+meekness
+meet
+meeter
+meetest
+meeting
+meetings
+meetly
+meetness
+meets
+meg
+mehercle
+meilleur
+meiny
+meisen
+melancholies
+melancholy
+melford
+mell
+mellifluous
+mellow
+mellowing
+melodious
+melody
+melt
+melted
+melteth
+melting
+melts
+melun
+member
+members
+memento
+memorable
+memorandums
+memorial
+memorials
+memories
+memoriz
+memorize
+memory
+memphis
+men
+menac
+menace
+menaces
+menaphon
+menas
+mend
+mended
+mender
+mending
+mends
+menecrates
+menelaus
+menenius
+mental
+menteith
+mention
+mentis
+menton
+mephostophilus
+mer
+mercatante
+mercatio
+mercenaries
+mercenary
+mercer
+merchandise
+merchandized
+merchant
+merchants
+mercies
+merciful
+mercifully
+merciless
+mercurial
+mercuries
+mercury
+mercutio
+mercy
+mere
+mered
+merely
+merest
+meridian
+merit
+merited
+meritorious
+merits
+merlin
+mermaid
+mermaids
+merops
+merrier
+merriest
+merrily
+merriman
+merriment
+merriments
+merriness
+merry
+mervailous
+mes
+mesh
+meshes
+mesopotamia
+mess
+message
+messages
+messala
+messaline
+messenger
+messengers
+messes
+messina
+met
+metal
+metals
+metamorphis
+metamorphoses
+metaphor
+metaphysical
+metaphysics
+mete
+metellus
+meteor
+meteors
+meteyard
+metheglin
+metheglins
+methink
+methinks
+method
+methods
+methought
+methoughts
+metre
+metres
+metropolis
+mette
+mettle
+mettled
+meus
+mew
+mewed
+mewling
+mexico
+mi
+mice
+michael
+michaelmas
+micher
+miching
+mickle
+microcosm
+mid
+midas
+middest
+middle
+middleham
+midnight
+midriff
+midst
+midsummer
+midway
+midwife
+midwives
+mienne
+might
+mightful
+mightier
+mightiest
+mightily
+mightiness
+mightst
+mighty
+milan
+milch
+mild
+milder
+mildest
+mildew
+mildews
+mildly
+mildness
+mile
+miles
+milford
+militarist
+military
+milk
+milking
+milkmaid
+milks
+milksops
+milky
+mill
+mille
+miller
+milliner
+million
+millioned
+millions
+mills
+millstones
+milo
+mimic
+minc
+mince
+minces
+mincing
+mind
+minded
+minding
+mindless
+minds
+mine
+mineral
+minerals
+minerva
+mines
+mingle
+mingled
+mingling
+minikin
+minim
+minime
+minimo
+minimus
+mining
+minion
+minions
+minist
+minister
+ministers
+ministration
+minnow
+minnows
+minola
+minority
+minos
+minotaurs
+minstrel
+minstrels
+minstrelsy
+mint
+mints
+minute
+minutely
+minutes
+minx
+mio
+mir
+mirable
+miracle
+miracles
+miraculous
+miranda
+mire
+mirror
+mirrors
+mirth
+mirthful
+miry
+mis
+misadventur
+misadventure
+misanthropos
+misapplied
+misbecame
+misbecom
+misbecome
+misbegot
+misbegotten
+misbeliever
+misbelieving
+misbhav
+miscall
+miscalled
+miscarried
+miscarries
+miscarry
+miscarrying
+mischance
+mischances
+mischief
+mischiefs
+mischievous
+misconceived
+misconst
+misconster
+misconstruction
+misconstrued
+misconstrues
+miscreant
+miscreate
+misdeed
+misdeeds
+misdemean
+misdemeanours
+misdoubt
+misdoubteth
+misdoubts
+misenum
+miser
+miserable
+miserably
+misericorde
+miseries
+misers
+misery
+misfortune
+misfortunes
+misgive
+misgives
+misgiving
+misgoverned
+misgovernment
+misgraffed
+misguide
+mishap
+mishaps
+misheard
+misinterpret
+mislead
+misleader
+misleaders
+misleading
+misled
+mislike
+misord
+misplac
+misplaced
+misplaces
+mispris
+misprised
+misprision
+misprizing
+misproud
+misquote
+misreport
+miss
+missed
+misses
+misshap
+misshapen
+missheathed
+missing
+missingly
+missions
+missive
+missives
+misspoke
+mist
+mista
+mistak
+mistake
+mistaken
+mistakes
+mistaketh
+mistaking
+mistakings
+mistemp
+mistempered
+misterm
+mistful
+misthink
+misthought
+mistletoe
+mistook
+mistreadings
+mistress
+mistresses
+mistresss
+mistriship
+mistrust
+mistrusted
+mistrustful
+mistrusting
+mists
+misty
+misus
+misuse
+misused
+misuses
+mites
+mithridates
+mitigate
+mitigation
+mix
+mixed
+mixture
+mixtures
+mm
+mnd
+moan
+moans
+moat
+moated
+mobled
+mock
+mockable
+mocker
+mockeries
+mockers
+mockery
+mocking
+mocks
+mockvater
+mockwater
+model
+modena
+moderate
+moderately
+moderation
+modern
+modest
+modesties
+modestly
+modesty
+modicums
+modo
+module
+moe
+moi
+moiety
+moist
+moisten
+moisture
+moldwarp
+mole
+molehill
+moles
+molest
+molestation
+mollification
+mollis
+molten
+molto
+mome
+moment
+momentary
+moming
+mon
+monachum
+monarch
+monarchies
+monarchize
+monarcho
+monarchs
+monarchy
+monast
+monastery
+monastic
+monday
+monde
+money
+moneys
+mong
+monger
+mongers
+monging
+mongrel
+mongrels
+mongst
+monk
+monkey
+monkeys
+monks
+monmouth
+monopoly
+mons
+monsieur
+monsieurs
+monster
+monsters
+monstrous
+monstrously
+monstrousness
+monstruosity
+montacute
+montage
+montague
+montagues
+montano
+montant
+montez
+montferrat
+montgomery
+month
+monthly
+months
+montjoy
+monument
+monumental
+monuments
+mood
+moods
+moody
+moon
+moonbeams
+moonish
+moonlight
+moons
+moonshine
+moonshines
+moor
+moorfields
+moors
+moorship
+mop
+mope
+moping
+mopping
+mopsa
+moral
+moraler
+morality
+moralize
+mordake
+more
+moreover
+mores
+morgan
+mori
+morisco
+morn
+morning
+mornings
+morocco
+morris
+morrow
+morrows
+morsel
+morsels
+mort
+mortal
+mortality
+mortally
+mortals
+mortar
+mortgaged
+mortified
+mortifying
+mortimer
+mortimers
+mortis
+mortise
+morton
+mose
+moss
+mossgrown
+most
+mote
+moth
+mother
+mothers
+moths
+motion
+motionless
+motions
+motive
+motives
+motley
+mots
+mought
+mould
+moulded
+mouldeth
+moulds
+mouldy
+moult
+moulten
+mounch
+mounseur
+mounsieur
+mount
+mountain
+mountaineer
+mountaineers
+mountainous
+mountains
+mountant
+mountanto
+mountebank
+mountebanks
+mounted
+mounteth
+mounting
+mounts
+mourn
+mourned
+mourner
+mourners
+mournful
+mournfully
+mourning
+mourningly
+mournings
+mourns
+mous
+mouse
+mousetrap
+mousing
+mouth
+mouthed
+mouths
+mov
+movables
+move
+moveable
+moveables
+moved
+mover
+movers
+moves
+moveth
+moving
+movingly
+movousus
+mow
+mowbray
+mower
+mowing
+mows
+moy
+moys
+moyses
+mrs
+much
+muck
+mud
+mudded
+muddied
+muddy
+muffins
+muffl
+muffle
+muffled
+muffler
+muffling
+mugger
+mugs
+mulberries
+mulberry
+mule
+mules
+muleteers
+mulier
+mulieres
+muliteus
+mull
+mulmutius
+multiplied
+multiply
+multiplying
+multipotent
+multitude
+multitudes
+multitudinous
+mum
+mumble
+mumbling
+mummers
+mummy
+mun
+munch
+muniments
+munition
+murd
+murder
+murdered
+murderer
+murderers
+murdering
+murderous
+murders
+mure
+murk
+murkiest
+murky
+murmur
+murmurers
+murmuring
+murrain
+murray
+murrion
+murther
+murtherer
+murtherers
+murthering
+murtherous
+murthers
+mus
+muscadel
+muscovites
+muscovits
+muscovy
+muse
+muses
+mush
+mushrooms
+music
+musical
+musician
+musicians
+musics
+musing
+musings
+musk
+musket
+muskets
+muskos
+muss
+mussel
+mussels
+must
+mustachio
+mustard
+mustardseed
+muster
+mustering
+musters
+musty
+mutability
+mutable
+mutation
+mutations
+mute
+mutes
+mutest
+mutine
+mutineer
+mutineers
+mutines
+mutinies
+mutinous
+mutiny
+mutius
+mutter
+muttered
+mutton
+muttons
+mutual
+mutualities
+mutually
+muzzl
+muzzle
+muzzled
+mv
+mww
+my
+mynheers
+myrmidon
+myrmidons
+myrtle
+myself
+myst
+mysteries
+mystery
+n
+nag
+nage
+nags
+naiads
+nail
+nails
+nak
+naked
+nakedness
+nal
+nam
+name
+named
+nameless
+namely
+names
+namest
+naming
+nan
+nance
+nap
+nape
+napes
+napkin
+napkins
+naples
+napless
+napping
+naps
+narbon
+narcissus
+narines
+narrow
+narrowly
+naso
+nasty
+nathaniel
+natifs
+nation
+nations
+native
+nativity
+natur
+natural
+naturalize
+naturally
+nature
+natured
+natures
+natus
+naught
+naughtily
+naughty
+navarre
+nave
+navel
+navigation
+navy
+nay
+nayward
+nayword
+nazarite
+ne
+neaf
+neamnoins
+neanmoins
+neapolitan
+neapolitans
+near
+nearer
+nearest
+nearly
+nearness
+neat
+neatly
+neb
+nebour
+nebuchadnezzar
+nec
+necessaries
+necessarily
+necessary
+necessitied
+necessities
+necessity
+neck
+necklace
+necks
+nectar
+ned
+nedar
+need
+needed
+needer
+needful
+needfull
+needing
+needle
+needles
+needless
+needly
+needs
+needy
+neer
+neeze
+nefas
+negation
+negative
+negatives
+neglect
+neglected
+neglecting
+neglectingly
+neglection
+negligence
+negligent
+negotiate
+negotiations
+negro
+neigh
+neighbors
+neighbour
+neighbourhood
+neighbouring
+neighbourly
+neighbours
+neighing
+neighs
+neither
+nell
+nemean
+nemesis
+neoptolemus
+nephew
+nephews
+neptune
+ner
+nereides
+nerissa
+nero
+neroes
+ners
+nerve
+nerves
+nervii
+nervy
+nessus
+nest
+nestor
+nests
+net
+nether
+netherlands
+nets
+nettle
+nettled
+nettles
+neuter
+neutral
+nev
+never
+nevil
+nevils
+new
+newborn
+newer
+newest
+newgate
+newly
+newness
+news
+newsmongers
+newt
+newts
+next
+nibbling
+nicanor
+nice
+nicely
+niceness
+nicer
+nicety
+nicholas
+nick
+nickname
+nicks
+niece
+nieces
+niggard
+niggarding
+niggardly
+nigh
+night
+nightcap
+nightcaps
+nighted
+nightgown
+nightingale
+nightingales
+nightly
+nightmare
+nights
+nightwork
+nihil
+nile
+nill
+nilus
+nimble
+nimbleness
+nimbler
+nimbly
+nine
+nineteen
+ning
+ningly
+ninny
+ninth
+ninus
+niobe
+niobes
+nip
+nipp
+nipping
+nipple
+nips
+nit
+nly
+nnight
+nnights
+no
+noah
+nob
+nobility
+nobis
+noble
+nobleman
+noblemen
+nobleness
+nobler
+nobles
+noblesse
+noblest
+nobly
+nobody
+noces
+nod
+nodded
+nodding
+noddle
+noddles
+noddy
+nods
+noes
+nointed
+nois
+noise
+noiseless
+noisemaker
+noises
+noisome
+nole
+nominate
+nominated
+nomination
+nominativo
+non
+nonage
+nonce
+none
+nonino
+nonny
+nonpareil
+nonsuits
+nony
+nook
+nooks
+noon
+noonday
+noontide
+nor
+norbery
+norfolk
+norman
+normandy
+normans
+north
+northampton
+northamptonshire
+northerly
+northern
+northgate
+northumberland
+northumberlands
+northward
+norway
+norways
+norwegian
+norweyan
+nos
+nose
+nosegays
+noseless
+noses
+noster
+nostra
+nostril
+nostrils
+not
+notable
+notably
+notary
+notch
+note
+notebook
+noted
+notedly
+notes
+notest
+noteworthy
+nothing
+nothings
+notice
+notify
+noting
+notion
+notorious
+notoriously
+notre
+notwithstanding
+nought
+noun
+nouns
+nourish
+nourished
+nourisher
+nourishes
+nourisheth
+nourishing
+nourishment
+nous
+novel
+novelties
+novelty
+noverbs
+novi
+novice
+novices
+novum
+now
+nowhere
+noyance
+ns
+nt
+nubibus
+numa
+numb
+number
+numbered
+numbering
+numberless
+numbers
+numbness
+nun
+nuncio
+nuncle
+nunnery
+nuns
+nuntius
+nuptial
+nurs
+nurse
+nursed
+nurser
+nursery
+nurses
+nurseth
+nursh
+nursing
+nurtur
+nurture
+nut
+nuthook
+nutmeg
+nutmegs
+nutriment
+nuts
+nutshell
+ny
+nym
+nymph
+nymphs
+o
+oak
+oaken
+oaks
+oared
+oars
+oatcake
+oaten
+oath
+oathable
+oaths
+oats
+ob
+obduracy
+obdurate
+obedience
+obedient
+obeisance
+oberon
+obey
+obeyed
+obeying
+obeys
+obidicut
+object
+objected
+objections
+objects
+oblation
+oblations
+obligation
+obligations
+obliged
+oblique
+oblivion
+oblivious
+obloquy
+obscene
+obscenely
+obscur
+obscure
+obscured
+obscurely
+obscures
+obscuring
+obscurity
+obsequies
+obsequious
+obsequiously
+observ
+observance
+observances
+observancy
+observant
+observants
+observation
+observe
+observed
+observer
+observers
+observing
+observingly
+obsque
+obstacle
+obstacles
+obstinacy
+obstinate
+obstinately
+obstruct
+obstruction
+obstructions
+obtain
+obtained
+obtaining
+occasion
+occasions
+occident
+occidental
+occulted
+occupat
+occupation
+occupations
+occupied
+occupies
+occupy
+occurrence
+occurrences
+occurrents
+ocean
+oceans
+octavia
+octavius
+ocular
+od
+odd
+oddest
+oddly
+odds
+ode
+odes
+odious
+odoriferous
+odorous
+odour
+odours
+ods
+oeillades
+oes
+oeuvres
+of
+ofephesus
+off
+offal
+offence
+offenceful
+offences
+offend
+offended
+offendendo
+offender
+offenders
+offendeth
+offending
+offendress
+offends
+offense
+offenseless
+offenses
+offensive
+offer
+offered
+offering
+offerings
+offers
+offert
+offic
+office
+officed
+officer
+officers
+offices
+official
+officious
+offspring
+oft
+often
+oftener
+oftentimes
+oh
+oil
+oils
+oily
+old
+oldcastle
+olden
+older
+oldest
+oldness
+olive
+oliver
+olivers
+olives
+olivia
+olympian
+olympus
+oman
+omans
+omen
+ominous
+omission
+omit
+omittance
+omitted
+omitting
+omne
+omnes
+omnipotent
+on
+once
+one
+ones
+oneyers
+ongles
+onion
+onions
+only
+onset
+onward
+onwards
+oo
+ooze
+oozes
+oozy
+op
+opal
+ope
+open
+opener
+opening
+openly
+openness
+opens
+operant
+operate
+operation
+operations
+operative
+opes
+oph
+ophelia
+opinion
+opinions
+opportune
+opportunities
+opportunity
+oppos
+oppose
+opposed
+opposeless
+opposer
+opposers
+opposes
+opposing
+opposite
+opposites
+opposition
+oppositions
+oppress
+oppressed
+oppresses
+oppresseth
+oppressing
+oppression
+oppressor
+opprest
+opprobriously
+oppugnancy
+opulency
+opulent
+or
+oracle
+oracles
+orange
+oration
+orator
+orators
+oratory
+orb
+orbed
+orbs
+orchard
+orchards
+ord
+ordain
+ordained
+ordaining
+order
+ordered
+ordering
+orderless
+orderly
+orders
+ordinance
+ordinant
+ordinaries
+ordinary
+ordnance
+ords
+ordure
+ore
+organ
+organs
+orgillous
+orient
+orifex
+origin
+original
+orisons
+ork
+orlando
+orld
+orleans
+ornament
+ornaments
+orodes
+orphan
+orphans
+orpheus
+orsino
+ort
+orthography
+orts
+oscorbidulchos
+osier
+osiers
+osprey
+osr
+osric
+ossa
+ost
+ostent
+ostentare
+ostentation
+ostents
+ostler
+ostlers
+ostrich
+osw
+oswald
+othello
+other
+othergates
+others
+otherwhere
+otherwhiles
+otherwise
+otter
+ottoman
+ottomites
+oublie
+ouches
+ought
+oui
+ounce
+ounces
+ouphes
+our
+ours
+ourself
+ourselves
+ousel
+out
+outbids
+outbrave
+outbraves
+outbreak
+outcast
+outcries
+outcry
+outdar
+outdare
+outdares
+outdone
+outfac
+outface
+outfaced
+outfacing
+outfly
+outfrown
+outgo
+outgoes
+outgrown
+outjest
+outlaw
+outlawry
+outlaws
+outliv
+outlive
+outlives
+outliving
+outlook
+outlustres
+outpriz
+outrage
+outrageous
+outrages
+outran
+outright
+outroar
+outrun
+outrunning
+outruns
+outscold
+outscorn
+outsell
+outsells
+outside
+outsides
+outspeaks
+outsport
+outstare
+outstay
+outstood
+outstretch
+outstretched
+outstrike
+outstrip
+outstripped
+outswear
+outvenoms
+outward
+outwardly
+outwards
+outwear
+outweighs
+outwent
+outworn
+outworths
+oven
+over
+overawe
+overbear
+overblown
+overboard
+overbold
+overborne
+overbulk
+overbuys
+overcame
+overcast
+overcharg
+overcharged
+overcome
+overcomes
+overdone
+overearnest
+overfar
+overflow
+overflown
+overglance
+overgo
+overgone
+overgorg
+overgrown
+overhead
+overhear
+overheard
+overhold
+overjoyed
+overkind
+overland
+overleather
+overlive
+overlook
+overlooking
+overlooks
+overmaster
+overmounting
+overmuch
+overpass
+overpeer
+overpeering
+overplus
+overrul
+overrun
+overscutch
+overset
+overshades
+overshine
+overshines
+overshot
+oversights
+overspread
+overstain
+overswear
+overt
+overta
+overtake
+overtaketh
+overthrow
+overthrown
+overthrows
+overtook
+overtopp
+overture
+overturn
+overwatch
+overween
+overweening
+overweigh
+overwhelm
+overwhelming
+overworn
+ovid
+ovidius
+ow
+owe
+owed
+owedst
+owen
+owes
+owest
+oweth
+owing
+owl
+owls
+own
+owner
+owners
+owning
+owns
+owy
+ox
+oxen
+oxford
+oxfordshire
+oxlips
+oyes
+oyster
+p
+pabble
+pabylon
+pac
+pace
+paced
+paces
+pacified
+pacify
+pacing
+pack
+packet
+packets
+packhorses
+packing
+packings
+packs
+packthread
+pacorus
+paction
+pad
+paddle
+paddling
+paddock
+padua
+pagan
+pagans
+page
+pageant
+pageants
+pages
+pah
+paid
+pail
+pailfuls
+pails
+pain
+pained
+painful
+painfully
+pains
+paint
+painted
+painter
+painting
+paintings
+paints
+pair
+paired
+pairs
+pajock
+pal
+palabras
+palace
+palaces
+palamedes
+palate
+palates
+palatine
+palating
+pale
+paled
+paleness
+paler
+pales
+palestine
+palfrey
+palfreys
+palisadoes
+pall
+pallabris
+pallas
+pallets
+palm
+palmer
+palmers
+palms
+palmy
+palpable
+palsied
+palsies
+palsy
+palt
+palter
+paltry
+paly
+pamp
+pamper
+pamphlets
+pan
+pancackes
+pancake
+pancakes
+pandar
+pandars
+pandarus
+pander
+panderly
+panders
+pandulph
+panel
+pang
+panging
+pangs
+pannier
+pannonians
+pansa
+pansies
+pant
+pantaloon
+panted
+pantheon
+panther
+panthino
+panting
+pantingly
+pantler
+pantry
+pants
+pap
+papal
+paper
+papers
+paphlagonia
+paphos
+papist
+paps
+par
+parable
+paracelsus
+paradise
+paradox
+paradoxes
+paragon
+paragons
+parallel
+parallels
+paramour
+paramours
+parapets
+paraquito
+parasite
+parasites
+parca
+parcel
+parcell
+parcels
+parch
+parched
+parching
+parchment
+pard
+pardon
+pardona
+pardoned
+pardoner
+pardoning
+pardonne
+pardonner
+pardonnez
+pardons
+pare
+pared
+parel
+parent
+parentage
+parents
+parfect
+paring
+parings
+paris
+parish
+parishioners
+parisians
+paritors
+park
+parks
+parle
+parler
+parles
+parley
+parlez
+parliament
+parlors
+parlour
+parlous
+parmacity
+parolles
+parricide
+parricides
+parrot
+parrots
+parsley
+parson
+part
+partake
+partaken
+partaker
+partakers
+parted
+parthia
+parthian
+parthians
+parti
+partial
+partialize
+partially
+participate
+participation
+particle
+particular
+particularities
+particularize
+particularly
+particulars
+parties
+parting
+partisan
+partisans
+partition
+partizan
+partlet
+partly
+partner
+partners
+partridge
+parts
+party
+pas
+pash
+pashed
+pashful
+pass
+passable
+passado
+passage
+passages
+passant
+passed
+passenger
+passengers
+passes
+passeth
+passing
+passio
+passion
+passionate
+passioning
+passions
+passive
+passport
+passy
+past
+paste
+pasterns
+pasties
+pastime
+pastimes
+pastoral
+pastorals
+pastors
+pastry
+pasture
+pastures
+pasty
+pat
+patay
+patch
+patchery
+patches
+pate
+pated
+patent
+patents
+paternal
+pates
+path
+pathetical
+paths
+pathway
+pathways
+patience
+patient
+patiently
+patients
+patines
+patrician
+patricians
+patrick
+patrimony
+patroclus
+patron
+patronage
+patroness
+patrons
+patrum
+patter
+pattern
+patterns
+pattle
+pauca
+paucas
+paul
+paulina
+paunch
+paunches
+pause
+pauser
+pauses
+pausingly
+pauvres
+pav
+paved
+pavement
+pavilion
+pavilions
+pavin
+paw
+pawn
+pawns
+paws
+pax
+pay
+payest
+paying
+payment
+payments
+pays
+paysan
+paysans
+pe
+peace
+peaceable
+peaceably
+peaceful
+peacemakers
+peaces
+peach
+peaches
+peacock
+peacocks
+peak
+peaking
+peal
+peals
+pear
+peard
+pearl
+pearls
+pears
+peas
+peasant
+peasantry
+peasants
+peascod
+pease
+peaseblossom
+peat
+peaten
+peating
+pebble
+pebbled
+pebbles
+peck
+pecks
+peculiar
+pecus
+pedant
+pedantical
+pedascule
+pede
+pedestal
+pedigree
+pedlar
+pedlars
+pedro
+peds
+peel
+peep
+peeped
+peeping
+peeps
+peer
+peereth
+peering
+peerless
+peers
+peesel
+peevish
+peevishly
+peflur
+peg
+pegasus
+pegs
+peise
+peised
+peize
+pelf
+pelican
+pelion
+pell
+pella
+pelleted
+peloponnesus
+pelt
+pelting
+pembroke
+pen
+penalties
+penalty
+penance
+pence
+pencil
+pencill
+pencils
+pendant
+pendent
+pendragon
+pendulous
+penelope
+penetrable
+penetrate
+penetrative
+penitence
+penitent
+penitential
+penitently
+penitents
+penker
+penknife
+penn
+penned
+penning
+pennons
+penny
+pennyworth
+pennyworths
+pens
+pense
+pension
+pensioners
+pensive
+pensived
+pensively
+pent
+pentecost
+penthesilea
+penthouse
+penurious
+penury
+peopl
+people
+peopled
+peoples
+pepin
+pepper
+peppercorn
+peppered
+per
+peradventure
+peradventures
+perceiv
+perceive
+perceived
+perceives
+perceiveth
+perch
+perchance
+percies
+percussion
+percy
+perdie
+perdita
+perdition
+perdonato
+perdu
+perdurable
+perdurably
+perdy
+pere
+peregrinate
+peremptorily
+peremptory
+perfect
+perfected
+perfecter
+perfectest
+perfection
+perfections
+perfectly
+perfectness
+perfidious
+perfidiously
+perforce
+perform
+performance
+performances
+performed
+performer
+performers
+performing
+performs
+perfum
+perfume
+perfumed
+perfumer
+perfumes
+perge
+perhaps
+periapts
+perigort
+perigouna
+peril
+perilous
+perils
+period
+periods
+perish
+perished
+perishest
+perisheth
+perishing
+periwig
+perjur
+perjure
+perjured
+perjuries
+perjury
+perk
+perkes
+permafoy
+permanent
+permission
+permissive
+permit
+permitted
+pernicious
+perniciously
+peroration
+perpend
+perpendicular
+perpendicularly
+perpetual
+perpetually
+perpetuity
+perplex
+perplexed
+perplexity
+pers
+persecuted
+persecutions
+persecutor
+perseus
+persever
+perseverance
+persevers
+persia
+persian
+persist
+persisted
+persistency
+persistive
+persists
+person
+personae
+personage
+personages
+personal
+personally
+personate
+personated
+personates
+personating
+persons
+perspective
+perspectively
+perspectives
+perspicuous
+persuade
+persuaded
+persuades
+persuading
+persuasion
+persuasions
+pert
+pertain
+pertaining
+pertains
+pertaunt
+pertinent
+pertly
+perturb
+perturbation
+perturbations
+perturbed
+perus
+perusal
+peruse
+perused
+perusing
+perverse
+perversely
+perverseness
+pervert
+perverted
+peseech
+pest
+pester
+pestiferous
+pestilence
+pestilent
+pet
+petar
+peter
+petit
+petition
+petitionary
+petitioner
+petitioners
+petitions
+peto
+petrarch
+petruchio
+petter
+petticoat
+petticoats
+pettiness
+pettish
+pettitoes
+petty
+peu
+pew
+pewter
+pewterer
+phaethon
+phaeton
+phantasime
+phantasimes
+phantasma
+pharamond
+pharaoh
+pharsalia
+pheasant
+pheazar
+phebe
+phebes
+pheebus
+pheeze
+phibbus
+philadelphos
+philario
+philarmonus
+philemon
+philip
+philippan
+philippe
+philippi
+phillida
+philo
+philomel
+philomela
+philosopher
+philosophers
+philosophical
+philosophy
+philostrate
+philotus
+phlegmatic
+phoebe
+phoebus
+phoenicia
+phoenicians
+phoenix
+phorbus
+photinus
+phrase
+phraseless
+phrases
+phrygia
+phrygian
+phrynia
+physic
+physical
+physician
+physicians
+physics
+pia
+pibble
+pible
+picardy
+pick
+pickaxe
+pickaxes
+pickbone
+picked
+pickers
+picking
+pickle
+picklock
+pickpurse
+picks
+pickt
+pickthanks
+pictur
+picture
+pictured
+pictures
+pid
+pie
+piec
+piece
+pieces
+piecing
+pied
+piedness
+pier
+pierc
+pierce
+pierced
+pierces
+pierceth
+piercing
+piercy
+piers
+pies
+piety
+pig
+pigeon
+pigeons
+pight
+pigmy
+pigrogromitus
+pike
+pikes
+pil
+pilate
+pilates
+pilchers
+pile
+piles
+pilf
+pilfering
+pilgrim
+pilgrimage
+pilgrims
+pill
+pillage
+pillagers
+pillar
+pillars
+pillicock
+pillory
+pillow
+pillows
+pills
+pilot
+pilots
+pimpernell
+pin
+pinch
+pinched
+pinches
+pinching
+pindarus
+pine
+pined
+pines
+pinfold
+pining
+pinion
+pink
+pinn
+pinnace
+pins
+pinse
+pint
+pintpot
+pioned
+pioneers
+pioner
+pioners
+pious
+pip
+pipe
+piper
+pipers
+pipes
+piping
+pippin
+pippins
+pirate
+pirates
+pisa
+pisanio
+pish
+pismires
+piss
+pissing
+pistol
+pistols
+pit
+pitch
+pitched
+pitcher
+pitchers
+pitchy
+piteous
+piteously
+pitfall
+pith
+pithless
+pithy
+pitie
+pitied
+pities
+pitiful
+pitifully
+pitiless
+pits
+pittance
+pittie
+pittikins
+pity
+pitying
+pius
+plac
+place
+placed
+placentio
+places
+placeth
+placid
+placing
+plack
+placket
+plackets
+plagu
+plague
+plagued
+plagues
+plaguing
+plaguy
+plain
+plainer
+plainest
+plaining
+plainings
+plainly
+plainness
+plains
+plainsong
+plaintful
+plaintiff
+plaintiffs
+plaints
+planched
+planet
+planetary
+planets
+planks
+plant
+plantage
+plantagenet
+plantagenets
+plantain
+plantation
+planted
+planteth
+plants
+plash
+plashy
+plast
+plaster
+plasterer
+plat
+plate
+plated
+plates
+platform
+platforms
+plats
+platted
+plausible
+plausive
+plautus
+play
+played
+player
+players
+playeth
+playfellow
+playfellows
+playhouse
+playing
+plays
+plea
+pleach
+pleached
+plead
+pleaded
+pleader
+pleaders
+pleading
+pleads
+pleas
+pleasance
+pleasant
+pleasantly
+please
+pleased
+pleaser
+pleasers
+pleases
+pleasest
+pleaseth
+pleasing
+pleasure
+pleasures
+plebeians
+plebeii
+plebs
+pledge
+pledges
+pleines
+plenitude
+plenteous
+plenteously
+plenties
+plentiful
+plentifully
+plenty
+pless
+plessed
+plessing
+pliant
+plied
+plies
+plight
+plighted
+plighter
+plod
+plodded
+plodders
+plodding
+plods
+plood
+ploody
+plot
+plots
+plotted
+plotter
+plough
+ploughed
+ploughman
+ploughmen
+plow
+plows
+pluck
+plucked
+plucker
+plucking
+plucks
+plue
+plum
+plume
+plumed
+plumes
+plummet
+plump
+plumpy
+plums
+plung
+plunge
+plunged
+plural
+plurisy
+plus
+pluto
+plutus
+ply
+po
+pocket
+pocketing
+pockets
+pocky
+pody
+poem
+poesy
+poet
+poetical
+poetry
+poets
+poictiers
+poinards
+poins
+point
+pointblank
+pointed
+pointing
+points
+pois
+poise
+poising
+poison
+poisoned
+poisoner
+poisoning
+poisonous
+poisons
+poke
+poking
+pol
+polack
+polacks
+poland
+pold
+pole
+poleaxe
+polecat
+polecats
+polemon
+poles
+poli
+policies
+policy
+polish
+polished
+politic
+politician
+politicians
+politicly
+polixenes
+poll
+polluted
+pollution
+polonius
+poltroons
+polusion
+polydamus
+polydore
+polyxena
+pomander
+pomegranate
+pomewater
+pomfret
+pomgarnet
+pommel
+pomp
+pompeius
+pompey
+pompion
+pompous
+pomps
+pond
+ponder
+ponderous
+ponds
+poniard
+poniards
+pont
+pontic
+pontifical
+ponton
+pooh
+pool
+poole
+poop
+poor
+poorer
+poorest
+poorly
+pop
+pope
+popedom
+popilius
+popingay
+popish
+popp
+poppy
+pops
+popular
+popularity
+populous
+porch
+porches
+pore
+poring
+pork
+porn
+porpentine
+porridge
+porringer
+port
+portable
+portage
+portal
+portance
+portcullis
+portend
+portends
+portent
+portentous
+portents
+porter
+porters
+portia
+portion
+portly
+portotartarossa
+portrait
+portraiture
+ports
+portugal
+pose
+posied
+posies
+position
+positive
+positively
+posse
+possess
+possessed
+possesses
+possesseth
+possessing
+possession
+possessions
+possessor
+posset
+possets
+possibilities
+possibility
+possible
+possibly
+possitable
+post
+poste
+posted
+posterior
+posteriors
+posterity
+postern
+posterns
+posters
+posthorse
+posthorses
+posthumus
+posting
+postmaster
+posts
+postscript
+posture
+postures
+posy
+pot
+potable
+potations
+potato
+potatoes
+potch
+potency
+potent
+potentates
+potential
+potently
+potents
+pothecary
+pother
+potion
+potions
+potpan
+pots
+potter
+potting
+pottle
+pouch
+poulter
+poultice
+poultney
+pouncet
+pound
+pounds
+pour
+pourest
+pouring
+pourquoi
+pours
+pout
+poverty
+pow
+powd
+powder
+power
+powerful
+powerfully
+powerless
+powers
+pox
+poys
+poysam
+prabbles
+practic
+practice
+practiced
+practicer
+practices
+practicing
+practis
+practisants
+practise
+practiser
+practisers
+practises
+practising
+praeclarissimus
+praemunire
+praetor
+praetors
+pragging
+prague
+prain
+prains
+prais
+praise
+praised
+praises
+praisest
+praiseworthy
+praising
+prancing
+prank
+pranks
+prat
+prate
+prated
+prater
+prating
+prattle
+prattler
+prattling
+prave
+prawls
+prawns
+pray
+prayer
+prayers
+praying
+prays
+pre
+preach
+preached
+preachers
+preaches
+preaching
+preachment
+pread
+preambulate
+precedence
+precedent
+preceding
+precept
+preceptial
+precepts
+precinct
+precious
+preciously
+precipice
+precipitating
+precipitation
+precise
+precisely
+preciseness
+precisian
+precor
+precurse
+precursors
+predeceased
+predecessor
+predecessors
+predestinate
+predicament
+predict
+prediction
+predictions
+predominance
+predominant
+predominate
+preeches
+preeminence
+preface
+prefer
+preferment
+preferments
+preferr
+preferreth
+preferring
+prefers
+prefiguring
+prefix
+prefixed
+preformed
+pregnancy
+pregnant
+pregnantly
+prejudicates
+prejudice
+prejudicial
+prelate
+premeditated
+premeditation
+premised
+premises
+prenez
+prenominate
+prentice
+prentices
+preordinance
+prepar
+preparation
+preparations
+prepare
+prepared
+preparedly
+prepares
+preparing
+prepost
+preposterous
+preposterously
+prerogatifes
+prerogative
+prerogatived
+presage
+presagers
+presages
+presageth
+presaging
+prescience
+prescribe
+prescript
+prescription
+prescriptions
+prescripts
+presence
+presences
+present
+presentation
+presented
+presenter
+presenters
+presenteth
+presenting
+presently
+presentment
+presents
+preserv
+preservation
+preservative
+preserve
+preserved
+preserver
+preservers
+preserving
+president
+press
+pressed
+presser
+presses
+pressing
+pressure
+pressures
+prest
+prester
+presume
+presumes
+presuming
+presumption
+presumptuous
+presuppos
+pret
+pretence
+pretences
+pretend
+pretended
+pretending
+pretense
+pretext
+pretia
+prettier
+prettiest
+prettily
+prettiness
+pretty
+prevail
+prevailed
+prevaileth
+prevailing
+prevailment
+prevails
+prevent
+prevented
+prevention
+preventions
+prevents
+prey
+preyful
+preys
+priam
+priami
+priamus
+pribbles
+price
+prick
+pricked
+pricket
+pricking
+pricks
+pricksong
+pride
+prides
+pridge
+prie
+pried
+prief
+pries
+priest
+priesthood
+priests
+prig
+primal
+prime
+primer
+primero
+primest
+primitive
+primo
+primogenity
+primrose
+primroses
+primy
+prince
+princely
+princes
+princess
+principal
+principalities
+principality
+principle
+principles
+princox
+prings
+print
+printed
+printing
+printless
+prints
+prioress
+priories
+priority
+priory
+priscian
+prison
+prisoner
+prisoners
+prisonment
+prisonnier
+prisons
+pristine
+prithe
+prithee
+privacy
+private
+privately
+privates
+privilage
+privileg
+privilege
+privileged
+privileges
+privilegio
+privily
+privity
+privy
+priz
+prize
+prized
+prizer
+prizes
+prizest
+prizing
+pro
+probable
+probal
+probation
+proceed
+proceeded
+proceeders
+proceeding
+proceedings
+proceeds
+process
+procession
+proclaim
+proclaimed
+proclaimeth
+proclaims
+proclamation
+proclamations
+proconsul
+procrastinate
+procreant
+procreants
+procreation
+procrus
+proculeius
+procur
+procurator
+procure
+procured
+procures
+procuring
+prodigal
+prodigality
+prodigally
+prodigals
+prodigies
+prodigious
+prodigiously
+prodigy
+proditor
+produc
+produce
+produced
+produces
+producing
+proface
+profan
+profanation
+profane
+profaned
+profanely
+profaneness
+profaners
+profaning
+profess
+professed
+professes
+profession
+professions
+professors
+proffer
+proffered
+profferer
+proffers
+proficient
+profit
+profitable
+profitably
+profited
+profiting
+profitless
+profits
+profound
+profoundest
+profoundly
+progenitors
+progeny
+progne
+prognosticate
+prognostication
+progress
+progression
+prohibit
+prohibition
+project
+projection
+projects
+prolixious
+prolixity
+prologue
+prologues
+prolong
+prolongs
+promethean
+prometheus
+promis
+promise
+promised
+promises
+promiseth
+promising
+promontory
+promotion
+promotions
+prompt
+prompted
+promptement
+prompter
+prompting
+prompts
+prompture
+promulgate
+prone
+prononcer
+prononcez
+pronoun
+pronounc
+pronounce
+pronounced
+pronouncing
+pronouns
+proof
+proofs
+prop
+propagate
+propagation
+propend
+propension
+proper
+properer
+properly
+propertied
+properties
+property
+prophecies
+prophecy
+prophesied
+prophesier
+prophesy
+prophesying
+prophet
+prophetess
+prophetic
+prophetically
+prophets
+propinquity
+propontic
+proportion
+proportionable
+proportions
+propos
+propose
+proposed
+proposer
+proposes
+proposing
+proposition
+propositions
+propounded
+propp
+propre
+propriety
+props
+propugnation
+prorogue
+prorogued
+proscription
+proscriptions
+prose
+prosecute
+prosecution
+proselytes
+proserpina
+prosp
+prospect
+prosper
+prosperity
+prospero
+prosperous
+prosperously
+prospers
+prostitute
+prostrate
+protect
+protected
+protection
+protector
+protectors
+protectorship
+protectress
+protects
+protest
+protestation
+protestations
+protested
+protester
+protesting
+protests
+proteus
+protheus
+protract
+protractive
+proud
+prouder
+proudest
+proudlier
+proudly
+prouds
+prov
+provand
+prove
+proved
+provender
+proverb
+proverbs
+proves
+proveth
+provide
+provided
+providence
+provident
+providently
+provider
+provides
+province
+provinces
+provincial
+proving
+provision
+proviso
+provocation
+provok
+provoke
+provoked
+provoker
+provokes
+provoketh
+provoking
+provost
+prowess
+prudence
+prudent
+prun
+prune
+prunes
+pruning
+pry
+prying
+psalm
+psalmist
+psalms
+psalteries
+ptolemies
+ptolemy
+public
+publican
+publication
+publicly
+publicola
+publish
+published
+publisher
+publishing
+publius
+pucelle
+puck
+pudder
+pudding
+puddings
+puddle
+puddled
+pudency
+pueritia
+puff
+puffing
+puffs
+pugging
+puis
+puissance
+puissant
+puke
+puking
+pulcher
+puling
+pull
+puller
+pullet
+pulling
+pulls
+pulpit
+pulpiter
+pulpits
+pulse
+pulsidge
+pump
+pumpion
+pumps
+pun
+punched
+punish
+punished
+punishes
+punishment
+punishments
+punk
+punto
+puny
+pupil
+pupils
+puppet
+puppets
+puppies
+puppy
+pur
+purblind
+purchas
+purchase
+purchased
+purchases
+purchaseth
+purchasing
+pure
+purely
+purer
+purest
+purg
+purgation
+purgative
+purgatory
+purge
+purged
+purgers
+purging
+purifies
+purifying
+puritan
+purity
+purlieus
+purple
+purpled
+purples
+purport
+purpos
+purpose
+purposed
+purposely
+purposes
+purposeth
+purposing
+purr
+purs
+purse
+pursents
+purses
+pursu
+pursue
+pursued
+pursuers
+pursues
+pursuest
+pursueth
+pursuing
+pursuit
+pursuivant
+pursuivants
+pursy
+purus
+purveyor
+push
+pushes
+pusillanimity
+put
+putrefy
+putrified
+puts
+putter
+putting
+puttock
+puzzel
+puzzle
+puzzled
+puzzles
+py
+pygmalion
+pygmies
+pygmy
+pyramid
+pyramides
+pyramids
+pyramis
+pyramises
+pyramus
+pyrenean
+pyrrhus
+pythagoras
+qu
+quadrangle
+quae
+quaff
+quaffing
+quagmire
+quail
+quailing
+quails
+quaint
+quaintly
+quak
+quake
+quakes
+qualification
+qualified
+qualifies
+qualify
+qualifying
+qualite
+qualities
+quality
+qualm
+qualmish
+quam
+quand
+quando
+quantities
+quantity
+quare
+quarrel
+quarrell
+quarreller
+quarrelling
+quarrelous
+quarrels
+quarrelsome
+quarries
+quarry
+quart
+quarter
+quartered
+quartering
+quarters
+quarts
+quasi
+quat
+quatch
+quay
+que
+quean
+queas
+queasiness
+queasy
+queen
+queens
+quell
+queller
+quench
+quenched
+quenching
+quenchless
+quern
+quest
+questant
+question
+questionable
+questioned
+questioning
+questionless
+questions
+questrists
+quests
+queubus
+qui
+quick
+quicken
+quickens
+quicker
+quicklier
+quickly
+quickness
+quicksand
+quicksands
+quicksilverr
+quid
+quiddities
+quiddits
+quier
+quiet
+quieter
+quietly
+quietness
+quietus
+quill
+quillets
+quills
+quilt
+quinapalus
+quince
+quinces
+quintain
+quintessence
+quintus
+quip
+quips
+quire
+quiring
+quirk
+quirks
+quis
+quit
+quite
+quits
+quittance
+quitted
+quitting
+quiver
+quivering
+quivers
+quo
+quod
+quoifs
+quoint
+quoit
+quoits
+quondam
+quoniam
+quote
+quoted
+quotes
+quoth
+quotidian
+r
+rabbit
+rabble
+rabblement
+race
+rack
+rackers
+racket
+rackets
+racking
+racks
+radiance
+radiant
+radish
+rafe
+raft
+rag
+rage
+rages
+rageth
+ragg
+ragged
+raggedness
+raging
+ragozine
+rags
+rah
+rail
+railed
+railer
+railest
+raileth
+railing
+rails
+raiment
+rain
+rainbow
+raineth
+raining
+rainold
+rains
+rainy
+rais
+raise
+raised
+raises
+raising
+raisins
+rak
+rake
+rakers
+rakes
+ral
+rald
+ralph
+ram
+rambures
+ramm
+rampallian
+rampant
+ramping
+rampir
+ramps
+rams
+ramsey
+ramston
+ran
+rance
+rancorous
+rancors
+rancour
+random
+rang
+range
+ranged
+rangers
+ranges
+ranging
+rank
+ranker
+rankest
+ranking
+rankle
+rankly
+rankness
+ranks
+ransack
+ransacking
+ransom
+ransomed
+ransoming
+ransomless
+ransoms
+rant
+ranting
+rap
+rape
+rapes
+rapier
+rapiers
+rapine
+raps
+rapt
+rapture
+raptures
+rar
+rare
+rarely
+rareness
+rarer
+rarest
+rarities
+rarity
+rascal
+rascalliest
+rascally
+rascals
+rased
+rash
+rasher
+rashly
+rashness
+rat
+ratcatcher
+ratcliff
+rate
+rated
+rately
+rates
+rather
+ratherest
+ratified
+ratifiers
+ratify
+rating
+rational
+ratolorum
+rats
+ratsbane
+rattle
+rattles
+rattling
+rature
+raught
+rav
+rave
+ravel
+raven
+ravening
+ravenous
+ravens
+ravenspurgh
+raves
+ravin
+raving
+ravish
+ravished
+ravisher
+ravishing
+ravishments
+raw
+rawer
+rawly
+rawness
+ray
+rayed
+rays
+raz
+raze
+razed
+razes
+razeth
+razing
+razor
+razorable
+razors
+razure
+re
+reach
+reaches
+reacheth
+reaching
+read
+reader
+readiest
+readily
+readiness
+reading
+readins
+reads
+ready
+real
+really
+realm
+realms
+reap
+reapers
+reaping
+reaps
+rear
+rears
+rearward
+reason
+reasonable
+reasonably
+reasoned
+reasoning
+reasonless
+reasons
+reave
+rebate
+rebato
+rebeck
+rebel
+rebell
+rebelling
+rebellion
+rebellious
+rebels
+rebound
+rebuk
+rebuke
+rebukeable
+rebuked
+rebukes
+rebus
+recall
+recant
+recantation
+recanter
+recanting
+receipt
+receipts
+receiv
+receive
+received
+receiver
+receives
+receivest
+receiveth
+receiving
+receptacle
+rechate
+reciprocal
+reciprocally
+recite
+recited
+reciterai
+reck
+recking
+reckless
+reckon
+reckoned
+reckoning
+reckonings
+recks
+reclaim
+reclaims
+reclusive
+recognizance
+recognizances
+recoil
+recoiling
+recollected
+recomforted
+recomforture
+recommend
+recommended
+recommends
+recompens
+recompense
+reconcil
+reconcile
+reconciled
+reconcilement
+reconciler
+reconciles
+reconciliation
+record
+recordation
+recorded
+recorder
+recorders
+records
+recount
+recounted
+recounting
+recountments
+recounts
+recourse
+recov
+recover
+recoverable
+recovered
+recoveries
+recovers
+recovery
+recreant
+recreants
+recreate
+recreation
+rectify
+rector
+rectorship
+recure
+recured
+red
+redbreast
+redder
+reddest
+rede
+redeem
+redeemed
+redeemer
+redeeming
+redeems
+redeliver
+redemption
+redime
+redness
+redoubled
+redoubted
+redound
+redress
+redressed
+redresses
+reduce
+reechy
+reed
+reeds
+reek
+reeking
+reeks
+reeky
+reel
+reeleth
+reeling
+reels
+refell
+refer
+reference
+referr
+referred
+refigured
+refin
+refined
+reflect
+reflecting
+reflection
+reflex
+reform
+reformation
+reformed
+refractory
+refrain
+refresh
+refreshing
+reft
+refts
+refuge
+refus
+refusal
+refuse
+refused
+refusest
+refusing
+reg
+regal
+regalia
+regan
+regard
+regardance
+regarded
+regardfully
+regarding
+regards
+regenerate
+regent
+regentship
+regia
+regiment
+regiments
+regina
+region
+regions
+regist
+register
+registers
+regreet
+regreets
+regress
+reguerdon
+regular
+rehears
+rehearsal
+rehearse
+reign
+reigned
+reignier
+reigning
+reigns
+rein
+reinforc
+reinforce
+reinforcement
+reins
+reiterate
+reject
+rejected
+rejoic
+rejoice
+rejoices
+rejoiceth
+rejoicing
+rejoicingly
+rejoindure
+rejourn
+rel
+relapse
+relate
+relates
+relation
+relations
+relative
+releas
+release
+released
+releasing
+relent
+relenting
+relents
+reliances
+relics
+relief
+reliev
+relieve
+relieved
+relieves
+relieving
+religion
+religions
+religious
+religiously
+relinquish
+reliques
+reliquit
+relish
+relume
+rely
+relying
+remain
+remainder
+remainders
+remained
+remaineth
+remaining
+remains
+remark
+remarkable
+remediate
+remedied
+remedies
+remedy
+rememb
+remember
+remembered
+remembers
+remembrance
+remembrancer
+remembrances
+remercimens
+remiss
+remission
+remissness
+remit
+remnant
+remnants
+remonstrance
+remorse
+remorseful
+remorseless
+remote
+remotion
+remov
+remove
+removed
+removedness
+remover
+removes
+removing
+remunerate
+remuneration
+rence
+rend
+render
+rendered
+renders
+rendezvous
+renegado
+renege
+reneges
+renew
+renewed
+renewest
+renounce
+renouncement
+renouncing
+renowmed
+renown
+renowned
+rent
+rents
+repaid
+repair
+repaired
+repairing
+repairs
+repass
+repast
+repasture
+repay
+repaying
+repays
+repeal
+repealing
+repeals
+repeat
+repeated
+repeating
+repeats
+repel
+repent
+repentance
+repentant
+repented
+repenting
+repents
+repetition
+repetitions
+repin
+repine
+repining
+replant
+replenish
+replenished
+replete
+replication
+replied
+replies
+repliest
+reply
+replying
+report
+reported
+reporter
+reportest
+reporting
+reportingly
+reports
+reposal
+repose
+reposeth
+reposing
+repossess
+reprehend
+reprehended
+reprehending
+represent
+representing
+reprieve
+reprieves
+reprisal
+reproach
+reproaches
+reproachful
+reproachfully
+reprobate
+reprobation
+reproof
+reprov
+reprove
+reproveable
+reproves
+reproving
+repugn
+repugnancy
+repugnant
+repulse
+repulsed
+repurchas
+repured
+reputation
+repute
+reputed
+reputeless
+reputes
+reputing
+request
+requested
+requesting
+requests
+requiem
+requir
+require
+required
+requires
+requireth
+requiring
+requisite
+requisites
+requit
+requital
+requite
+requited
+requites
+rer
+rere
+rers
+rescu
+rescue
+rescued
+rescues
+rescuing
+resemblance
+resemble
+resembled
+resembles
+resembleth
+resembling
+reserv
+reservation
+reserve
+reserved
+reserves
+reside
+residence
+resident
+resides
+residing
+residue
+resign
+resignation
+resist
+resistance
+resisted
+resisting
+resists
+resolute
+resolutely
+resolutes
+resolution
+resolv
+resolve
+resolved
+resolvedly
+resolves
+resolveth
+resort
+resorted
+resounding
+resounds
+respeaking
+respect
+respected
+respecting
+respective
+respectively
+respects
+respice
+respite
+respites
+responsive
+respose
+ress
+rest
+rested
+resteth
+restful
+resting
+restitution
+restless
+restor
+restoration
+restorative
+restore
+restored
+restores
+restoring
+restrain
+restrained
+restraining
+restrains
+restraint
+rests
+resty
+resum
+resume
+resumes
+resurrections
+retail
+retails
+retain
+retainers
+retaining
+retell
+retention
+retentive
+retinue
+retir
+retire
+retired
+retirement
+retires
+retiring
+retold
+retort
+retorts
+retourne
+retract
+retreat
+retrograde
+rets
+return
+returned
+returnest
+returneth
+returning
+returns
+revania
+reveal
+reveals
+revel
+reveler
+revell
+reveller
+revellers
+revelling
+revelry
+revels
+reveng
+revenge
+revenged
+revengeful
+revengement
+revenger
+revengers
+revenges
+revenging
+revengingly
+revenue
+revenues
+reverb
+reverberate
+reverbs
+reverenc
+reverence
+reverend
+reverent
+reverently
+revers
+reverse
+reversion
+reverted
+review
+reviewest
+revil
+revile
+revisits
+reviv
+revive
+revives
+reviving
+revok
+revoke
+revokement
+revolt
+revolted
+revolting
+revolts
+revolution
+revolutions
+revolve
+revolving
+reward
+rewarded
+rewarder
+rewarding
+rewards
+reword
+reworded
+rex
+rey
+reynaldo
+rford
+rful
+rfull
+rhapsody
+rheims
+rhenish
+rhesus
+rhetoric
+rheum
+rheumatic
+rheums
+rheumy
+rhinoceros
+rhodes
+rhodope
+rhubarb
+rhym
+rhyme
+rhymers
+rhymes
+rhyming
+rialto
+rib
+ribald
+riband
+ribands
+ribaudred
+ribb
+ribbed
+ribbon
+ribbons
+ribs
+rice
+rich
+richard
+richer
+riches
+richest
+richly
+richmond
+richmonds
+rid
+riddance
+ridden
+riddle
+riddles
+riddling
+ride
+rider
+riders
+rides
+ridest
+rideth
+ridge
+ridges
+ridiculous
+riding
+rids
+rien
+ries
+rifle
+rift
+rifted
+rig
+rigg
+riggish
+right
+righteous
+righteously
+rightful
+rightfully
+rightly
+rights
+rigol
+rigorous
+rigorously
+rigour
+ril
+rim
+rin
+rinaldo
+rind
+ring
+ringing
+ringleader
+ringlets
+rings
+ringwood
+riot
+rioter
+rioting
+riotous
+riots
+rip
+ripe
+ripely
+ripen
+ripened
+ripeness
+ripening
+ripens
+riper
+ripest
+riping
+ripp
+ripping
+rise
+risen
+rises
+riseth
+rish
+rising
+rite
+rites
+rivage
+rival
+rivality
+rivall
+rivals
+rive
+rived
+rivelled
+river
+rivers
+rivet
+riveted
+rivets
+rivo
+rj
+rless
+road
+roads
+roam
+roaming
+roan
+roar
+roared
+roarers
+roaring
+roars
+roast
+roasted
+rob
+roba
+robas
+robb
+robbed
+robber
+robbers
+robbery
+robbing
+robe
+robed
+robert
+robes
+robin
+robs
+robustious
+rochester
+rochford
+rock
+rocks
+rocky
+rod
+rode
+roderigo
+rods
+roe
+roes
+roger
+rogero
+rogue
+roguery
+rogues
+roguish
+roi
+roisting
+roll
+rolled
+rolling
+rolls
+rom
+romage
+roman
+romano
+romanos
+romans
+rome
+romeo
+romish
+rondure
+ronyon
+rood
+roof
+roofs
+rook
+rooks
+rooky
+room
+rooms
+root
+rooted
+rootedly
+rooteth
+rooting
+roots
+rope
+ropery
+ropes
+roping
+ros
+rosalind
+rosalinda
+rosalinde
+rosaline
+roscius
+rose
+rosed
+rosemary
+rosencrantz
+roses
+ross
+rosy
+rot
+rote
+roted
+rother
+rotherham
+rots
+rotted
+rotten
+rottenness
+rotting
+rotundity
+rouen
+rough
+rougher
+roughest
+roughly
+roughness
+round
+rounded
+roundel
+rounder
+roundest
+rounding
+roundly
+rounds
+roundure
+rous
+rouse
+roused
+rousillon
+rously
+roussi
+rout
+routed
+routs
+rove
+rover
+row
+rowel
+rowland
+rowlands
+roy
+royal
+royalize
+royally
+royalties
+royalty
+roynish
+rs
+rt
+rub
+rubb
+rubbing
+rubbish
+rubies
+rubious
+rubs
+ruby
+rud
+rudand
+rudder
+ruddiness
+ruddock
+ruddy
+rude
+rudely
+rudeness
+ruder
+rudesby
+rudest
+rudiments
+rue
+rued
+ruff
+ruffian
+ruffians
+ruffle
+ruffling
+ruffs
+rug
+rugby
+rugemount
+rugged
+ruin
+ruinate
+ruined
+ruining
+ruinous
+ruins
+rul
+rule
+ruled
+ruler
+rulers
+rules
+ruling
+rumble
+ruminaies
+ruminat
+ruminate
+ruminated
+ruminates
+rumination
+rumor
+rumour
+rumourer
+rumours
+rump
+run
+runagate
+runagates
+runaway
+runaways
+rung
+runn
+runner
+runners
+running
+runs
+rupture
+ruptures
+rural
+rush
+rushes
+rushing
+rushling
+rushy
+russet
+russia
+russian
+russians
+rust
+rusted
+rustic
+rustically
+rustics
+rustle
+rustling
+rusts
+rusty
+rut
+ruth
+ruthful
+ruthless
+rutland
+ruttish
+ry
+rye
+rything
+s
+sa
+saba
+sabbath
+sable
+sables
+sack
+sackbuts
+sackcloth
+sacked
+sackerson
+sacks
+sacrament
+sacred
+sacrific
+sacrifice
+sacrificers
+sacrifices
+sacrificial
+sacrificing
+sacrilegious
+sacring
+sad
+sadder
+saddest
+saddle
+saddler
+saddles
+sadly
+sadness
+saf
+safe
+safeguard
+safely
+safer
+safest
+safeties
+safety
+saffron
+sag
+sage
+sagittary
+said
+saidst
+sail
+sailing
+sailmaker
+sailor
+sailors
+sails
+sain
+saint
+sainted
+saintlike
+saints
+saith
+sake
+sakes
+sala
+salad
+salamander
+salary
+sale
+salerio
+salicam
+salique
+salisbury
+sall
+sallet
+sallets
+sallies
+sallow
+sally
+salmon
+salmons
+salt
+salter
+saltiers
+saltness
+saltpetre
+salutation
+salutations
+salute
+saluted
+salutes
+saluteth
+salv
+salvation
+salve
+salving
+same
+samingo
+samp
+sampire
+sample
+sampler
+sampson
+samson
+samsons
+sancta
+sanctified
+sanctifies
+sanctify
+sanctimonies
+sanctimonious
+sanctimony
+sanctities
+sanctity
+sanctuarize
+sanctuary
+sand
+sandal
+sandbag
+sanded
+sands
+sandy
+sandys
+sang
+sanguine
+sanguis
+sanity
+sans
+santrailles
+sap
+sapient
+sapit
+sapless
+sapling
+sapphire
+sapphires
+saracens
+sarcenet
+sard
+sardians
+sardinia
+sardis
+sarum
+sat
+satan
+satchel
+sate
+sated
+satiate
+satiety
+satin
+satire
+satirical
+satis
+satisfaction
+satisfied
+satisfies
+satisfy
+satisfying
+saturday
+saturdays
+saturn
+saturnine
+saturninus
+satyr
+satyrs
+sauc
+sauce
+sauced
+saucers
+sauces
+saucily
+sauciness
+saucy
+sauf
+saunder
+sav
+savage
+savagely
+savageness
+savagery
+savages
+save
+saved
+saves
+saving
+saviour
+savory
+savour
+savouring
+savours
+savoury
+savoy
+saw
+sawed
+sawest
+sawn
+sawpit
+saws
+sawyer
+saxons
+saxony
+saxton
+say
+sayest
+saying
+sayings
+says
+sayst
+sblood
+sc
+scab
+scabbard
+scabs
+scaffold
+scaffoldage
+scal
+scald
+scalded
+scalding
+scale
+scaled
+scales
+scaling
+scall
+scalp
+scalps
+scaly
+scamble
+scambling
+scamels
+scan
+scandal
+scandaliz
+scandalous
+scandy
+scann
+scant
+scanted
+scanter
+scanting
+scantling
+scants
+scap
+scape
+scaped
+scapes
+scapeth
+scar
+scarce
+scarcely
+scarcity
+scare
+scarecrow
+scarecrows
+scarf
+scarfed
+scarfs
+scaring
+scarlet
+scarr
+scarre
+scars
+scarus
+scath
+scathe
+scathful
+scatt
+scatter
+scattered
+scattering
+scatters
+scelera
+scelerisque
+scene
+scenes
+scent
+scented
+scept
+scepter
+sceptre
+sceptred
+sceptres
+schedule
+schedules
+scholar
+scholarly
+scholars
+school
+schoolboy
+schoolboys
+schoolfellows
+schooling
+schoolmaster
+schoolmasters
+schools
+sciatica
+sciaticas
+science
+sciences
+scimitar
+scion
+scions
+scissors
+scoff
+scoffer
+scoffing
+scoffs
+scoggin
+scold
+scolding
+scolds
+sconce
+scone
+scope
+scopes
+scorch
+scorched
+score
+scored
+scores
+scoring
+scorn
+scorned
+scornful
+scornfully
+scorning
+scorns
+scorpion
+scorpions
+scot
+scotch
+scotches
+scotland
+scots
+scottish
+scoundrels
+scour
+scoured
+scourg
+scourge
+scouring
+scout
+scouts
+scowl
+scrap
+scrape
+scraping
+scraps
+scratch
+scratches
+scratching
+scream
+screams
+screech
+screeching
+screen
+screens
+screw
+screws
+scribbl
+scribbled
+scribe
+scribes
+scrimers
+scrip
+scrippage
+scripture
+scriptures
+scrivener
+scroll
+scrolls
+scroop
+scrowl
+scroyles
+scrubbed
+scruple
+scruples
+scrupulous
+scuffles
+scuffling
+scullion
+sculls
+scum
+scurril
+scurrility
+scurrilous
+scurvy
+scuse
+scut
+scutcheon
+scutcheons
+scylla
+scythe
+scythed
+scythia
+scythian
+sdeath
+se
+sea
+seacoal
+seafaring
+seal
+sealed
+sealing
+seals
+seam
+seamen
+seamy
+seaport
+sear
+searce
+search
+searchers
+searches
+searcheth
+searching
+seared
+seas
+seasick
+seaside
+season
+seasoned
+seasons
+seat
+seated
+seats
+sebastian
+second
+secondarily
+secondary
+seconded
+seconds
+secrecy
+secret
+secretaries
+secretary
+secretly
+secrets
+sect
+sectary
+sects
+secundo
+secure
+securely
+securing
+security
+sedg
+sedge
+sedges
+sedgy
+sedition
+seditious
+seduc
+seduce
+seduced
+seducer
+seducing
+see
+seed
+seeded
+seedness
+seeds
+seedsman
+seein
+seeing
+seek
+seeking
+seeks
+seel
+seeling
+seely
+seem
+seemed
+seemers
+seemest
+seemeth
+seeming
+seemingly
+seemly
+seems
+seen
+seer
+sees
+seese
+seest
+seethe
+seethes
+seething
+seeting
+segregation
+seigneur
+seigneurs
+seiz
+seize
+seized
+seizes
+seizeth
+seizing
+seizure
+seld
+seldom
+select
+seleucus
+self
+selfsame
+sell
+seller
+selling
+sells
+selves
+semblable
+semblably
+semblance
+semblances
+semblative
+semi
+semicircle
+semiramis
+semper
+sempronius
+senate
+senator
+senators
+send
+sender
+sendeth
+sending
+sends
+seneca
+senior
+seniory
+senis
+sennet
+senoys
+sense
+senseless
+senses
+sensible
+sensibly
+sensual
+sensuality
+sent
+sentenc
+sentence
+sentences
+sententious
+sentinel
+sentinels
+separable
+separate
+separated
+separates
+separation
+septentrion
+sepulchre
+sepulchres
+sepulchring
+sequel
+sequence
+sequent
+sequest
+sequester
+sequestration
+sere
+serenis
+serge
+sergeant
+serious
+seriously
+sermon
+sermons
+serpent
+serpentine
+serpents
+serpigo
+serv
+servant
+servanted
+servants
+serve
+served
+server
+serves
+serveth
+service
+serviceable
+services
+servile
+servility
+servilius
+serving
+servingman
+servingmen
+serviteur
+servitor
+servitors
+servitude
+sessa
+session
+sessions
+sestos
+set
+setebos
+sets
+setter
+setting
+settle
+settled
+settlest
+settling
+sev
+seven
+sevenfold
+sevennight
+seventeen
+seventh
+seventy
+sever
+several
+severally
+severals
+severe
+severed
+severely
+severest
+severing
+severity
+severn
+severs
+sew
+seward
+sewer
+sewing
+sex
+sexes
+sexton
+sextus
+seymour
+seyton
+sfoot
+sh
+shackle
+shackles
+shade
+shades
+shadow
+shadowed
+shadowing
+shadows
+shadowy
+shady
+shafalus
+shaft
+shafts
+shag
+shak
+shake
+shaked
+shaken
+shakes
+shaking
+shales
+shall
+shallenge
+shallow
+shallowest
+shallowly
+shallows
+shalt
+sham
+shambles
+shame
+shamed
+shameful
+shamefully
+shameless
+shames
+shamest
+shaming
+shank
+shanks
+shap
+shape
+shaped
+shapeless
+shapen
+shapes
+shaping
+shar
+shard
+sharded
+shards
+share
+shared
+sharers
+shares
+sharing
+shark
+sharp
+sharpen
+sharpened
+sharpens
+sharper
+sharpest
+sharply
+sharpness
+sharps
+shatter
+shav
+shave
+shaven
+shaw
+she
+sheaf
+sheal
+shear
+shearers
+shearing
+shearman
+shears
+sheath
+sheathe
+sheathed
+sheathes
+sheathing
+sheaved
+sheaves
+shed
+shedding
+sheds
+sheen
+sheep
+sheepcote
+sheepcotes
+sheeps
+sheepskins
+sheer
+sheet
+sheeted
+sheets
+sheffield
+shelf
+shell
+shells
+shelt
+shelter
+shelters
+shelves
+shelving
+shelvy
+shent
+shepherd
+shepherdes
+shepherdess
+shepherdesses
+shepherds
+sher
+sheriff
+sherris
+shes
+sheweth
+shield
+shielded
+shields
+shift
+shifted
+shifting
+shifts
+shilling
+shillings
+shin
+shine
+shines
+shineth
+shining
+shins
+shiny
+ship
+shipboard
+shipman
+shipmaster
+shipmen
+shipp
+shipped
+shipping
+ships
+shipt
+shipwreck
+shipwrecking
+shipwright
+shipwrights
+shire
+shirley
+shirt
+shirts
+shive
+shiver
+shivering
+shivers
+shoal
+shoals
+shock
+shocks
+shod
+shoe
+shoeing
+shoemaker
+shoes
+shog
+shone
+shook
+shoon
+shoot
+shooter
+shootie
+shooting
+shoots
+shop
+shops
+shore
+shores
+shorn
+short
+shortcake
+shorten
+shortened
+shortens
+shorter
+shortly
+shortness
+shot
+shotten
+shoughs
+should
+shoulder
+shouldering
+shoulders
+shouldst
+shout
+shouted
+shouting
+shouts
+shov
+shove
+shovel
+shovels
+show
+showed
+shower
+showers
+showest
+showing
+shown
+shows
+shreds
+shrew
+shrewd
+shrewdly
+shrewdness
+shrewish
+shrewishly
+shrewishness
+shrews
+shrewsbury
+shriek
+shrieking
+shrieks
+shrieve
+shrift
+shrill
+shriller
+shrills
+shrilly
+shrimp
+shrine
+shrink
+shrinking
+shrinks
+shriv
+shrive
+shriver
+shrives
+shriving
+shroud
+shrouded
+shrouding
+shrouds
+shrove
+shrow
+shrows
+shrub
+shrubs
+shrug
+shrugs
+shrunk
+shudd
+shudders
+shuffl
+shuffle
+shuffled
+shuffling
+shun
+shunless
+shunn
+shunned
+shunning
+shuns
+shut
+shuts
+shuttle
+shy
+shylock
+si
+sibyl
+sibylla
+sibyls
+sicil
+sicilia
+sicilian
+sicilius
+sicils
+sicily
+sicinius
+sick
+sicken
+sickens
+sicker
+sickle
+sicklemen
+sicklied
+sickliness
+sickly
+sickness
+sicles
+sicyon
+side
+sided
+sides
+siege
+sieges
+sienna
+sies
+sieve
+sift
+sifted
+sigeia
+sigh
+sighed
+sighing
+sighs
+sight
+sighted
+sightless
+sightly
+sights
+sign
+signal
+signet
+signieur
+significant
+significants
+signified
+signifies
+signify
+signifying
+signior
+signiories
+signiors
+signiory
+signor
+signories
+signs
+signum
+silenc
+silence
+silenced
+silencing
+silent
+silently
+silius
+silk
+silken
+silkman
+silks
+silliest
+silliness
+silling
+silly
+silva
+silver
+silvered
+silverly
+silvia
+silvius
+sima
+simile
+similes
+simois
+simon
+simony
+simp
+simpcox
+simple
+simpleness
+simpler
+simples
+simplicity
+simply
+simular
+simulation
+sin
+since
+sincere
+sincerely
+sincerity
+sinel
+sinew
+sinewed
+sinews
+sinewy
+sinful
+sinfully
+sing
+singe
+singeing
+singer
+singes
+singeth
+singing
+single
+singled
+singleness
+singly
+sings
+singular
+singulariter
+singularities
+singularity
+singuled
+sinister
+sink
+sinking
+sinks
+sinn
+sinner
+sinners
+sinning
+sinon
+sins
+sip
+sipping
+sir
+sire
+siren
+sirrah
+sirs
+sist
+sister
+sisterhood
+sisterly
+sisters
+sit
+sith
+sithence
+sits
+sitting
+situate
+situation
+situations
+siward
+six
+sixpence
+sixpences
+sixpenny
+sixteen
+sixth
+sixty
+siz
+size
+sizes
+sizzle
+skains
+skamble
+skein
+skelter
+skies
+skilful
+skilfully
+skill
+skilless
+skillet
+skillful
+skills
+skim
+skimble
+skin
+skinker
+skinny
+skins
+skip
+skipp
+skipper
+skipping
+skirmish
+skirmishes
+skirr
+skirted
+skirts
+skittish
+skulking
+skull
+skulls
+sky
+skyey
+skyish
+slab
+slack
+slackly
+slackness
+slain
+slake
+sland
+slander
+slandered
+slanderer
+slanderers
+slandering
+slanderous
+slanders
+slash
+slaught
+slaughter
+slaughtered
+slaughterer
+slaughterman
+slaughtermen
+slaughterous
+slaughters
+slave
+slaver
+slavery
+slaves
+slavish
+slay
+slayeth
+slaying
+slays
+sleave
+sledded
+sleek
+sleekly
+sleep
+sleeper
+sleepers
+sleepest
+sleeping
+sleeps
+sleepy
+sleeve
+sleeves
+sleid
+sleided
+sleight
+sleights
+slender
+slenderer
+slenderly
+slept
+slew
+slewest
+slice
+slid
+slide
+slides
+sliding
+slight
+slighted
+slightest
+slightly
+slightness
+slights
+slily
+slime
+slimy
+slings
+slink
+slip
+slipp
+slipper
+slippers
+slippery
+slips
+slish
+slit
+sliver
+slobb
+slomber
+slop
+slope
+slops
+sloth
+slothful
+slough
+slovenly
+slovenry
+slow
+slower
+slowly
+slowness
+slubber
+slug
+sluggard
+sluggardiz
+sluggish
+sluic
+slumb
+slumber
+slumbers
+slumbery
+slunk
+slut
+sluts
+sluttery
+sluttish
+sluttishness
+sly
+slys
+smack
+smacking
+smacks
+small
+smaller
+smallest
+smallness
+smalus
+smart
+smarting
+smartly
+smatch
+smatter
+smear
+smell
+smelling
+smells
+smelt
+smil
+smile
+smiled
+smiles
+smilest
+smilets
+smiling
+smilingly
+smirch
+smirched
+smit
+smite
+smites
+smith
+smithfield
+smock
+smocks
+smok
+smoke
+smoked
+smokes
+smoking
+smoky
+smooth
+smoothed
+smoothing
+smoothly
+smoothness
+smooths
+smote
+smoth
+smother
+smothered
+smothering
+smug
+smulkin
+smutch
+snaffle
+snail
+snails
+snake
+snakes
+snaky
+snap
+snapp
+snapper
+snar
+snare
+snares
+snarl
+snarleth
+snarling
+snatch
+snatchers
+snatches
+snatching
+sneak
+sneaking
+sneap
+sneaping
+sneck
+snip
+snipe
+snipt
+snore
+snores
+snoring
+snorting
+snout
+snow
+snowballs
+snowed
+snowy
+snuff
+snuffs
+snug
+so
+soak
+soaking
+soaks
+soar
+soaring
+soars
+sob
+sobbing
+sober
+soberly
+sobriety
+sobs
+sociable
+societies
+society
+socks
+socrates
+sod
+sodden
+soe
+soever
+soft
+soften
+softens
+softer
+softest
+softly
+softness
+soil
+soiled
+soilure
+soit
+sojourn
+sol
+sola
+solace
+solanio
+sold
+soldat
+solder
+soldest
+soldier
+soldiers
+soldiership
+sole
+solely
+solem
+solemn
+solemness
+solemnities
+solemnity
+solemniz
+solemnize
+solemnized
+solemnly
+soles
+solicit
+solicitation
+solicited
+soliciting
+solicitings
+solicitor
+solicits
+solid
+solidares
+solidity
+solinus
+solitary
+solomon
+solon
+solum
+solus
+solyman
+some
+somebody
+someone
+somerset
+somerville
+something
+sometime
+sometimes
+somever
+somewhat
+somewhere
+somewhither
+somme
+son
+sonance
+song
+songs
+sonnet
+sonneting
+sonnets
+sons
+sont
+sonties
+soon
+sooner
+soonest
+sooth
+soothe
+soothers
+soothing
+soothsay
+soothsayer
+sooty
+sop
+sophister
+sophisticated
+sophy
+sops
+sorcerer
+sorcerers
+sorceress
+sorceries
+sorcery
+sore
+sorel
+sorely
+sorer
+sores
+sorrier
+sorriest
+sorrow
+sorrowed
+sorrowest
+sorrowful
+sorrowing
+sorrows
+sorry
+sort
+sortance
+sorted
+sorting
+sorts
+sossius
+sot
+soto
+sots
+sottish
+soud
+sought
+soul
+sould
+soulless
+souls
+sound
+sounded
+sounder
+soundest
+sounding
+soundless
+soundly
+soundness
+soundpost
+sounds
+sour
+source
+sources
+sourest
+sourly
+sours
+sous
+souse
+south
+southam
+southampton
+southerly
+southern
+southward
+southwark
+southwell
+souviendrai
+sov
+sovereign
+sovereignest
+sovereignly
+sovereignty
+sovereignvours
+sow
+sowing
+sowl
+sowter
+space
+spaces
+spacious
+spade
+spades
+spain
+spak
+spake
+spakest
+span
+spangle
+spangled
+spaniard
+spaniel
+spaniels
+spanish
+spann
+spans
+spar
+spare
+spares
+sparing
+sparingly
+spark
+sparkle
+sparkles
+sparkling
+sparks
+sparrow
+sparrows
+sparta
+spartan
+spavin
+spavins
+spawn
+speak
+speaker
+speakers
+speakest
+speaketh
+speaking
+speaks
+spear
+speargrass
+spears
+special
+specialities
+specially
+specialties
+specialty
+specify
+speciously
+spectacle
+spectacled
+spectacles
+spectators
+spectatorship
+speculation
+speculations
+speculative
+sped
+speech
+speeches
+speechless
+speed
+speeded
+speedier
+speediest
+speedily
+speediness
+speeding
+speeds
+speedy
+speens
+spell
+spelling
+spells
+spelt
+spencer
+spend
+spendest
+spending
+spends
+spendthrift
+spent
+sperato
+sperm
+spero
+sperr
+spher
+sphere
+sphered
+spheres
+spherical
+sphery
+sphinx
+spice
+spiced
+spicery
+spices
+spider
+spiders
+spied
+spies
+spieth
+spightfully
+spigot
+spill
+spilling
+spills
+spilt
+spilth
+spin
+spinii
+spinners
+spinster
+spinsters
+spire
+spirit
+spirited
+spiritless
+spirits
+spiritual
+spiritualty
+spirt
+spit
+spital
+spite
+spited
+spiteful
+spites
+spits
+spitted
+spitting
+splay
+spleen
+spleenful
+spleens
+spleeny
+splendour
+splenitive
+splinter
+splinters
+split
+splits
+splitted
+splitting
+spoil
+spoils
+spok
+spoke
+spoken
+spokes
+spokesman
+sponge
+spongy
+spoon
+spoons
+sport
+sportful
+sporting
+sportive
+sports
+spot
+spotless
+spots
+spotted
+spousal
+spouse
+spout
+spouting
+spouts
+sprag
+sprang
+sprat
+sprawl
+spray
+sprays
+spread
+spreading
+spreads
+sprighted
+sprightful
+sprightly
+sprigs
+spring
+springe
+springes
+springeth
+springhalt
+springing
+springs
+springtime
+sprinkle
+sprinkles
+sprite
+sprited
+spritely
+sprites
+spriting
+sprout
+spruce
+sprung
+spun
+spur
+spurio
+spurn
+spurns
+spurr
+spurrer
+spurring
+spurs
+spy
+spying
+squabble
+squadron
+squadrons
+squand
+squar
+square
+squarer
+squares
+squash
+squeak
+squeaking
+squeal
+squealing
+squeezes
+squeezing
+squele
+squier
+squints
+squiny
+squire
+squires
+squirrel
+st
+stab
+stabb
+stabbed
+stabbing
+stable
+stableness
+stables
+stablish
+stablishment
+stabs
+stacks
+staff
+stafford
+staffords
+staffordshire
+stag
+stage
+stages
+stagger
+staggering
+staggers
+stags
+staid
+staider
+stain
+stained
+staines
+staineth
+staining
+stainless
+stains
+stair
+stairs
+stake
+stakes
+stale
+staled
+stalk
+stalking
+stalks
+stall
+stalling
+stalls
+stamford
+stammer
+stamp
+stamped
+stamps
+stanch
+stanchless
+stand
+standard
+standards
+stander
+standers
+standest
+standeth
+standing
+stands
+staniel
+stanley
+stanze
+stanzo
+stanzos
+staple
+staples
+star
+stare
+stared
+stares
+staring
+starings
+stark
+starkly
+starlight
+starling
+starr
+starry
+stars
+start
+started
+starting
+startingly
+startle
+startles
+starts
+starv
+starve
+starved
+starvelackey
+starveling
+starveth
+starving
+state
+statelier
+stately
+states
+statesman
+statesmen
+statilius
+station
+statist
+statists
+statue
+statues
+stature
+statures
+statute
+statutes
+stave
+staves
+stay
+stayed
+stayest
+staying
+stays
+stead
+steaded
+steadfast
+steadier
+steads
+steal
+stealer
+stealers
+stealing
+steals
+stealth
+stealthy
+steed
+steeds
+steel
+steeled
+steely
+steep
+steeped
+steeple
+steeples
+steeps
+steepy
+steer
+steerage
+steering
+steers
+stelled
+stem
+stemming
+stench
+step
+stepdame
+stephano
+stephen
+stepmothers
+stepp
+stepping
+steps
+sterile
+sterility
+sterling
+stern
+sternage
+sterner
+sternest
+sternness
+steterat
+stew
+steward
+stewards
+stewardship
+stewed
+stews
+stick
+sticking
+stickler
+sticks
+stiff
+stiffen
+stiffly
+stifle
+stifled
+stifles
+stigmatic
+stigmatical
+stile
+still
+stiller
+stillest
+stillness
+stilly
+sting
+stinging
+stingless
+stings
+stink
+stinking
+stinkingly
+stinks
+stint
+stinted
+stints
+stir
+stirr
+stirred
+stirrer
+stirrers
+stirreth
+stirring
+stirrup
+stirrups
+stirs
+stitchery
+stitches
+stithied
+stithy
+stoccadoes
+stoccata
+stock
+stockfish
+stocking
+stockings
+stockish
+stocks
+stog
+stogs
+stoics
+stokesly
+stol
+stole
+stolen
+stolest
+stomach
+stomachers
+stomaching
+stomachs
+ston
+stone
+stonecutter
+stones
+stonish
+stony
+stood
+stool
+stools
+stoop
+stooping
+stoops
+stop
+stope
+stopp
+stopped
+stopping
+stops
+stor
+store
+storehouse
+storehouses
+stores
+stories
+storm
+stormed
+storming
+storms
+stormy
+story
+stoup
+stoups
+stout
+stouter
+stoutly
+stoutness
+stover
+stow
+stowage
+stowed
+strachy
+stragglers
+straggling
+straight
+straightest
+straightway
+strain
+strained
+straining
+strains
+strait
+straited
+straiter
+straitly
+straitness
+straits
+strand
+strange
+strangely
+strangeness
+stranger
+strangers
+strangest
+strangle
+strangled
+strangler
+strangles
+strangling
+strappado
+straps
+stratagem
+stratagems
+stratford
+strato
+straw
+strawberries
+strawberry
+straws
+strawy
+stray
+straying
+strays
+streak
+streaks
+stream
+streamers
+streaming
+streams
+streching
+street
+streets
+strength
+strengthen
+strengthened
+strengthless
+strengths
+stretch
+stretched
+stretches
+stretching
+strew
+strewing
+strewings
+strewments
+stricken
+strict
+stricter
+strictest
+strictly
+stricture
+stride
+strides
+striding
+strife
+strifes
+strik
+strike
+strikers
+strikes
+strikest
+striking
+string
+stringless
+strings
+strip
+stripes
+stripling
+striplings
+stripp
+stripping
+striv
+strive
+strives
+striving
+strok
+stroke
+strokes
+strond
+stronds
+strong
+stronger
+strongest
+strongly
+strooke
+strossers
+strove
+strown
+stroy
+struck
+strucken
+struggle
+struggles
+struggling
+strumpet
+strumpeted
+strumpets
+strung
+strut
+struts
+strutted
+strutting
+stubble
+stubborn
+stubbornest
+stubbornly
+stubbornness
+stuck
+studded
+student
+students
+studied
+studies
+studious
+studiously
+studs
+study
+studying
+stuff
+stuffing
+stuffs
+stumble
+stumbled
+stumblest
+stumbling
+stump
+stumps
+stung
+stupefy
+stupid
+stupified
+stuprum
+sturdy
+sty
+styga
+stygian
+styl
+style
+styx
+su
+sub
+subcontracted
+subdu
+subdue
+subdued
+subduements
+subdues
+subduing
+subject
+subjected
+subjection
+subjects
+submerg
+submission
+submissive
+submit
+submits
+submitting
+suborn
+subornation
+suborned
+subscrib
+subscribe
+subscribed
+subscribes
+subscription
+subsequent
+subsidies
+subsidy
+subsist
+subsisting
+substance
+substances
+substantial
+substitute
+substituted
+substitutes
+substitution
+subtile
+subtilly
+subtle
+subtleties
+subtlety
+subtly
+subtractors
+suburbs
+subversion
+subverts
+succedant
+succeed
+succeeded
+succeeders
+succeeding
+succeeds
+success
+successantly
+successes
+successful
+successfully
+succession
+successive
+successively
+successor
+successors
+succour
+succours
+such
+suck
+sucker
+suckers
+sucking
+suckle
+sucks
+sudden
+suddenly
+sue
+sued
+suerly
+sues
+sueth
+suff
+suffer
+sufferance
+sufferances
+suffered
+suffering
+suffers
+suffic
+suffice
+sufficed
+suffices
+sufficeth
+sufficiency
+sufficient
+sufficiently
+sufficing
+sufficit
+suffigance
+suffocate
+suffocating
+suffocation
+suffolk
+suffrage
+suffrages
+sug
+sugar
+sugarsop
+suggest
+suggested
+suggesting
+suggestion
+suggestions
+suggests
+suis
+suit
+suitable
+suited
+suiting
+suitor
+suitors
+suits
+suivez
+sullen
+sullens
+sullied
+sullies
+sully
+sulph
+sulpherous
+sulphur
+sulphurous
+sultan
+sultry
+sum
+sumless
+summ
+summa
+summary
+summer
+summers
+summit
+summon
+summoners
+summons
+sumpter
+sumptuous
+sumptuously
+sums
+sun
+sunbeams
+sunburning
+sunburnt
+sund
+sunday
+sundays
+sunder
+sunders
+sundry
+sung
+sunk
+sunken
+sunny
+sunrising
+suns
+sunset
+sunshine
+sup
+super
+superficial
+superficially
+superfluity
+superfluous
+superfluously
+superflux
+superior
+supernal
+supernatural
+superpraise
+superscript
+superscription
+superserviceable
+superstition
+superstitious
+superstitiously
+supersubtle
+supervise
+supervisor
+supp
+supper
+suppers
+suppertime
+supping
+supplant
+supple
+suppler
+suppliance
+suppliant
+suppliants
+supplicant
+supplication
+supplications
+supplie
+supplied
+supplies
+suppliest
+supply
+supplyant
+supplying
+supplyment
+support
+supportable
+supportance
+supported
+supporter
+supporters
+supporting
+supportor
+suppos
+supposal
+suppose
+supposed
+supposes
+supposest
+supposing
+supposition
+suppress
+suppressed
+suppresseth
+supremacy
+supreme
+sups
+sur
+surance
+surcease
+surd
+sure
+surecard
+surely
+surer
+surest
+sureties
+surety
+surfeit
+surfeited
+surfeiter
+surfeiting
+surfeits
+surge
+surgeon
+surgeons
+surgere
+surgery
+surges
+surly
+surmis
+surmise
+surmised
+surmises
+surmount
+surmounted
+surmounts
+surnam
+surname
+surnamed
+surpasseth
+surpassing
+surplice
+surplus
+surpris
+surprise
+surprised
+surrender
+surrey
+surreys
+survey
+surveyest
+surveying
+surveyor
+surveyors
+surveys
+survive
+survives
+survivor
+susan
+suspect
+suspected
+suspecting
+suspects
+suspend
+suspense
+suspicion
+suspicions
+suspicious
+suspiration
+suspire
+sust
+sustain
+sustaining
+sutler
+sutton
+suum
+swabber
+swaddling
+swag
+swagg
+swagger
+swaggerer
+swaggerers
+swaggering
+swain
+swains
+swallow
+swallowed
+swallowing
+swallows
+swam
+swan
+swans
+sward
+sware
+swarm
+swarming
+swart
+swarth
+swarths
+swarthy
+swashers
+swashing
+swath
+swathing
+swathling
+sway
+swaying
+sways
+swear
+swearer
+swearers
+swearest
+swearing
+swearings
+swears
+sweat
+sweaten
+sweating
+sweats
+sweaty
+sweep
+sweepers
+sweeps
+sweet
+sweeten
+sweetens
+sweeter
+sweetest
+sweetheart
+sweeting
+sweetly
+sweetmeats
+sweetness
+sweets
+swell
+swelling
+swellings
+swells
+swelter
+sweno
+swept
+swerve
+swerver
+swerving
+swift
+swifter
+swiftest
+swiftly
+swiftness
+swill
+swills
+swim
+swimmer
+swimmers
+swimming
+swims
+swine
+swineherds
+swing
+swinge
+swinish
+swinstead
+switches
+swits
+switzers
+swol
+swoll
+swoln
+swoon
+swooned
+swooning
+swoons
+swoop
+swoopstake
+swor
+sword
+sworder
+swords
+swore
+sworn
+swounded
+swounds
+swum
+swung
+sy
+sycamore
+sycorax
+sylla
+syllable
+syllables
+syllogism
+symbols
+sympathise
+sympathiz
+sympathize
+sympathized
+sympathy
+synagogue
+synod
+synods
+syracuse
+syracusian
+syracusians
+syria
+syrups
+t
+ta
+taber
+table
+tabled
+tables
+tablet
+tabor
+taborer
+tabors
+tabourines
+taciturnity
+tack
+tackle
+tackled
+tackles
+tackling
+tacklings
+taddle
+tadpole
+taffeta
+taffety
+tag
+tagrag
+tah
+tail
+tailor
+tailors
+tails
+taint
+tainted
+tainting
+taints
+tainture
+tak
+take
+taken
+taker
+takes
+takest
+taketh
+taking
+tal
+talbot
+talbotites
+talbots
+tale
+talent
+talents
+taleporter
+tales
+talk
+talked
+talker
+talkers
+talkest
+talking
+talks
+tall
+taller
+tallest
+tallies
+tallow
+tally
+talons
+tam
+tambourines
+tame
+tamed
+tamely
+tameness
+tamer
+tames
+taming
+tamora
+tamworth
+tan
+tang
+tangle
+tangled
+tank
+tanlings
+tann
+tanned
+tanner
+tanquam
+tanta
+tantaene
+tap
+tape
+taper
+tapers
+tapestries
+tapestry
+taphouse
+tapp
+tapster
+tapsters
+tar
+tardied
+tardily
+tardiness
+tardy
+tarentum
+targe
+targes
+target
+targets
+tarpeian
+tarquin
+tarquins
+tarr
+tarre
+tarriance
+tarried
+tarries
+tarry
+tarrying
+tart
+tartar
+tartars
+tartly
+tartness
+task
+tasker
+tasking
+tasks
+tassel
+taste
+tasted
+tastes
+tasting
+tatt
+tatter
+tattered
+tatters
+tattle
+tattling
+tattlings
+taught
+taunt
+taunted
+taunting
+tauntingly
+taunts
+taurus
+tavern
+taverns
+tavy
+tawdry
+tawny
+tax
+taxation
+taxations
+taxes
+taxing
+tc
+te
+teach
+teacher
+teachers
+teaches
+teachest
+teacheth
+teaching
+team
+tear
+tearful
+tearing
+tears
+tearsheet
+teat
+tedious
+tediously
+tediousness
+teem
+teeming
+teems
+teen
+teeth
+teipsum
+telamon
+telamonius
+tell
+teller
+telling
+tells
+tellus
+temp
+temper
+temperality
+temperance
+temperate
+temperately
+tempers
+tempest
+tempests
+tempestuous
+temple
+temples
+temporal
+temporary
+temporiz
+temporize
+temporizer
+temps
+tempt
+temptation
+temptations
+tempted
+tempter
+tempters
+tempteth
+tempting
+tempts
+ten
+tenable
+tenant
+tenantius
+tenantless
+tenants
+tench
+tend
+tendance
+tended
+tender
+tendered
+tenderly
+tenderness
+tenders
+tending
+tends
+tenedos
+tenement
+tenements
+tenfold
+tennis
+tenour
+tenours
+tens
+tent
+tented
+tenth
+tenths
+tents
+tenure
+tenures
+tercel
+tereus
+term
+termagant
+termed
+terminations
+termless
+terms
+terra
+terrace
+terram
+terras
+terre
+terrene
+terrestrial
+terrible
+terribly
+territories
+territory
+terror
+terrors
+tertian
+tertio
+test
+testament
+tested
+tester
+testern
+testify
+testimonied
+testimonies
+testimony
+testiness
+testril
+testy
+tetchy
+tether
+tetter
+tevil
+tewksbury
+text
+tgv
+th
+thaes
+thames
+than
+thane
+thanes
+thank
+thanked
+thankful
+thankfully
+thankfulness
+thanking
+thankings
+thankless
+thanks
+thanksgiving
+thasos
+that
+thatch
+thaw
+thawing
+thaws
+the
+theatre
+theban
+thebes
+thee
+theft
+thefts
+thein
+their
+theirs
+theise
+them
+theme
+themes
+themselves
+then
+thence
+thenceforth
+theoric
+there
+thereabout
+thereabouts
+thereafter
+thereat
+thereby
+therefore
+therein
+thereof
+thereon
+thereto
+thereunto
+thereupon
+therewith
+therewithal
+thersites
+these
+theseus
+thessalian
+thessaly
+thetis
+thews
+they
+thick
+thicken
+thickens
+thicker
+thickest
+thicket
+thickskin
+thief
+thievery
+thieves
+thievish
+thigh
+thighs
+thimble
+thimbles
+thin
+thine
+thing
+things
+think
+thinkest
+thinking
+thinkings
+thinks
+thinkst
+thinly
+third
+thirdly
+thirds
+thirst
+thirsting
+thirsts
+thirsty
+thirteen
+thirties
+thirtieth
+thirty
+this
+thisby
+thisne
+thistle
+thistles
+thither
+thitherward
+thoas
+thomas
+thorn
+thorns
+thorny
+thorough
+thoroughly
+those
+thou
+though
+thought
+thoughtful
+thoughts
+thousand
+thousands
+thracian
+thraldom
+thrall
+thralled
+thralls
+thrash
+thrasonical
+thread
+threadbare
+threaden
+threading
+threat
+threaten
+threatening
+threatens
+threatest
+threats
+three
+threefold
+threepence
+threepile
+threes
+threescore
+thresher
+threshold
+threw
+thrice
+thrift
+thriftless
+thrifts
+thrifty
+thrill
+thrilling
+thrills
+thrive
+thrived
+thrivers
+thrives
+thriving
+throat
+throats
+throbbing
+throbs
+throca
+throe
+throes
+thromuldo
+thron
+throne
+throned
+thrones
+throng
+thronging
+throngs
+throstle
+throttle
+through
+throughfare
+throughfares
+throughly
+throughout
+throw
+thrower
+throwest
+throwing
+thrown
+throws
+thrum
+thrumm
+thrush
+thrust
+thrusteth
+thrusting
+thrusts
+thumb
+thumbs
+thump
+thund
+thunder
+thunderbolt
+thunderbolts
+thunderer
+thunders
+thunderstone
+thunderstroke
+thurio
+thursday
+thus
+thwack
+thwart
+thwarted
+thwarting
+thwartings
+thy
+thyme
+thymus
+thyreus
+thyself
+ti
+tib
+tiber
+tiberio
+tibey
+ticed
+tick
+tickl
+tickle
+tickled
+tickles
+tickling
+ticklish
+tiddle
+tide
+tides
+tidings
+tidy
+tie
+tied
+ties
+tiff
+tiger
+tigers
+tight
+tightly
+tike
+til
+tile
+till
+tillage
+tilly
+tilt
+tilter
+tilth
+tilting
+tilts
+tiltyard
+tim
+timandra
+timber
+time
+timeless
+timelier
+timely
+times
+timon
+timor
+timorous
+timorously
+tinct
+tincture
+tinctures
+tinder
+tingling
+tinker
+tinkers
+tinsel
+tiny
+tip
+tipp
+tippling
+tips
+tipsy
+tiptoe
+tir
+tire
+tired
+tires
+tirest
+tiring
+tirra
+tirrits
+tis
+tish
+tisick
+tissue
+titan
+titania
+tithe
+tithed
+tithing
+titinius
+title
+titled
+titleless
+titles
+tittle
+tittles
+titular
+titus
+tn
+to
+toad
+toads
+toadstool
+toast
+toasted
+toasting
+toasts
+toaze
+toby
+tock
+tod
+today
+todpole
+tods
+toe
+toes
+tofore
+toge
+toged
+together
+toil
+toiled
+toiling
+toils
+token
+tokens
+told
+toledo
+tolerable
+toll
+tolling
+tom
+tomb
+tombe
+tombed
+tombless
+tomboys
+tombs
+tomorrow
+tomyris
+ton
+tongs
+tongu
+tongue
+tongued
+tongueless
+tongues
+tonight
+too
+took
+tool
+tools
+tooth
+toothache
+toothpick
+toothpicker
+top
+topas
+topful
+topgallant
+topless
+topmast
+topp
+topping
+topple
+topples
+tops
+topsail
+topsy
+torch
+torchbearer
+torchbearers
+torcher
+torches
+torchlight
+tore
+torment
+tormenta
+tormente
+tormented
+tormenting
+tormentors
+torments
+torn
+torrent
+tortive
+tortoise
+tortur
+torture
+tortured
+torturer
+torturers
+tortures
+torturest
+torturing
+toryne
+toss
+tossed
+tosseth
+tossing
+tot
+total
+totally
+tott
+tottered
+totters
+tou
+touch
+touched
+touches
+toucheth
+touching
+touchstone
+tough
+tougher
+toughness
+touraine
+tournaments
+tours
+tous
+tout
+touze
+tow
+toward
+towardly
+towards
+tower
+towering
+towers
+town
+towns
+township
+townsman
+townsmen
+towton
+toy
+toys
+trace
+traces
+track
+tract
+tractable
+trade
+traded
+traders
+trades
+tradesman
+tradesmen
+trading
+tradition
+traditional
+traduc
+traduced
+traducement
+traffic
+traffickers
+traffics
+tragedian
+tragedians
+tragedies
+tragedy
+tragic
+tragical
+trail
+train
+trained
+training
+trains
+trait
+traitor
+traitorly
+traitorous
+traitorously
+traitors
+traitress
+traject
+trammel
+trample
+trampled
+trampling
+tranc
+trance
+tranio
+tranquil
+tranquillity
+transcendence
+transcends
+transferred
+transfigur
+transfix
+transform
+transformation
+transformations
+transformed
+transgress
+transgresses
+transgressing
+transgression
+translate
+translated
+translates
+translation
+transmigrates
+transmutation
+transparent
+transport
+transportance
+transported
+transporting
+transports
+transpose
+transshape
+trap
+trapp
+trappings
+traps
+trash
+travail
+travails
+travel
+traveler
+traveling
+travell
+travelled
+traveller
+travellers
+travellest
+travelling
+travels
+travers
+traverse
+tray
+treacherous
+treacherously
+treachers
+treachery
+tread
+treading
+treads
+treason
+treasonable
+treasonous
+treasons
+treasure
+treasurer
+treasures
+treasuries
+treasury
+treat
+treaties
+treatise
+treats
+treaty
+treble
+trebled
+trebles
+trebonius
+tree
+trees
+tremble
+trembled
+trembles
+tremblest
+trembling
+tremblingly
+tremor
+trempling
+trench
+trenchant
+trenched
+trencher
+trenchering
+trencherman
+trenchers
+trenches
+trenching
+trent
+tres
+trespass
+trespasses
+tressel
+tresses
+treys
+trial
+trials
+trib
+tribe
+tribes
+tribulation
+tribunal
+tribune
+tribunes
+tributaries
+tributary
+tribute
+tributes
+trice
+trick
+tricking
+trickling
+tricks
+tricksy
+trident
+tried
+trier
+trifle
+trifled
+trifler
+trifles
+trifling
+trigon
+trill
+trim
+trimly
+trimm
+trimmed
+trimming
+trims
+trinculo
+trinculos
+trinkets
+trip
+tripartite
+tripe
+triple
+triplex
+tripoli
+tripolis
+tripp
+tripping
+trippingly
+trips
+tristful
+triton
+triumph
+triumphant
+triumphantly
+triumpher
+triumphers
+triumphing
+triumphs
+triumvir
+triumvirate
+triumvirs
+triumviry
+trivial
+troat
+trod
+trodden
+troiant
+troien
+troilus
+troiluses
+trojan
+trojans
+troll
+tromperies
+trompet
+troop
+trooping
+troops
+trop
+trophies
+trophy
+tropically
+trot
+troth
+trothed
+troths
+trots
+trotting
+trouble
+troubled
+troubler
+troubles
+troublesome
+troublest
+troublous
+trough
+trout
+trouts
+trovato
+trow
+trowel
+trowest
+troy
+troyan
+troyans
+truant
+truce
+truckle
+trudge
+true
+trueborn
+truepenny
+truer
+truest
+truie
+trull
+trulls
+truly
+trump
+trumpery
+trumpet
+trumpeter
+trumpeters
+trumpets
+truncheon
+truncheoners
+trundle
+trunk
+trunks
+trust
+trusted
+truster
+trusters
+trusting
+trusts
+trusty
+truth
+truths
+try
+ts
+tu
+tuae
+tub
+tubal
+tubs
+tuck
+tucket
+tuesday
+tuft
+tufts
+tug
+tugg
+tugging
+tuition
+tullus
+tully
+tumble
+tumbled
+tumbler
+tumbling
+tumult
+tumultuous
+tun
+tune
+tuneable
+tuned
+tuners
+tunes
+tunis
+tuns
+tupping
+turban
+turbans
+turbulence
+turbulent
+turd
+turf
+turfy
+turk
+turkey
+turkeys
+turkish
+turks
+turlygod
+turmoil
+turmoiled
+turn
+turnbull
+turncoat
+turncoats
+turned
+turneth
+turning
+turnips
+turns
+turph
+turpitude
+turquoise
+turret
+turrets
+turtle
+turtles
+turvy
+tuscan
+tush
+tut
+tutor
+tutored
+tutors
+tutto
+twain
+twang
+twangling
+twas
+tway
+tweaks
+tween
+twelfth
+twelve
+twelvemonth
+twentieth
+twenty
+twere
+twice
+twig
+twiggen
+twigs
+twilight
+twill
+twilled
+twin
+twine
+twink
+twinkle
+twinkled
+twinkling
+twinn
+twins
+twire
+twist
+twisted
+twit
+twits
+twitting
+twixt
+two
+twofold
+twopence
+twopences
+twos
+twould
+tyb
+tybalt
+tybalts
+tyburn
+tying
+tyke
+tymbria
+type
+types
+typhon
+tyrannical
+tyrannically
+tyrannize
+tyrannous
+tyranny
+tyrant
+tyrants
+tyrian
+tyrrel
+u
+ubique
+udders
+udge
+uds
+uglier
+ugliest
+ugly
+ulcer
+ulcerous
+ulysses
+um
+umber
+umbra
+umbrage
+umfrevile
+umpire
+umpires
+un
+unable
+unaccommodated
+unaccompanied
+unaccustom
+unaching
+unacquainted
+unactive
+unadvis
+unadvised
+unadvisedly
+unagreeable
+unanel
+unanswer
+unappeas
+unapproved
+unapt
+unaptness
+unarm
+unarmed
+unarms
+unassail
+unassailable
+unattainted
+unattempted
+unattended
+unauspicious
+unauthorized
+unavoided
+unawares
+unback
+unbak
+unbanded
+unbar
+unbarb
+unbashful
+unbated
+unbatter
+unbecoming
+unbefitting
+unbegot
+unbegotten
+unbelieved
+unbend
+unbent
+unbewail
+unbid
+unbidden
+unbind
+unbinds
+unbitted
+unbless
+unblest
+unbloodied
+unblown
+unbodied
+unbolt
+unbolted
+unbonneted
+unbookish
+unborn
+unbosom
+unbound
+unbounded
+unbow
+unbowed
+unbrac
+unbraced
+unbraided
+unbreathed
+unbred
+unbreech
+unbridled
+unbroke
+unbruis
+unbruised
+unbuckle
+unbuckles
+unbuckling
+unbuild
+unburden
+unburdens
+unburied
+unburnt
+unburthen
+unbutton
+unbuttoning
+uncapable
+uncape
+uncase
+uncasing
+uncaught
+uncertain
+uncertainty
+unchain
+unchanging
+uncharge
+uncharged
+uncharitably
+unchary
+unchaste
+uncheck
+unchilded
+uncivil
+unclaim
+unclasp
+uncle
+unclean
+uncleanliness
+uncleanly
+uncleanness
+uncles
+unclew
+unclog
+uncoined
+uncolted
+uncomeliness
+uncomfortable
+uncompassionate
+uncomprehensive
+unconfinable
+unconfirm
+unconfirmed
+unconquer
+unconquered
+unconsidered
+unconstant
+unconstrain
+unconstrained
+uncontemn
+uncontroll
+uncorrected
+uncounted
+uncouple
+uncourteous
+uncouth
+uncover
+uncovered
+uncropped
+uncross
+uncrown
+unction
+unctuous
+uncuckolded
+uncurable
+uncurbable
+uncurbed
+uncurls
+uncurrent
+uncurse
+undaunted
+undeaf
+undeck
+undeeded
+under
+underbearing
+underborne
+undercrest
+underfoot
+undergo
+undergoes
+undergoing
+undergone
+underground
+underhand
+underlings
+undermine
+underminers
+underneath
+underprizing
+underprop
+understand
+understandeth
+understanding
+understandings
+understands
+understood
+underta
+undertake
+undertakeing
+undertaker
+undertakes
+undertaking
+undertakings
+undertook
+undervalu
+undervalued
+underwent
+underwrit
+underwrite
+undescried
+undeserved
+undeserver
+undeservers
+undeserving
+undetermin
+undid
+undinted
+undiscernible
+undiscover
+undishonoured
+undispos
+undistinguishable
+undistinguished
+undividable
+undivided
+undivulged
+undo
+undoes
+undoing
+undone
+undoubted
+undoubtedly
+undream
+undress
+undressed
+undrown
+unduteous
+undutiful
+une
+uneared
+unearned
+unearthly
+uneasines
+uneasy
+uneath
+uneducated
+uneffectual
+unelected
+unequal
+uneven
+unexamin
+unexecuted
+unexpected
+unexperienc
+unexperient
+unexpressive
+unfair
+unfaithful
+unfallible
+unfam
+unfashionable
+unfasten
+unfather
+unfathered
+unfed
+unfeed
+unfeeling
+unfeigned
+unfeignedly
+unfellowed
+unfelt
+unfenced
+unfilial
+unfill
+unfinish
+unfirm
+unfit
+unfitness
+unfix
+unfledg
+unfold
+unfolded
+unfoldeth
+unfolding
+unfolds
+unfool
+unforc
+unforced
+unforfeited
+unfortified
+unfortunate
+unfought
+unfrequented
+unfriended
+unfurnish
+ungain
+ungalled
+ungart
+ungarter
+ungenitur
+ungentle
+ungentleness
+ungently
+ungird
+ungodly
+ungor
+ungot
+ungotten
+ungovern
+ungracious
+ungrateful
+ungravely
+ungrown
+unguarded
+unguem
+unguided
+unhack
+unhair
+unhallow
+unhallowed
+unhand
+unhandled
+unhandsome
+unhang
+unhappied
+unhappily
+unhappiness
+unhappy
+unhardened
+unharm
+unhatch
+unheard
+unhearts
+unheedful
+unheedfully
+unheedy
+unhelpful
+unhidden
+unholy
+unhop
+unhopefullest
+unhorse
+unhospitable
+unhous
+unhoused
+unhurtful
+unicorn
+unicorns
+unimproved
+uninhabitable
+uninhabited
+unintelligent
+union
+unions
+unite
+united
+unity
+universal
+universe
+universities
+university
+unjointed
+unjust
+unjustice
+unjustly
+unkennel
+unkept
+unkind
+unkindest
+unkindly
+unkindness
+unking
+unkinglike
+unkiss
+unknit
+unknowing
+unknown
+unlace
+unlaid
+unlawful
+unlawfully
+unlearn
+unlearned
+unless
+unlesson
+unletter
+unlettered
+unlick
+unlike
+unlikely
+unlimited
+unlineal
+unlink
+unload
+unloaded
+unloading
+unloads
+unlock
+unlocks
+unlook
+unlooked
+unloos
+unloose
+unlov
+unloving
+unluckily
+unlucky
+unmade
+unmake
+unmanly
+unmann
+unmanner
+unmannerd
+unmannerly
+unmarried
+unmask
+unmasked
+unmasking
+unmasks
+unmast
+unmatch
+unmatchable
+unmatched
+unmeasurable
+unmeet
+unmellowed
+unmerciful
+unmeritable
+unmeriting
+unminded
+unmindfull
+unmingled
+unmitigable
+unmitigated
+unmix
+unmoan
+unmov
+unmoved
+unmoving
+unmuffles
+unmuffling
+unmusical
+unmuzzle
+unmuzzled
+unnatural
+unnaturally
+unnaturalness
+unnecessarily
+unnecessary
+unneighbourly
+unnerved
+unnoble
+unnoted
+unnumb
+unnumber
+unowed
+unpack
+unpaid
+unparagon
+unparallel
+unpartial
+unpath
+unpaved
+unpay
+unpeaceable
+unpeg
+unpeople
+unpeopled
+unperfect
+unperfectness
+unpick
+unpin
+unpink
+unpitied
+unpitifully
+unplagu
+unplausive
+unpleas
+unpleasant
+unpleasing
+unpolicied
+unpolish
+unpolished
+unpolluted
+unpossess
+unpossessing
+unpossible
+unpractis
+unpregnant
+unpremeditated
+unprepar
+unprepared
+unpress
+unprevailing
+unprevented
+unpriz
+unprizable
+unprofitable
+unprofited
+unproper
+unproperly
+unproportion
+unprovide
+unprovided
+unprovident
+unprovokes
+unprun
+unpruned
+unpublish
+unpurged
+unpurpos
+unqualitied
+unqueen
+unquestion
+unquestionable
+unquiet
+unquietly
+unquietness
+unraised
+unrak
+unread
+unready
+unreal
+unreasonable
+unreasonably
+unreclaimed
+unreconciled
+unreconciliable
+unrecounted
+unrecuring
+unregarded
+unregist
+unrelenting
+unremovable
+unremovably
+unreprievable
+unresolv
+unrespected
+unrespective
+unrest
+unrestor
+unrestrained
+unreveng
+unreverend
+unreverent
+unrevers
+unrewarded
+unrighteous
+unrightful
+unripe
+unripp
+unrivall
+unroll
+unroof
+unroosted
+unroot
+unrough
+unruly
+unsafe
+unsaluted
+unsanctified
+unsatisfied
+unsavoury
+unsay
+unscalable
+unscann
+unscarr
+unschool
+unscorch
+unscour
+unscratch
+unseal
+unseam
+unsearch
+unseason
+unseasonable
+unseasonably
+unseasoned
+unseconded
+unsecret
+unseduc
+unseeing
+unseeming
+unseemly
+unseen
+unseminar
+unseparable
+unserviceable
+unset
+unsettle
+unsettled
+unsever
+unsex
+unshak
+unshaked
+unshaken
+unshaped
+unshapes
+unsheath
+unsheathe
+unshorn
+unshout
+unshown
+unshrinking
+unshrubb
+unshunn
+unshunnable
+unsifted
+unsightly
+unsinew
+unsisting
+unskilful
+unskilfully
+unskillful
+unslipping
+unsmirched
+unsoil
+unsolicited
+unsorted
+unsought
+unsound
+unsounded
+unspeak
+unspeakable
+unspeaking
+unsphere
+unspoke
+unspoken
+unspotted
+unsquar
+unstable
+unstaid
+unstain
+unstained
+unstanched
+unstate
+unsteadfast
+unstooping
+unstringed
+unstuff
+unsubstantial
+unsuitable
+unsuiting
+unsullied
+unsunn
+unsur
+unsure
+unsuspected
+unsway
+unswayable
+unswayed
+unswear
+unswept
+unsworn
+untainted
+untalk
+untangle
+untangled
+untasted
+untaught
+untempering
+untender
+untent
+untented
+unthankful
+unthankfulness
+unthink
+unthought
+unthread
+unthrift
+unthrifts
+unthrifty
+untie
+untied
+until
+untimber
+untimely
+untir
+untirable
+untired
+untitled
+unto
+untold
+untouch
+untoward
+untowardly
+untraded
+untrain
+untrained
+untread
+untreasur
+untried
+untrimmed
+untrod
+untrodden
+untroubled
+untrue
+untrussing
+untruth
+untruths
+untucked
+untun
+untune
+untuneable
+untutor
+untutored
+untwine
+unurg
+unus
+unused
+unusual
+unvalued
+unvanquish
+unvarnish
+unveil
+unveiling
+unvenerable
+unvex
+unviolated
+unvirtuous
+unvisited
+unvulnerable
+unwares
+unwarily
+unwash
+unwatch
+unwearied
+unwed
+unwedgeable
+unweeded
+unweighed
+unweighing
+unwelcome
+unwept
+unwhipp
+unwholesome
+unwieldy
+unwilling
+unwillingly
+unwillingness
+unwind
+unwiped
+unwise
+unwisely
+unwish
+unwished
+unwitted
+unwittingly
+unwonted
+unwooed
+unworthier
+unworthiest
+unworthily
+unworthiness
+unworthy
+unwrung
+unyok
+unyoke
+up
+upbraid
+upbraided
+upbraidings
+upbraids
+uphoarded
+uphold
+upholdeth
+upholding
+upholds
+uplift
+uplifted
+upmost
+upon
+upper
+uprear
+upreared
+upright
+uprighteously
+uprightness
+uprise
+uprising
+uproar
+uproars
+uprous
+upshoot
+upshot
+upside
+upspring
+upstairs
+upstart
+upturned
+upward
+upwards
+urchin
+urchinfield
+urchins
+urg
+urge
+urged
+urgent
+urges
+urgest
+urging
+urinal
+urinals
+urine
+urn
+urns
+urs
+ursa
+ursley
+ursula
+urswick
+us
+usage
+usance
+usances
+use
+used
+useful
+useless
+user
+uses
+usest
+useth
+usher
+ushered
+ushering
+ushers
+using
+usual
+usually
+usurer
+usurers
+usuries
+usuring
+usurp
+usurpation
+usurped
+usurper
+usurpers
+usurping
+usurpingly
+usurps
+usury
+ut
+utensil
+utensils
+utility
+utmost
+utt
+utter
+utterance
+uttered
+uttereth
+uttering
+utterly
+uttermost
+utters
+uy
+v
+va
+vacancy
+vacant
+vacation
+vade
+vagabond
+vagabonds
+vagram
+vagrom
+vail
+vailed
+vailing
+vaillant
+vain
+vainer
+vainglory
+vainly
+vainness
+vais
+valanc
+valance
+vale
+valence
+valentine
+valentinus
+valentio
+valeria
+valerius
+vales
+valiant
+valiantly
+valiantness
+validity
+vallant
+valley
+valleys
+vally
+valor
+valorous
+valorously
+valour
+valu
+valuation
+value
+valued
+valueless
+values
+valuing
+vane
+vanish
+vanished
+vanishes
+vanishest
+vanishing
+vanities
+vanity
+vanquish
+vanquished
+vanquisher
+vanquishest
+vanquisheth
+vant
+vantage
+vantages
+vantbrace
+vapians
+vapor
+vaporous
+vapour
+vapours
+vara
+variable
+variance
+variation
+variations
+varied
+variest
+variety
+varld
+varlet
+varletry
+varlets
+varletto
+varnish
+varrius
+varro
+vary
+varying
+vassal
+vassalage
+vassals
+vast
+vastidity
+vasty
+vat
+vater
+vaudemont
+vaughan
+vault
+vaultages
+vaulted
+vaulting
+vaults
+vaulty
+vaumond
+vaunt
+vaunted
+vaunter
+vaunting
+vauntingly
+vaunts
+vauvado
+vaux
+vaward
+ve
+veal
+vede
+vehemence
+vehemency
+vehement
+vehor
+veil
+veiled
+veiling
+vein
+veins
+vell
+velure
+velutus
+velvet
+vendible
+venerable
+venereal
+venetia
+venetian
+venetians
+veneys
+venge
+vengeance
+vengeances
+vengeful
+veni
+venial
+venice
+venison
+venit
+venom
+venomous
+venomously
+vent
+ventages
+vented
+ventidius
+ventricle
+vents
+ventur
+venture
+ventured
+ventures
+venturing
+venturous
+venue
+venus
+venuto
+ver
+verb
+verba
+verbal
+verbatim
+verbosity
+verdict
+verdun
+verdure
+vere
+verefore
+verg
+verge
+vergers
+verges
+verier
+veriest
+verified
+verify
+verily
+veritable
+verite
+verities
+verity
+vermilion
+vermin
+vernon
+verona
+veronesa
+versal
+verse
+verses
+versing
+vert
+very
+vesper
+vessel
+vessels
+vestal
+vestments
+vesture
+vetch
+vetches
+veux
+vex
+vexation
+vexations
+vexed
+vexes
+vexest
+vexeth
+vexing
+vi
+via
+vial
+vials
+viand
+viands
+vic
+vicar
+vice
+vicegerent
+vicentio
+viceroy
+viceroys
+vices
+vici
+vicious
+viciousness
+vict
+victims
+victor
+victoress
+victories
+victorious
+victors
+victory
+victual
+victuall
+victuals
+videlicet
+video
+vides
+videsne
+vidi
+vie
+vied
+vienna
+view
+viewest
+vieweth
+viewing
+viewless
+views
+vigil
+vigilance
+vigilant
+vigitant
+vigour
+vii
+viii
+vile
+vilely
+vileness
+viler
+vilest
+vill
+village
+villager
+villagery
+villages
+villain
+villainies
+villainous
+villainously
+villains
+villainy
+villanies
+villanous
+villany
+villiago
+villian
+villianda
+villians
+vinaigre
+vincentio
+vincere
+vindicative
+vine
+vinegar
+vines
+vineyard
+vineyards
+vint
+vintner
+viol
+viola
+violate
+violated
+violates
+violation
+violator
+violence
+violent
+violenta
+violenteth
+violently
+violet
+violets
+viper
+viperous
+vipers
+vir
+virgilia
+virgin
+virginal
+virginalling
+virginity
+virginius
+virgins
+virgo
+virtue
+virtues
+virtuous
+virtuously
+visag
+visage
+visages
+visard
+viscount
+visible
+visibly
+vision
+visions
+visit
+visitation
+visitations
+visited
+visiting
+visitings
+visitor
+visitors
+visits
+visor
+vita
+vitae
+vital
+vitement
+vitruvio
+vitx
+viva
+vivant
+vive
+vixen
+viz
+vizaments
+vizard
+vizarded
+vizards
+vizor
+vlouting
+vocation
+vocativo
+vocatur
+voce
+voic
+voice
+voices
+void
+voided
+voiding
+voke
+volable
+volant
+volivorco
+volley
+volquessen
+volsce
+volsces
+volscian
+volscians
+volt
+voltemand
+volubility
+voluble
+volume
+volumes
+volumnia
+volumnius
+voluntaries
+voluntary
+voluptuously
+voluptuousness
+vomissement
+vomit
+vomits
+vor
+vore
+vortnight
+vot
+votaries
+votarist
+votarists
+votary
+votre
+vouch
+voucher
+vouchers
+vouches
+vouching
+vouchsaf
+vouchsafe
+vouchsafed
+vouchsafes
+vouchsafing
+voudrais
+vour
+vous
+voutsafe
+vow
+vowed
+vowel
+vowels
+vowing
+vows
+vox
+voyage
+voyages
+vraiment
+vulcan
+vulgar
+vulgarly
+vulgars
+vulgo
+vulnerable
+vulture
+vultures
+vurther
+w
+wad
+waddled
+wade
+waded
+wafer
+waft
+waftage
+wafting
+wafts
+wag
+wage
+wager
+wagers
+wages
+wagging
+waggish
+waggling
+waggon
+waggoner
+wagon
+wagoner
+wags
+wagtail
+wail
+wailful
+wailing
+wails
+wain
+wainropes
+wainscot
+waist
+wait
+waited
+waiter
+waiteth
+waiting
+waits
+wak
+wake
+waked
+wakefield
+waken
+wakened
+wakes
+wakest
+waking
+wales
+walk
+walked
+walking
+walks
+wall
+walled
+wallet
+wallets
+wallon
+walloon
+wallow
+walls
+walnut
+walter
+wan
+wand
+wander
+wanderer
+wanderers
+wandering
+wanders
+wands
+wane
+waned
+wanes
+waning
+wann
+want
+wanted
+wanteth
+wanting
+wanton
+wantonly
+wantonness
+wantons
+wants
+wappen
+war
+warble
+warbling
+ward
+warded
+warden
+warder
+warders
+wardrobe
+wardrop
+wards
+ware
+wares
+warily
+warkworth
+warlike
+warm
+warmed
+warmer
+warming
+warms
+warmth
+warn
+warned
+warning
+warnings
+warns
+warp
+warped
+warr
+warrant
+warranted
+warranteth
+warrantise
+warrantize
+warrants
+warranty
+warren
+warrener
+warring
+warrior
+warriors
+wars
+wart
+warwick
+warwickshire
+wary
+was
+wash
+washed
+washer
+washes
+washford
+washing
+wasp
+waspish
+wasps
+wassail
+wassails
+wast
+waste
+wasted
+wasteful
+wasters
+wastes
+wasting
+wat
+watch
+watched
+watchers
+watches
+watchful
+watching
+watchings
+watchman
+watchmen
+watchword
+water
+waterdrops
+watered
+waterfly
+waterford
+watering
+waterish
+waterpots
+waterrugs
+waters
+waterton
+watery
+wav
+wave
+waved
+waver
+waverer
+wavering
+waves
+waving
+waw
+wawl
+wax
+waxed
+waxen
+waxes
+waxing
+way
+waylaid
+waylay
+ways
+wayward
+waywarder
+waywardness
+we
+weak
+weaken
+weakens
+weaker
+weakest
+weakling
+weakly
+weakness
+weal
+wealsmen
+wealth
+wealthiest
+wealthily
+wealthy
+wealtlly
+wean
+weapon
+weapons
+wear
+wearer
+wearers
+wearied
+wearies
+weariest
+wearily
+weariness
+wearing
+wearisome
+wears
+weary
+weasel
+weather
+weathercock
+weathers
+weav
+weave
+weaver
+weavers
+weaves
+weaving
+web
+wed
+wedded
+wedding
+wedg
+wedged
+wedges
+wedlock
+wednesday
+weed
+weeded
+weeder
+weeding
+weeds
+weedy
+week
+weeke
+weekly
+weeks
+ween
+weening
+weep
+weeper
+weeping
+weepingly
+weepings
+weeps
+weet
+weigh
+weighed
+weighing
+weighs
+weight
+weightier
+weightless
+weights
+weighty
+weird
+welcom
+welcome
+welcomer
+welcomes
+welcomest
+welfare
+welkin
+well
+wells
+welsh
+welshman
+welshmen
+welshwomen
+wench
+wenches
+wenching
+wend
+went
+wept
+weraday
+were
+wert
+west
+western
+westminster
+westmoreland
+westward
+wet
+wether
+wetting
+wezand
+whale
+whales
+wharf
+wharfs
+what
+whate
+whatever
+whatsoe
+whatsoever
+whatsome
+whe
+wheat
+wheaten
+wheel
+wheeling
+wheels
+wheer
+wheeson
+wheezing
+whelk
+whelks
+whelm
+whelp
+whelped
+whelps
+when
+whenas
+whence
+whencesoever
+whene
+whenever
+whensoever
+where
+whereabout
+whereas
+whereat
+whereby
+wherefore
+wherein
+whereinto
+whereof
+whereon
+whereout
+whereso
+wheresoe
+wheresoever
+wheresome
+whereto
+whereuntil
+whereunto
+whereupon
+wherever
+wherewith
+wherewithal
+whet
+whether
+whetstone
+whetted
+whew
+whey
+which
+whiff
+whiffler
+while
+whiles
+whilst
+whin
+whine
+whined
+whinid
+whining
+whip
+whipp
+whippers
+whipping
+whips
+whipster
+whipstock
+whipt
+whirl
+whirled
+whirligig
+whirling
+whirlpool
+whirls
+whirlwind
+whirlwinds
+whisp
+whisper
+whispering
+whisperings
+whispers
+whist
+whistle
+whistles
+whistling
+whit
+white
+whitehall
+whitely
+whiteness
+whiter
+whites
+whitest
+whither
+whiting
+whitmore
+whitsters
+whitsun
+whittle
+whizzing
+who
+whoa
+whoe
+whoever
+whole
+wholesom
+wholesome
+wholly
+whom
+whoobub
+whoop
+whooping
+whor
+whore
+whoremaster
+whoremasterly
+whoremonger
+whores
+whoreson
+whoresons
+whoring
+whorish
+whose
+whoso
+whosoe
+whosoever
+why
+wi
+wick
+wicked
+wickednes
+wickedness
+wicket
+wicky
+wid
+wide
+widens
+wider
+widow
+widowed
+widower
+widowhood
+widows
+wield
+wife
+wight
+wights
+wild
+wildcats
+wilder
+wilderness
+wildest
+wildfire
+wildly
+wildness
+wilds
+wiles
+wilful
+wilfull
+wilfully
+wilfulnes
+wilfulness
+will
+willed
+willers
+willeth
+william
+williams
+willing
+willingly
+willingness
+willoughby
+willow
+wills
+wilt
+wiltshire
+wimpled
+win
+wince
+winch
+winchester
+wincot
+wind
+winded
+windgalls
+winding
+windlasses
+windmill
+window
+windows
+windpipe
+winds
+windsor
+windy
+wine
+wing
+winged
+wingfield
+wingham
+wings
+wink
+winking
+winks
+winner
+winners
+winning
+winnow
+winnowed
+winnows
+wins
+winter
+winterly
+winters
+wip
+wipe
+wiped
+wipes
+wiping
+wire
+wires
+wiry
+wisdom
+wisdoms
+wise
+wiselier
+wisely
+wiser
+wisest
+wish
+wished
+wisher
+wishers
+wishes
+wishest
+wisheth
+wishful
+wishing
+wishtly
+wisp
+wist
+wit
+witb
+witch
+witchcraft
+witches
+witching
+with
+withal
+withdraw
+withdrawing
+withdrawn
+withdrew
+wither
+withered
+withering
+withers
+withheld
+withhold
+withholds
+within
+withold
+without
+withstand
+withstanding
+withstood
+witless
+witness
+witnesses
+witnesseth
+witnessing
+wits
+witted
+wittenberg
+wittiest
+wittily
+witting
+wittingly
+wittol
+wittolly
+witty
+wiv
+wive
+wived
+wives
+wiving
+wizard
+wizards
+wo
+woe
+woeful
+woefull
+woefullest
+woes
+woful
+wolf
+wolfish
+wolsey
+wolves
+wolvish
+woman
+womanhood
+womanish
+womankind
+womanly
+womb
+wombs
+womby
+women
+won
+woncot
+wond
+wonder
+wondered
+wonderful
+wonderfully
+wondering
+wonders
+wondrous
+wondrously
+wont
+wonted
+woo
+wood
+woodbine
+woodcock
+woodcocks
+wooden
+woodland
+woodman
+woodmonger
+woods
+woodstock
+woodville
+wooed
+wooer
+wooers
+wooes
+woof
+wooing
+wooingly
+wool
+woollen
+woolly
+woolsack
+woolsey
+woolward
+woos
+wor
+worcester
+word
+words
+wore
+worins
+work
+workers
+working
+workings
+workman
+workmanly
+workmanship
+workmen
+works
+worky
+world
+worldlings
+worldly
+worlds
+worm
+worms
+wormwood
+wormy
+worn
+worried
+worries
+worry
+worrying
+worse
+worser
+worship
+worshipful
+worshipfully
+worshipp
+worshipper
+worshippers
+worshippest
+worships
+worst
+worsted
+wort
+worth
+worthied
+worthier
+worthies
+worthiest
+worthily
+worthiness
+worthless
+worths
+worthy
+worts
+wot
+wots
+wotting
+wouid
+would
+wouldest
+wouldst
+wound
+wounded
+wounding
+woundings
+woundless
+wounds
+wouns
+woven
+wow
+wrack
+wrackful
+wrangle
+wrangler
+wranglers
+wrangling
+wrap
+wrapp
+wraps
+wrapt
+wrath
+wrathful
+wrathfully
+wraths
+wreak
+wreakful
+wreaks
+wreath
+wreathed
+wreathen
+wreaths
+wreck
+wrecked
+wrecks
+wren
+wrench
+wrenching
+wrens
+wrest
+wrested
+wresting
+wrestle
+wrestled
+wrestler
+wrestling
+wretch
+wretchcd
+wretched
+wretchedness
+wretches
+wring
+wringer
+wringing
+wrings
+wrinkle
+wrinkled
+wrinkles
+wrist
+wrists
+writ
+write
+writer
+writers
+writes
+writhled
+writing
+writings
+writs
+written
+wrong
+wronged
+wronger
+wrongful
+wrongfully
+wronging
+wrongly
+wrongs
+wronk
+wrote
+wroth
+wrought
+wrung
+wry
+wrying
+wt
+wul
+wye
+x
+xanthippe
+xi
+xii
+xiii
+xiv
+xv
+y
+yard
+yards
+yare
+yarely
+yarn
+yaughan
+yaw
+yawn
+yawning
+ycleped
+ycliped
+ye
+yea
+yead
+year
+yearly
+yearn
+yearns
+years
+yeas
+yeast
+yedward
+yell
+yellow
+yellowed
+yellowing
+yellowness
+yellows
+yells
+yelping
+yeoman
+yeomen
+yerk
+yes
+yesterday
+yesterdays
+yesternight
+yesty
+yet
+yew
+yicld
+yield
+yielded
+yielder
+yielders
+yielding
+yields
+yok
+yoke
+yoked
+yokefellow
+yokes
+yoketh
+yon
+yond
+yonder
+yongrey
+yore
+yorick
+york
+yorkists
+yorks
+yorkshire
+you
+young
+younger
+youngest
+youngling
+younglings
+youngly
+younker
+your
+yours
+yourself
+yourselves
+youth
+youthful
+youths
+youtli
+zanies
+zany
+zeal
+zealous
+zeals
+zed
+zenelophon
+zenith
+zephyrs
+zir
+zo
+zodiac
+zodiacs
+zone
+zounds
+zwagger
index 92d039a15df894293dc23138870352ac9302820a..bcd91a4d942a5970be9c6c61f04e5ca71ae51638 100644 (file)
@@ -1,9 +1,9 @@
 ! Copyright (C) 2003, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays byte-arrays generic hashtables io assocs
-kernel math namespaces make sequences strings sbufs io.styles
-vectors words prettyprint.config prettyprint.custom
-prettyprint.sections quotations io io.files math.parser effects
+kernel math namespaces make sequences strings sbufs vectors
+words prettyprint.config prettyprint.custom prettyprint.sections
+quotations io io.pathnames io.styles math.parser effects
 classes.tuple math.order classes.tuple.private classes
 combinators colors ;
 IN: prettyprint.backend
index 648c7079677ac0dbbd45972ef30e893ce0ceac55..b1239086d7d74ec238695fe47d2b1c3fd0180a9d 100644 (file)
@@ -3,7 +3,7 @@ kernel math namespaces parser prettyprint prettyprint.config
 prettyprint.sections sequences tools.test vectors words
 effects splitting generic.standard prettyprint.private
 continuations generic compiler.units tools.walker eval
-accessors make ;
+accessors make vocabs.parser ;
 IN: prettyprint.tests
 
 [ "4" ] [ 4 unparse ] unit-test
index 9d5af9e6a5afaeb47499a88cd248460d884d16d2..b3800babe8fdb3a4ca76038b87931d4db07710af 100644 (file)
@@ -2,13 +2,13 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: arrays generic generic.standard assocs io kernel math
 namespaces make sequences strings io.styles io.streams.string
-vectors words prettyprint.backend prettyprint.custom
+vectors words words.symbol prettyprint.backend prettyprint.custom
 prettyprint.sections prettyprint.config sorting splitting
 grouping math.parser vocabs definitions effects classes.builtin
-classes.tuple io.files classes continuations hashtables
+classes.tuple io.pathnames classes continuations hashtables
 classes.mixin classes.union classes.intersection
 classes.predicate classes.singleton combinators quotations sets
-accessors colors parser summary ;
+accessors colors parser summary vocabs.parser ;
 IN: prettyprint
 
 : make-pprint ( obj quot -- block in use )
@@ -357,12 +357,12 @@ M: builtin-class see-class*
     ] when drop ;
 
 M: word see
-    dup see-class
-    dup class? over symbol? not and [
-        nl
-    ] when
-    dup [ class? ] [ symbol? ] bi and
-    [ drop ] [ call-next-method ] if ;
+    [ see-class ]
+    [ [ class? ] [ symbol? not ] bi and [ nl ] when ]
+    [
+        dup [ class? ] [ symbol? ] bi and
+        [ drop ] [ call-next-method ] if
+    ] tri ;
 
 : see-all ( seq -- )
     natural-sort [ nl ] [ see ] interleave ;
diff --git a/basis/qualified/authors.txt b/basis/qualified/authors.txt
deleted file mode 100644 (file)
index f990dd0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Daniel Ehrenberg
diff --git a/basis/qualified/qualified-docs.factor b/basis/qualified/qualified-docs.factor
deleted file mode 100644 (file)
index 828d811..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-USING: help.markup help.syntax ;
-IN: qualified
-
-HELP: QUALIFIED:
-{ $syntax "QUALIFIED: vocab" }
-{ $description "Similar to " { $link POSTPONE: USE: } " but loads vocabulary with prefix." }
-{ $examples { $example
-    "USING: prettyprint qualified ;"
-    "QUALIFIED: math"
-    "1 2 math:+ ." "3"
-} } ;
-
-HELP: QUALIFIED-WITH:
-{ $syntax "QUALIFIED-WITH: vocab word-prefix" }
-{ $description "Works like " { $link POSTPONE: QUALIFIED: } " but uses " { $snippet "word-prefix" } " as prefix." }
-{ $examples { $code
-    "USING: prettyprint qualified ;"
-    "QUALIFIED-WITH: math m"
-    "1 2 m:+ ."
-    "3"
-} } ;
-
-HELP: FROM:
-{ $syntax "FROM: vocab => words ... ;" }
-{ $description "Imports " { $snippet "words" } " from " { $snippet "vocab" } "." }
-{ $examples { $code
-    "FROM: math.parser => bin> hex> ; ! imports only bin> and hex>" } } ;
-
-HELP: EXCLUDE:
-{ $syntax "EXCLUDE: vocab => words ... ;" }
-{ $description "Imports everything from " { $snippet "vocab" } " excluding " { $snippet "words" } "." }
-{ $examples { $code
-    "EXCLUDE: math.parser => bin> hex> ; ! imports everything but bin> and hex>" } } ;
-
-HELP: RENAME:
-{ $syntax "RENAME: word vocab => newname " }
-{ $description "Imports " { $snippet "word" } " from " { $snippet "vocab" } ", but renamed to " { $snippet "newname" } "." }
-{ $examples { $example
-    "USING: prettyprint qualified ;"
-    "RENAME: + math => -"
-    "2 3 - ."
-    "5"
-} } ;
-
-ARTICLE: "qualified" "Qualified word lookup"
-"The " { $vocab-link "qualified" } " vocabulary provides a handful of parsing words which give more control over word lookup than is offered by " { $link POSTPONE: USE: } " and " { $link POSTPONE: USING: } "."
-$nl
-"These words are useful when there is no way to avoid using two vocabularies with identical word names in the same source file."
-{ $subsection POSTPONE: QUALIFIED: }
-{ $subsection POSTPONE: QUALIFIED-WITH: }
-{ $subsection POSTPONE: FROM: }
-{ $subsection POSTPONE: EXCLUDE: }
-{ $subsection POSTPONE: RENAME: } ;
-
-ABOUT: "qualified"
diff --git a/basis/qualified/qualified-tests.factor b/basis/qualified/qualified-tests.factor
deleted file mode 100644 (file)
index 78efec4..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-USING: tools.test qualified eval accessors parser ;
-IN: qualified.tests.foo
-: x 1 ;
-: y 5 ;
-IN: qualified.tests.bar
-: x 2 ;
-: y 4 ;
-IN: qualified.tests.baz
-: x 3 ;
-
-QUALIFIED: qualified.tests.foo
-QUALIFIED: qualified.tests.bar
-[ 1 2 3 ] [ qualified.tests.foo:x qualified.tests.bar:x x ] unit-test
-
-QUALIFIED-WITH: qualified.tests.bar p
-[ 2 ] [ p:x ] unit-test
-
-RENAME: x qualified.tests.baz => y
-[ 3 ] [ y ] unit-test
-
-FROM: qualified.tests.baz => x ;
-[ 3 ] [ x ] unit-test
-[ 3 ] [ y ] unit-test
-
-EXCLUDE: qualified.tests.bar => x ;
-[ 3 ] [ x ] unit-test
-[ 4 ] [ y ] unit-test
-
-[ "USE: qualified IN: qualified.tests FROM: qualified.tests => doesnotexist ;" eval ]
-[ error>> no-word-error? ] must-fail-with
-
-[ "USE: qualified IN: qualified.tests RENAME: doesnotexist qualified.tests => blah" eval ]
-[ error>> no-word-error? ] must-fail-with
diff --git a/basis/qualified/qualified.factor b/basis/qualified/qualified.factor
deleted file mode 100644 (file)
index 2cd64e9..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-! Copyright (C) 2007, 2008 Daniel Ehrenberg.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel sequences assocs hashtables parser lexer
-vocabs words namespaces vocabs.loader sets fry ;
-IN: qualified
-
-: define-qualified ( vocab-name prefix-name -- )
-    [ load-vocab vocab-words ] [ CHAR: : suffix ] bi*
-    '[ [ [ _ ] dip append ] dip ] assoc-map
-    use get push ;
-
-: QUALIFIED:
-    #! Syntax: QUALIFIED: vocab
-    scan dup define-qualified ; parsing
-
-: QUALIFIED-WITH:
-    #! Syntax: QUALIFIED-WITH: vocab prefix
-    scan scan define-qualified ; parsing
-
-: partial-vocab ( words vocab -- assoc )
-    '[ dup _ lookup [ no-word-error ] unless* ]
-    { } map>assoc ;
-
-: FROM:
-    #! Syntax: FROM: vocab => words... ;
-    scan dup load-vocab drop "=>" expect
-    ";" parse-tokens swap partial-vocab use get push ; parsing
-
-: partial-vocab-excluding ( words vocab -- assoc )
-    [ load-vocab vocab-words keys swap diff ] keep partial-vocab ;
-
-: EXCLUDE:
-    #! Syntax: EXCLUDE: vocab => words ... ;
-    scan "=>" expect
-    ";" parse-tokens swap partial-vocab-excluding use get push ; parsing
-
-: RENAME:
-    #! Syntax: RENAME: word vocab => newname
-    scan scan dup load-vocab drop
-    dupd lookup [ ] [ no-word-error ] ?if
-    "=>" expect
-    scan associate use get push ; parsing
-
diff --git a/basis/qualified/summary.txt b/basis/qualified/summary.txt
deleted file mode 100644 (file)
index 94b44c6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Qualified naming for vocabularies
diff --git a/basis/qualified/tags.txt b/basis/qualified/tags.txt
deleted file mode 100644 (file)
index f427429..0000000
+++ /dev/null
@@ -1 +0,0 @@
-extensions
index 5c93606ab5eda41355a9feb93317b736c7f268b4..554ed5c96a8d85d807d070aedc6e5cf74daeafa6 100755 (executable)
@@ -2,7 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien.c-types kernel math namespaces sequences
 io.backend io.binary combinators system vocabs.loader
-summary math.bitwise byte-vectors fry byte-arrays ;
+summary math.bitwise byte-vectors fry byte-arrays
+math.ranges ;
 IN: random
 
 SYMBOL: system-random-generator
@@ -51,6 +52,9 @@ PRIVATE>
         [ length random-integer ] keep nth
     ] if-empty ;
 
+: randomize ( seq -- seq' )
+    dup length 1 (a,b] [ dup random pick exchange ] each ;
+
 : delete-random ( seq -- elt )
     [ length random-integer ] keep [ nth ] 2keep delete-nth ;
 
index 81a2338b8ffb477ddc4e3c89b19affba181c26d2..5f21dad7760c2dd91d153adcc6ca895016df9ab5 100644 (file)
@@ -5,7 +5,7 @@ IN: refs
 
 TUPLE: ref assoc key ;
 
-: >ref< [ key>> ] [ assoc>> ] bi ; inline
+: >ref< ( ref -- key value ) [ key>> ] [ assoc>> ] bi ; inline
 
 : delete-ref ( ref -- ) >ref< delete-at ;
 GENERIC: get-ref ( ref -- obj )
index eec0d309b15e93ac526c7d3a90ba9f1cffbca5ad..4a807fa51bbc0f815282c086e77d136517707b69 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors kernel math math.order symbols 
-words regexp.utils unicode.categories combinators.short-circuit ;
+USING: accessors kernel math math.order words regexp.utils
+unicode.categories combinators.short-circuit ;
 IN: regexp.classes
 
 SINGLETONS: any-char any-char-no-nl
index 4d8f3ddfbc7e29c96a7e20880a9b7d63b88a566d..25509ec798b655c6b5ad311dba3664c81cbaa571 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays assocs combinators io io.streams.string
-kernel math math.parser namespaces qualified sets
-quotations sequences splitting symbols vectors math.order
+kernel math math.parser namespaces sets
+quotations sequences splitting vectors math.order
 unicode.categories strings regexp.backend regexp.utils
 unicode.case words locals regexp.classes ;
 IN: regexp.parser
diff --git a/basis/roman/authors.txt b/basis/roman/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/roman/roman-docs.factor b/basis/roman/roman-docs.factor
new file mode 100644 (file)
index 0000000..4a8197f
--- /dev/null
@@ -0,0 +1,120 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: help.markup help.syntax kernel math ;
+IN: roman
+
+HELP: >roman
+{ $values { "n" "an integer" } { "str" "a string" } }
+{ $description "Converts a number to its lower-case Roman Numeral equivalent." }
+{ $notes "The range for this word is 1-3999, inclusive." }
+{ $examples 
+    { $example "USING: io roman ;"
+               "56 >roman print"
+               "lvi"
+    }
+} ;
+
+HELP: >ROMAN
+{ $values { "n" "an integer" } { "str" "a string" } }
+{ $description "Converts a number to its upper-case Roman numeral equivalent." }
+{ $notes "The range for this word is 1-3999, inclusive." }
+{ $examples 
+    { $example "USING: io roman ;"
+               "56 >ROMAN print"
+               "LVI"
+    }
+} ;
+
+HELP: roman>
+{ $values { "str" "a string" } { "n" "an integer" } }
+{ $description "Converts a Roman numeral to an integer." }
+{ $notes "The range for this word is i-mmmcmxcix, inclusive." }
+{ $examples 
+    { $example "USING: prettyprint roman ;"
+               "\"lvi\" roman> ."
+               "56"
+    }
+} ;
+
+{ >roman >ROMAN roman> } related-words
+
+HELP: roman+
+{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } }
+{ $description "Adds two Roman numerals." }
+{ $examples 
+    { $example "USING: io roman ;"
+               "\"v\" \"v\" roman+ print"
+               "x"
+    }
+} ;
+
+HELP: roman-
+{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } }
+{ $description "Subtracts two Roman numerals." }
+{ $examples 
+    { $example "USING: io roman ;"
+               "\"x\" \"v\" roman- print"
+               "v"
+    }
+} ;
+
+{ roman+ roman- } related-words
+
+HELP: roman*
+{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } }
+{ $description "Multiplies two Roman numerals." }
+{ $examples 
+    { $example "USING: io roman ;"
+        "\"ii\" \"iii\" roman* print"
+        "vi"
+    }
+} ;
+
+HELP: roman/i
+{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } }
+{ $description "Computes the integer division of two Roman numerals." }
+{ $examples 
+    { $example "USING: io roman ;"
+        "\"v\" \"iv\" roman/i print"
+        "i"
+    }
+} ;
+
+HELP: roman/mod
+{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } { "str4" "a string" } }
+{ $description "Computes the quotient and remainder of two Roman numerals." }
+{ $examples 
+    { $example "USING: kernel io roman ;"
+        "\"v\" \"iv\" roman/mod [ print ] bi@"
+        "i\ni"
+    }
+} ;
+
+{ roman* roman/i roman/mod } related-words
+
+HELP: ROMAN:
+{ $description "A parsing word that reads the next token and converts it to an integer." }
+{ $examples 
+    { $example "USING: prettyprint roman ;"
+               "ROMAN: v ."
+               "5"
+    }
+} ;
+
+ARTICLE: "roman" "Roman numerals"
+"The " { $vocab-link "roman" } " vocabulary can convert numbers to and from the Roman numeral system and can perform arithmetic given Roman numerals as input." $nl
+"A parsing word for literal Roman numerals:"
+{ $subsection POSTPONE: ROMAN: }
+"Converting to Roman numerals:"
+{ $subsection >roman }
+{ $subsection >ROMAN }
+"Converting Roman numerals to integers:"
+{ $subsection roman> }
+"Roman numeral arithmetic:"
+{ $subsection roman+ }
+{ $subsection roman- }
+{ $subsection roman* }
+{ $subsection roman/i }
+{ $subsection roman/mod } ;
+
+ABOUT: "roman"
diff --git a/basis/roman/roman-tests.factor b/basis/roman/roman-tests.factor
new file mode 100644 (file)
index 0000000..82084e0
--- /dev/null
@@ -0,0 +1,40 @@
+USING: arrays kernel math roman roman.private sequences tools.test ;
+
+[ "i" ] [ 1 >roman ] unit-test
+[ "ii" ] [ 2 >roman ] unit-test
+[ "iii" ] [ 3 >roman ] unit-test
+[ "iv" ] [ 4 >roman ] unit-test
+[ "v" ] [ 5 >roman ] unit-test
+[ "vi" ] [ 6 >roman ] unit-test
+[ "vii" ] [ 7 >roman ] unit-test
+[ "viii" ] [ 8 >roman ] unit-test
+[ "ix" ] [ 9 >roman ] unit-test
+[ "x" ] [ 10 >roman ] unit-test
+[ "mdclxvi" ] [ 1666 >roman ] unit-test
+[ "mmmcdxliv" ] [ 3444 >roman ] unit-test
+[ "mmmcmxcix" ] [ 3999 >roman ] unit-test
+[ "MMMCMXCIX" ] [ 3999 >ROMAN ] unit-test
+[ 3999 ] [ 3999 >ROMAN roman> ] unit-test
+[ 1 ] [ 1 >roman roman> ] unit-test
+[ 2 ] [ 2 >roman roman> ] unit-test
+[ 3 ] [ 3 >roman roman> ] unit-test
+[ 4 ] [ 4 >roman roman> ] unit-test
+[ 5 ] [ 5 >roman roman> ] unit-test
+[ 6 ] [ 6 >roman roman> ] unit-test
+[ 7 ] [ 7 >roman roman> ] unit-test
+[ 8 ] [ 8 >roman roman> ] unit-test
+[ 9 ] [ 9 >roman roman> ] unit-test
+[ 10 ] [ 10 >roman roman> ] unit-test
+[ 1666 ] [ 1666 >roman roman> ] unit-test
+[ 3444 ] [ 3444 >roman roman> ] unit-test
+[ 3999 ] [ 3999 >roman roman> ] unit-test
+[ 0 >roman ] must-fail
+[ 4000 >roman ] must-fail
+[ "vi" ] [ "iii" "iii"  roman+ ] unit-test
+[ "viii" ] [ "x" "ii"  roman- ] unit-test
+[ "ix" ] [ "iii" "iii"  roman* ] unit-test
+[ "i" ] [ "iii" "ii" roman/i ] unit-test
+[ "i" "ii" ] [ "v" "iii"  roman/mod ] unit-test
+[ "iii" "iii"  roman- ] must-fail
+
+[ 30 ] [ ROMAN: xxx ] unit-test
diff --git a/basis/roman/roman.factor b/basis/roman/roman.factor
new file mode 100644 (file)
index 0000000..866ac92
--- /dev/null
@@ -0,0 +1,78 @@
+! Copyright (C) 2007 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: arrays assocs kernel math math.order math.vectors
+namespaces make quotations sequences splitting.monotonic
+sequences.private strings unicode.case lexer parser ;
+IN: roman
+
+<PRIVATE
+
+: roman-digits ( -- seq )
+    { "m" "cm" "d" "cd" "c" "xc" "l" "xl" "x" "ix" "v" "iv" "i" } ;
+
+: roman-values ( -- seq )
+    { 1000 900 500 400 100 90 50 40 10 9 5 4 1 } ;
+
+ERROR: roman-range-error n ;
+
+: roman-range-check ( n -- )
+    dup 1 3999 between? [ drop ] [ roman-range-error ] if ;
+
+: roman<= ( ch1 ch2 -- ? )
+    [ 1string roman-digits index ] bi@ >= ;
+
+: roman>n ( ch -- n )
+    1string roman-digits index roman-values nth ;
+
+: (>roman) ( n -- )
+    roman-values roman-digits [
+        [ /mod swap ] dip <repetition> concat %
+    ] 2each drop ;
+
+: (roman>) ( seq -- n )
+    dup [ roman>n ] map swap all-eq? [
+        sum
+    ] [
+        first2 swap -
+    ] if ;
+
+PRIVATE>
+
+: >roman ( n -- str )
+    dup roman-range-check [
+        (>roman)
+    ] "" make ;
+
+: >ROMAN ( n -- str ) >roman >upper ;
+
+: roman> ( str -- n )
+    >lower [ roman<= ] monotonic-split [
+        (roman>)
+    ] map sum ;
+
+<PRIVATE
+
+: 2roman> ( str1 str2 -- m n )
+    [ roman> ] bi@ ;
+
+: binary-roman-op ( str1 str2 quot -- str3 )
+    [ 2roman> ] dip call >roman ; inline
+
+PRIVATE>
+
+: roman+ ( str1 str2 -- str3 )
+    [ + ] binary-roman-op ;
+
+: roman- ( str1 str2 -- str3 )
+    [ - ] binary-roman-op ;
+
+: roman* ( str1 str2 -- str3 )
+    [ * ] binary-roman-op ;
+
+: roman/i ( str1 str2 -- str3 )
+    [ /i ] binary-roman-op ;
+
+: roman/mod ( str1 str2 -- str3 str4 )
+    [ /mod ] binary-roman-op [ >roman ] dip ;
+
+: ROMAN: scan roman> parsed ; parsing
diff --git a/basis/roman/summary.txt b/basis/roman/summary.txt
new file mode 100644 (file)
index 0000000..f6d018c
--- /dev/null
@@ -0,0 +1 @@
+Roman numerals library
diff --git a/basis/roman/tags.txt b/basis/roman/tags.txt
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index fe0ce7c1574663add50091d6e97f8d7d29f3c1c6..c20e67d13c2d98d852c8818c79d2618afb58aa36 100644 (file)
@@ -10,6 +10,6 @@ $nl
 
 ABOUT: "search-deques"
 
-HELP: <search-deque> ( assoc deque -- search-deque )
+HELP: <search-deque>
 { $values { "assoc" assoc } { "deque" deque } { "search-deque" search-deque } }
 { $description "Creates a new " { $link search-deque } "." } ;
diff --git a/basis/sequences/complex-components/authors.txt b/basis/sequences/complex-components/authors.txt
new file mode 100644 (file)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/basis/sequences/complex-components/complex-components-docs.factor b/basis/sequences/complex-components/complex-components-docs.factor
new file mode 100644 (file)
index 0000000..386735a
--- /dev/null
@@ -0,0 +1,35 @@
+USING: help.markup help.syntax math multiline
+sequences sequences.complex-components ;
+IN: sequences.complex-components
+
+ARTICLE: "sequences.complex-components" "Complex component virtual sequences"
+"The " { $link complex-components } " class wraps a sequence of " { $link complex } " number values, presenting a sequence of " { $link real } " values made by interleaving the real and imaginary parts of the complex values in the original sequence."
+{ $subsection complex-components }
+{ $subsection <complex-components> } ;
+
+ABOUT: "sequences.complex-components"
+
+HELP: complex-components
+{ $class-description "Sequence wrapper class that transforms a sequence of " { $link complex } " number values into a sequence of " { $link real } " values, interleaving the real and imaginary parts of the complex values in the original sequence." }
+{ $examples { $example <"
+USING: prettyprint sequences arrays sequences.complex-components ;
+{ C{ 1.0 -1.0 } -2.0 C{ 3.0 1.0 } } <complex-components> >array .
+"> "{ 1.0 -1.0 -2.0 0 3.0 1.0 }" } } ;
+
+HELP: <complex-components>
+{ $values { "sequence" sequence } { "complex-components" complex-components } }
+{ $description "Wraps " { $snippet "sequence" } " in a " { $link complex-components } " wrapper." }
+{ $examples
+{ $example <"
+USING: prettyprint sequences arrays
+sequences.complex-components ;
+{ C{ 1.0 -1.0 } -2.0 C{ 3.0 1.0 } } <complex-components> third .
+"> "-2.0" }
+{ $example <"
+USING: prettyprint sequences arrays
+sequences.complex-components ;
+{ C{ 1.0 -1.0 } -2.0 C{ 3.0 1.0 } } <complex-components> fourth .
+"> "0" }
+} ;
+
+{ complex-components <complex-components> } related-words
diff --git a/basis/sequences/complex-components/complex-components-tests.factor b/basis/sequences/complex-components/complex-components-tests.factor
new file mode 100644 (file)
index 0000000..f0c8e92
--- /dev/null
@@ -0,0 +1,16 @@
+USING: sequences.complex-components
+kernel sequences tools.test arrays accessors ;
+IN: sequences.complex-components.tests
+
+: test-array ( -- x )
+    { C{ 1.0 2.0 } 3.0 C{ 5.0 6.0 } } <complex-components> ;
+
+[ 6 ] [ test-array length ] unit-test
+
+[ 1.0 ] [ test-array first  ] unit-test
+[ 2.0 ] [ test-array second ] unit-test
+[ 3.0 ] [ test-array third  ] unit-test
+[ 0   ] [ test-array fourth ] unit-test
+
+[ { 1.0 2.0 3.0 0 5.0 6.0 } ] [ test-array >array ] unit-test
+
diff --git a/basis/sequences/complex-components/complex-components.factor b/basis/sequences/complex-components/complex-components.factor
new file mode 100644 (file)
index 0000000..ae80897
--- /dev/null
@@ -0,0 +1,28 @@
+USING: accessors kernel math math.functions combinators
+sequences sequences.private ;
+IN: sequences.complex-components
+
+TUPLE: complex-components seq ;
+INSTANCE: complex-components sequence
+
+: <complex-components> ( sequence -- complex-components )
+    complex-components boa ; inline
+
+<PRIVATE
+
+: complex-components@ ( n seq -- remainder n' seq' )
+    [ [ 1 bitand ] [ -1 shift ] bi ] [ seq>> ] bi* ; inline
+: complex-component ( remainder complex -- component )
+    swap {
+        { 0 [ real-part ] }
+        { 1 [ imaginary-part ] }
+    } case ;
+
+PRIVATE>
+
+M: complex-components length
+    seq>> length 1 shift ;
+M: complex-components nth-unsafe
+    complex-components@ nth-unsafe complex-component ;
+M: complex-components set-nth-unsafe
+    immutable ;
diff --git a/basis/sequences/complex-components/summary.txt b/basis/sequences/complex-components/summary.txt
new file mode 100644 (file)
index 0000000..af00158
--- /dev/null
@@ -0,0 +1 @@
+Virtual sequence wrapper to convert complex values into real value pairs
diff --git a/basis/sequences/complex-components/tags.txt b/basis/sequences/complex-components/tags.txt
new file mode 100644 (file)
index 0000000..64cdcd9
--- /dev/null
@@ -0,0 +1,2 @@
+sequences
+math
diff --git a/basis/sequences/complex/authors.txt b/basis/sequences/complex/authors.txt
new file mode 100644 (file)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/basis/sequences/complex/complex-docs.factor b/basis/sequences/complex/complex-docs.factor
new file mode 100644 (file)
index 0000000..65dd520
--- /dev/null
@@ -0,0 +1,31 @@
+USING: help.markup help.syntax math multiline
+sequences sequences.complex ;
+IN: sequences.complex
+
+ARTICLE: "sequences.complex" "Complex virtual sequences"
+"The " { $link complex-sequence } " class wraps a sequence of " { $link real } " number values, presenting a sequence of " { $link complex } " values made by treating the underlying sequence as pairs of alternating real and imaginary values."
+{ $subsection complex-sequence }
+{ $subsection <complex-sequence> } ;
+
+ABOUT: "sequences.complex"
+
+HELP: complex-sequence
+{ $class-description "Sequence wrapper class that transforms a sequence of " { $link real } " number values into a sequence of " { $link complex } " values, treating the underlying sequence as pairs of alternating real and imaginary values."  }
+{ $examples { $example <"
+USING: prettyprint
+specialized-arrays.double sequences.complex
+sequences arrays ;
+double-array{ 1.0 -1.0 -2.0 2.0 3.0 0.0 } <complex-sequence> >array .
+"> "{ C{ 1.0 -1.0 } C{ -2.0 2.0 } C{ 3.0 0.0 } }" } } ;
+
+HELP: <complex-sequence>
+{ $values { "sequence" sequence } { "complex-sequence" complex-sequence } }
+{ $description "Wraps " { $snippet "sequence" } " in a " { $link complex-sequence } "." }
+{ $examples { $example <"
+USING: prettyprint
+specialized-arrays.double sequences.complex
+sequences arrays ;
+double-array{ 1.0 -1.0 -2.0 2.0 3.0 0.0 } <complex-sequence> second .
+"> "C{ -2.0 2.0 }" } } ;
+
+{ complex-sequence <complex-sequence> } related-words
diff --git a/basis/sequences/complex/complex-tests.factor b/basis/sequences/complex/complex-tests.factor
new file mode 100644 (file)
index 0000000..5861bc8
--- /dev/null
@@ -0,0 +1,26 @@
+USING: specialized-arrays.float sequences.complex
+kernel sequences tools.test arrays accessors ;
+IN: sequences.complex.tests
+
+: test-array ( -- x )
+    float-array{ 1.0 2.0 3.0 4.0 } clone <complex-sequence> ;
+: odd-length-test-array ( -- x )
+    float-array{ 1.0 2.0 3.0 4.0 5.0 } clone <complex-sequence> ;
+
+[ 2 ] [ test-array length ] unit-test
+[ 2 ] [ odd-length-test-array length ] unit-test
+
+[ C{ 1.0 2.0 } ] [ test-array first ] unit-test
+[ C{ 3.0 4.0 } ] [ test-array second ] unit-test
+
+[ { C{ 1.0 2.0 } C{ 3.0 4.0 } } ]
+[ test-array >array ] unit-test
+
+[ float-array{ 1.0 2.0 5.0 6.0 } ]
+[ test-array [ C{ 5.0 6.0 } 1 rot set-nth ] [ seq>> ] bi ]
+unit-test
+
+[ float-array{ 7.0 0.0 3.0 4.0 } ]
+[ test-array [ 7.0 0 rot set-nth ] [ seq>> ] bi ]
+unit-test
+
diff --git a/basis/sequences/complex/complex.factor b/basis/sequences/complex/complex.factor
new file mode 100644 (file)
index 0000000..93f9727
--- /dev/null
@@ -0,0 +1,25 @@
+USING: accessors kernel math math.functions
+sequences sequences.private ;
+IN: sequences.complex
+
+TUPLE: complex-sequence seq ;
+INSTANCE: complex-sequence sequence
+
+: <complex-sequence> ( sequence -- complex-sequence )
+    complex-sequence boa ; inline
+
+<PRIVATE
+
+: complex@ ( n seq -- n' seq' )
+    [ 1 shift ] [ seq>> ] bi* ; inline
+
+PRIVATE>
+
+M: complex-sequence length
+    seq>> length -1 shift ;
+M: complex-sequence nth-unsafe
+    complex@ [ nth-unsafe ] [ [ 1+ ] dip nth-unsafe ] 2bi rect> ;
+M: complex-sequence set-nth-unsafe
+    complex@
+    [ [ real-part      ] [    ] [ ] tri* set-nth-unsafe ]
+    [ [ imaginary-part ] [ 1+ ] [ ] tri* set-nth-unsafe ] 3bi ;
diff --git a/basis/sequences/complex/summary.txt b/basis/sequences/complex/summary.txt
new file mode 100644 (file)
index 0000000..d94c4ba
--- /dev/null
@@ -0,0 +1 @@
+Virtual sequence wrapper to convert real pairs into complex values
diff --git a/basis/sequences/complex/tags.txt b/basis/sequences/complex/tags.txt
new file mode 100644 (file)
index 0000000..64cdcd9
--- /dev/null
@@ -0,0 +1,2 @@
+sequences
+math
index f990dd0ed29ff1ada6887e18c53cbca2d40a2481..a07c427c988fa3d03d3581141483dfe092cdf39b 100644 (file)
@@ -1 +1,2 @@
 Daniel Ehrenberg
+Doug Coleman
index 522b5ecdf95a5f60472ba3773b327d4f8a0ee98d..2d3260f4279154a8cddb834b99efd2076a9bcad0 100644 (file)
@@ -24,3 +24,18 @@ IN: sequences.deep.tests
 [ "foo" ] [ "foo" [ string? ] deep-find ] unit-test
 
 [ { { 1 2 } 1 2 } ] [ [ { 1 2 } [ , ] deep-each ] { } make ] unit-test
+
+[ t ]
+[ { { 1 2 3 } 4 } { { { 1 { { 1 2 3 } 4 } } } 2 } deep-member? ] unit-test
+
+[ t ]
+[ { { 1 2 3 } 4 } { { { 1 2 3 } 4 } 2 } deep-member? ] unit-test
+
+[ f ]
+[ { 1 2 3 4 } { 1 2 3 { 4 } } deep-subseq? ] unit-test
+
+[ t ]
+[ { 1 2 3 4 } { 1 2 3 4 } deep-subseq? ] unit-test
+
+[ t ]
+[ { 1 2 3 4 } { { 1 2 3 4 } } deep-subseq? ] unit-test
index db572681a16c72f56d9721fbf3dc06aa5bf7a4c3..244040d60ac316a7e523ab411ed3b18ab9b7dfeb 100644 (file)
@@ -1,6 +1,6 @@
-! Copyright (C) 2007 Daniel Ehrenberg
+! Copyright (C) 2007, 2008 Daniel Ehrenberg, Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: sequences kernel strings math ;
+USING: sequences kernel strings math fry ;
 IN: sequences.deep
 
 ! All traversal goes in postorder
@@ -38,6 +38,16 @@ M: object branch? drop f ;
 : deep-all? ( obj quot -- ? )
     [ not ] compose deep-contains? not ; inline
 
+: deep-member? ( obj seq -- ? )
+    swap '[
+        _ swap dup branch? [ member? ] [ 2drop f ] if
+    ] deep-find >boolean ;
+
+: deep-subseq? ( subseq seq -- ? )
+    swap '[
+        _ swap dup branch? [ subseq? ] [ 2drop f ] if
+    ] deep-find >boolean ;
+
 : deep-change-each ( obj quot: ( elt -- elt' ) -- )
     over branch? [
         [ [ call ] keep over [ deep-change-each ] dip ] curry change-each
index a0a441ab50c63e4ff1e09818997e586c1dd1dfa0..19b406cc5878b142b788ccb2701df62b1aa1f668 100644 (file)
@@ -3,7 +3,8 @@ IN: sequences.next
 
 <PRIVATE
 
-: iterate-seq [ dup length swap ] dip ; inline
+: iterate-seq ( seq quot -- i seq quot )
+    [ [ length ] keep ] dip ; inline
 
 : (map-next) ( i seq quot -- )
     ! this uses O(n) more bounds checks than is really necessary
index f062548482edb8f5d5572a1936e6de05cd6e4b78..3ec1e96c7264d6cce43df3f934cc3397d9602479 100644 (file)
@@ -70,9 +70,10 @@ M: id equal? over id? [ [ obj>> ] bi@ eq? ] [ 2drop f ] if ;
     } cond ;
 
 : serialize-shared ( obj quot -- )
-    >r dup object-id
-    [ CHAR: o write1 serialize-cell drop ]
-    r> if* ; inline
+    [
+        dup object-id
+        [ CHAR: o write1 serialize-cell drop ]
+    ] dip if* ; inline
 
 M: f (serialize) ( obj -- )
     drop CHAR: n write1 ;
@@ -256,7 +257,7 @@ SYMBOL: deserialized
     [ ] tri ;
 
 : copy-seq-to-tuple ( seq tuple -- )
-    >r dup length r> [ set-array-nth ] curry 2each ;
+    [ dup length ] dip [ set-array-nth ] curry 2each ;
 
 : deserialize-tuple ( -- array )
     #! Ugly because we have to intern the tuple before reading
index 7de22e9af9a3ccbd8ded2a29099c0bc30d3a2d46..f9864044046e3f7819328a5b598e834420fd21ea 100644 (file)
@@ -4,7 +4,7 @@ USING: combinators kernel prettyprint io io.timeouts sequences
 namespaces io.sockets io.sockets.secure continuations calendar
 io.encodings.ascii io.streams.duplex destructors locals
 concurrency.promises threads accessors smtp.private
-io.unix.sockets.secure.debug ;
+io.sockets.secure.unix.debug ;
 IN: smtp.server
 
 ! Mock SMTP server for testing purposes.
index 83b9287043fbf9882aba604f173037af74b9254c..8e344116040edd5b11e1d5d4eb97f5483784d221 100644 (file)
@@ -25,7 +25,7 @@ HELP: no-auth
 HELP: plain-auth
 { $class-description "If the " { $link smtp-auth } " variable is set to this value, plain authentication will be performed, with the username and password stored in the " { $slot "username" } " and " { $slot "password" } " slots of the tuple sent to the server as plain-text." } ;
 
-HELP: <plain-auth> ( username password -- plain-auth )
+HELP: <plain-auth>
 { $values { "username" string } { "password" string } { "plain-auth" plain-auth } }
 { $description "Creates a new " { $link plain-auth } " instance." } ;
 
index f689ad08586627d403e4149a9646e8499ee422dd..0f16863a79fec3944961a027d635ccf05c55bd7d 100644 (file)
@@ -102,7 +102,7 @@ M: message-contains-dot summary ( obj -- string )
 
 LOG: smtp-response DEBUG
 
-: multiline? ( response -- boolean )
+: multiline? ( response -- ? )
     3 swap ?nth CHAR: - = ;
 
 : (receive-response) ( -- )
diff --git a/basis/soundex/author.txt b/basis/soundex/author.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/basis/soundex/soundex-tests.factor b/basis/soundex/soundex-tests.factor
new file mode 100644 (file)
index 0000000..f4bd18e
--- /dev/null
@@ -0,0 +1,5 @@
+IN: soundex.tests
+USING: soundex tools.test ;
+
+[ "S162" ] [ "supercalifrag" soundex ] unit-test
+[ "M000" ] [ "M" soundex ] unit-test
diff --git a/basis/soundex/soundex.factor b/basis/soundex/soundex.factor
new file mode 100644 (file)
index 0000000..416ec4a
--- /dev/null
@@ -0,0 +1,32 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: sequences grouping assocs kernel ascii unicode.case tr ;
+IN: soundex
+
+TR: soundex-tr
+    ch>upper
+    "AEHIOUWYBFPVCGJKQSXZDTLMNR"
+    "00000000111122222222334556" ;
+
+: remove-duplicates ( seq -- seq' )
+    #! Remove _consecutive_ duplicates (unlike prune which removes
+    #! all duplicates).
+    [ 2 <clumps> [ = not ] assoc-filter values ] [ first ] bi prefix ;
+
+: first>upper ( seq -- seq' ) 1 head >upper ;
+: trim-first ( seq -- seq' ) dup first [ = ] curry trim-left ;
+: remove-zeroes ( seq -- seq' ) CHAR: 0 swap remove ;
+: remove-non-alpha ( seq -- seq' ) [ alpha? ] filter ;
+: pad-4 ( first seq -- seq' ) "000" 3append 4 head ;
+
+: soundex ( string -- soundex )
+    remove-non-alpha [ f ] [
+        [ first>upper ]
+        [
+            soundex-tr
+            [ "" ] [ trim-first ] if-empty
+            [ "" ] [ remove-duplicates ] if-empty
+            remove-zeroes
+        ] bi
+        pad-4
+    ] if-empty ;
diff --git a/basis/soundex/summary.txt b/basis/soundex/summary.txt
new file mode 100644 (file)
index 0000000..95a271d
--- /dev/null
@@ -0,0 +1 @@
+Soundex is a phonetic algorithm for indexing names by sound
index 8ba5354dc40c79f17783dc0493d630029de12f58..6069a4cb4a8eb425bb82620cc5deadd3dbd5e8f2 100644 (file)
@@ -18,7 +18,7 @@ WHERE
 
 TUPLE: V { underlying A } { length array-capacity } ;
 
-: <V> <A> execute 0 V boa ; inline
+: <V> ( capacity -- vector ) <A> execute 0 V boa ; inline
 
 M: V like
     drop dup V instance? [
@@ -31,7 +31,7 @@ M: A new-resizable drop <V> execute ;
 
 M: V equal? over V instance? [ sequence= ] [ 2drop f ] if ;
 
-: >V V new clone-like ; inline
+: >V ( seq -- vector ) V new clone-like ; inline
 
 M: V pprint-delims drop V{ \ } ;
 
diff --git a/basis/splitting/monotonic/authors.txt b/basis/splitting/monotonic/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/basis/splitting/monotonic/monotonic-tests.factor b/basis/splitting/monotonic/monotonic-tests.factor
new file mode 100644 (file)
index 0000000..ab4c48b
--- /dev/null
@@ -0,0 +1,8 @@
+IN: splitting.monotonic
+USING: tools.test math arrays kernel sequences ;
+
+[ { { 1 } { -1 5 } { 2 4 } } ]
+[ { 1 -1 5 2 4 } [ < ] monotonic-split [ >array ] map ] unit-test
+[ { { 1 1 1 1 } { 2 2 } { 3 } { 4 } { 5 } { 6 6 6 } } ]
+[ { 1 1 1 1 2 2 3 4 5 6 6 6 } [ = ] monotonic-split [ >array ] map ] unit-test
+
diff --git a/basis/splitting/monotonic/monotonic.factor b/basis/splitting/monotonic/monotonic.factor
new file mode 100644 (file)
index 0000000..5bc7a51
--- /dev/null
@@ -0,0 +1,17 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: make namespaces sequences kernel fry ;
+IN: splitting.monotonic
+
+: ,, ( obj -- ) building get peek push ;
+: v, ( -- ) V{ } clone , ;
+: ,v ( -- ) building get dup peek empty? [ dup pop* ] when drop ;
+
+: (monotonic-split) ( seq quot -- newseq )
+    [
+        [ dup unclip suffix ] dip
+        v, '[ over ,, @ [ v, ] unless ] 2each ,v
+    ] { } make ; inline
+
+: monotonic-split ( seq quot -- newseq )
+    over empty? [ 2drop { } ] [ (monotonic-split) ] if ; inline
diff --git a/basis/splitting/monotonic/summary.txt b/basis/splitting/monotonic/summary.txt
new file mode 100644 (file)
index 0000000..6782bd0
--- /dev/null
@@ -0,0 +1 @@
+Split a sequence into monotonically-increasing subsequences
diff --git a/basis/splitting/monotonic/tags.txt b/basis/splitting/monotonic/tags.txt
new file mode 100644 (file)
index 0000000..d4c0877
--- /dev/null
@@ -0,0 +1,2 @@
+algorithms
+sequences
index a38e9ea784201229e8a1dab3e1a1427c482b9a13..f52632040d23725697604b0d8186b764fcb0bde0 100644 (file)
@@ -61,12 +61,6 @@ TUPLE: alien-callback-params < alien-node-params quot xt ;
     ! Quotation which coerces return value to required type
     return-prep-quot infer-quot-here ;
 
-! Callbacks are registered in a global hashtable. If you clear
-! this hashtable, they will all be blown away by code GC, beware
-SYMBOL: callbacks
-
-[ H{ } clone callbacks set-global ] "alien.compiler" add-init-hook
-
 : register-callback ( word -- ) callbacks get conjoin ;
 
 : callback-bottom ( params -- )
index 147749864d23d2daf5ef41923fb8ec8f72fb34b6..9516b8cd7d4c22a12d25c1c7935ca78dce1673cc 100644 (file)
@@ -145,7 +145,6 @@ M: object apply-object push-literal ;
 
 : effect-required? ( word -- ? )
     {
-        { [ dup inline? ] [ drop f ] }
         { [ dup deferred? ] [ drop f ] }
         { [ dup crossref? not ] [ drop f ] }
         [ def>> [ word? ] contains? ]
index d4a074031dc319a92f996dd2c0e83977d2c87f36..c3b9797a363a42095dd052aeddb3b03ea121a434 100644 (file)
@@ -28,22 +28,10 @@ $nl
 } ;
 
 HELP: too-many->r
-{ $error-description "Thrown if inference notices a quotation pushing elements on the retain stack without popping them at the end." }
-{ $examples
-    { $code
-        ": too-many->r-example ( a b -- )"
-        "    >r 3 + >r ;"
-    }
-} ;
+{ $error-description "Thrown if inference notices a quotation pushing elements on the retain stack without popping them at the end." } ;
 
 HELP: too-many-r>
-{ $error-description "Thrown if inference notices a quotation popping elements from the return stack it did not place there." }
-{ $examples
-    { $code
-        ": too-many-r>-example ( a b -- )"
-        "    r> 3 + >r ;"
-    }
-} ;
+{ $error-description "Thrown if inference notices a quotation popping elements from the return stack it did not place there." } ;
 
 HELP: missing-effect
 { $error-description "Thrown when inference encounters a word lacking a stack effect declaration. Stack effects of words must be declared, with the exception of words which only push literals on the stack." }
index bce42f1456e325546fb781dec7333198dda1749e..3836fadeb72d6bbbeb44988a0e0a233342ca3b26 100644 (file)
@@ -174,8 +174,6 @@ M: object infer-call*
 
 : infer-special ( word -- )
     {
-        { \ >r [ 1 infer->r ] }
-        { \ r> [ 1 infer-r> ] }
         { \ declare [ infer-declare ] }
         { \ call [ infer-call ] }
         { \ (call) [ infer-call ] }
@@ -194,6 +192,7 @@ M: object infer-call*
         { \ <tuple-boa> [ infer-<tuple-boa> ] }
         { \ (throw) [ infer-(throw) ] }
         { \ exit [ infer-exit ] }
+        { \ load-local [ 1 infer->r ] }
         { \ load-locals [ infer-load-locals ] }
         { \ get-local [ infer-get-local ] }
         { \ drop-locals [ infer-drop-locals ] }
@@ -213,9 +212,9 @@ M: object infer-call*
     "local-word-def" word-prop infer-quot-here ;
 
 {
-    >r r> declare call (call) slip 2slip 3slip dip 2dip 3dip
+    declare call (call) slip 2slip 3slip dip 2dip 3dip
     curry compose execute (execute) if dispatch <tuple-boa>
-    (throw) load-locals get-local drop-locals do-primitive
+    (throw) load-local load-locals get-local drop-locals do-primitive
     alien-invoke alien-indirect alien-callback
 } [ t "special" set-word-prop ] each
 
index defcde53f034b0e32944f4151f85a17c4228d8c9..7b2a6d2d839dadd1d52c17e932f23528e489f601 100644 (file)
@@ -6,7 +6,7 @@ quotations effects tools.test continuations generic.standard
 sorting assocs definitions prettyprint io inspector
 classes.tuple classes.union classes.predicate debugger
 threads.private io.streams.string io.timeouts io.thread
-sequences.private destructors combinators eval ;
+sequences.private destructors combinators eval locals.backend ;
 IN: stack-checker.tests
 
 \ infer. must-infer
@@ -218,7 +218,7 @@ DEFER: do-crap*
 MATH: xyz ( a b -- c )
 M: fixnum xyz 2array ;
 M: float xyz
-    [ 3 ] bi@ swapd >r 2array swap r> 2array swap ;
+    [ 3 ] bi@ swapd [ 2array swap ] dip 2array swap ;
 
 [ [ xyz ] infer ] [ inference-error? ] must-fail-with
 
@@ -320,7 +320,7 @@ DEFER: bar
 : bad-bin ( a b -- ) 5 [ 5 bad-bin bad-bin 5 ] [ 2drop ] if ;
 [ [ bad-bin ] infer ] must-fail
 
-[ [ r> ] infer ] [ inference-error? ] must-fail-with
+[ [ 1 drop-locals ] infer ] [ inference-error? ] must-fail-with
 
 ! Regression
 [ [ cleave ] infer ] [ inference-error? ] must-fail-with
@@ -480,7 +480,7 @@ DEFER: an-inline-word
     dup [ normal-word-2 ] when ;
 
 : an-inline-word ( obj quot -- )
-    >r normal-word r> call ; inline
+    [ normal-word ] dip call ; inline
 
 { 1 1 } [ [ 3 * ] an-inline-word ] must-infer-as
 
@@ -502,8 +502,8 @@ ERROR: custom-error ;
     [ custom-error inference-error ] infer
 ] unit-test
 
-[ T{ effect f 1 1 t } ] [
-    [ dup >r 3 throw r> ] infer
+[ T{ effect f 1 2 t } ] [
+    [ dup [ 3 throw ] dip ] infer
 ] unit-test
 
 ! This was a false trigger of the undecidable quotation
@@ -511,7 +511,7 @@ ERROR: custom-error ;
 { 2 1 } [ find-last-sep ] must-infer-as
 
 ! Regression
-: missing->r-check >r ;
+: missing->r-check 1 load-locals ;
 
 [ [ missing->r-check ] infer ] must-fail
 
@@ -548,7 +548,7 @@ M: object inference-invalidation-d inference-invalidation-c 2drop ;
 
 [ [ inference-invalidation-d ] infer ] must-fail
 
-: bad-recursion-3 ( -- ) dup [ >r bad-recursion-3 r> ] when ; inline
+: bad-recursion-3 ( -- ) dup [ [ bad-recursion-3 ] dip ] when ; inline
 [ [ bad-recursion-3 ] infer ] must-fail
 
 : bad-recursion-4 ( -- ) 4 [ dup call roll ] times ; inline
@@ -572,7 +572,7 @@ M: object inference-invalidation-d inference-invalidation-c 2drop ;
 
 DEFER: eee'
 : ddd' ( ? -- ) [ f eee' ] when ; inline recursive
-: eee' ( ? -- ) >r swap [ ] r> ddd' call ; inline recursive
+: eee' ( ? -- ) [ swap [ ] ] dip ddd' call ; inline recursive
 
 [ [ eee' ] infer ] [ inference-error? ] must-fail-with
 
diff --git a/basis/symbols/authors.txt b/basis/symbols/authors.txt
deleted file mode 100644 (file)
index f372b57..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Slava Pestov
-Doug Coleman
diff --git a/basis/symbols/summary.txt b/basis/symbols/summary.txt
deleted file mode 100644 (file)
index 3093468..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Utility for defining multiple symbols at a time
diff --git a/basis/symbols/symbols-docs.factor b/basis/symbols/symbols-docs.factor
deleted file mode 100644 (file)
index 9f79b71..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-USING: help.markup help.syntax ;
-IN: symbols
-
-HELP: SYMBOLS:
-{ $syntax "SYMBOLS: words... ;" }
-{ $values { "words" "a sequence of new words to define" } }
-{ $description "Creates a new word for every token until the ';'." }
-{ $examples { $example "USING: prettyprint symbols ;" "IN: scratchpad" "SYMBOLS: foo bar baz ;\nfoo . bar . baz ." "foo\nbar\nbaz" } }
-{ $see-also POSTPONE: SYMBOL: } ;
diff --git a/basis/symbols/symbols-tests.factor b/basis/symbols/symbols-tests.factor
deleted file mode 100644 (file)
index 274c4de..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-USING: kernel symbols tools.test parser generic words accessors
-eval ;
-IN: symbols.tests
-
-[ ] [ SYMBOLS: a b c ; ] unit-test
-[ a ] [ a ] unit-test
-[ b ] [ b ] unit-test
-[ c ] [ c ] unit-test
-
-DEFER: blah
-
-[ ] [ "IN: symbols.tests GENERIC: blah" eval ] unit-test
-[ ] [ "IN: symbols.tests USE: symbols SYMBOLS: blah ;" eval ] unit-test
-
-[ f ] [ \ blah generic? ] unit-test
-[ t ] [ \ blah symbol? ] unit-test
-
-[ "IN: symbols.tests USE: symbols SINGLETONS: blah blah blah ;" eval ]
-[ error>> error>> def>> \ blah eq? ]
-must-fail-with
-
diff --git a/basis/symbols/symbols.factor b/basis/symbols/symbols.factor
deleted file mode 100644 (file)
index 6cf8eac..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: parser lexer sequences words kernel classes.singleton
-classes.parser ;
-IN: symbols
-
-: SYMBOLS:
-    ";" parse-tokens
-    [ create-in dup reset-generic define-symbol ] each ;
-    parsing
-
-: SINGLETONS:
-    ";" parse-tokens
-    [ create-class-in define-singleton-class ] each ;
-    parsing
diff --git a/basis/symbols/tags.txt b/basis/symbols/tags.txt
deleted file mode 100644 (file)
index f427429..0000000
+++ /dev/null
@@ -1 +0,0 @@
-extensions
index 5bf917f9062ae77a9ca01a3951702cce7fbf8739..e7e2e552593471d6de560259e4ebd1b51ea95c82 100644 (file)
@@ -1,5 +1,6 @@
-USING: math kernel sequences io.files tools.crossref tools.test
-parser namespaces source-files generic definitions ;
+USING: math kernel sequences io.files io.pathnames
+tools.crossref tools.test parser namespaces source-files generic
+definitions ;
 IN: tools.crossref.tests
 
 GENERIC: foo
index ee8615ac5a8119cd99a8c8b6ed816122d52d934d..636e44062e4a4b0c567d6f0677b18cceeed4a037 100644 (file)
@@ -4,9 +4,11 @@ USING: namespaces make continuations.private kernel.private init
 assocs kernel vocabs words sequences memory io system arrays
 continuations math definitions mirrors splitting parser classes
 summary layouts vocabs.loader prettyprint.config prettyprint
-debugger io.streams.c io.files io.backend quotations io.launcher
-words.private tools.deploy.config tools.deploy.config.editor
-bootstrap.image io.encodings.utf8 destructors accessors ;
+debugger io.streams.c io.files io.files.temp io.pathnames
+io.directories io.directories.hierarchy io.backend quotations
+io.launcher words.private tools.deploy.config
+tools.deploy.config.editor bootstrap.image io.encodings.utf8
+destructors accessors ;
 IN: tools.deploy.backend
 
 : copy-vm ( executable bundle-name extension -- vm )
index 2b5788adfcf722fd25761d0cb2c63a3cb0c3a201..ac89e3290bf024c4e32f3e9cc728674890e68ef3 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: assocs io.files kernel parser prettyprint sequences
+USING: assocs io.pathnames kernel parser prettyprint sequences
 splitting tools.deploy.config tools.vocabs vocabs.loader ;
 IN: tools.deploy.config.editor
 
index 71dc746fb51e938d68495e8ca8a2366f67d770b3..e15ba9b90e8a6bedafbf2778260ff7d43e64e347 100644 (file)
@@ -1,8 +1,9 @@
 IN: tools.deploy.tests\r
-USING: tools.test system io.files kernel tools.deploy.config\r
+USING: tools.test system io.pathnames io.files io.files.info\r
+io.files.temp kernel tools.deploy.config\r
 tools.deploy.config.editor tools.deploy.backend math sequences\r
 io.launcher arrays namespaces continuations layouts accessors\r
-io.encodings.ascii urls math.parser ;\r
+io.encodings.ascii urls math.parser io.directories ;\r
 \r
 : shake-and-bake ( vocab -- )\r
     [ "test.image" temp-file delete-file ] ignore-errors\r
@@ -107,3 +108,8 @@ M: quit-responder call-responder*
     "tools.deploy.test.8" shake-and-bake\r
     run-temp-image\r
 ] unit-test\r
+\r
+[ ] [\r
+    "tools.deploy.test.9" shake-and-bake\r
+    run-temp-image\r
+] unit-test\r
index 1f0e4824414f756134eb1cae2549a0a276c6ff10..1dcc6fe4c18b45a6177397cb9ed01e0ebedf22ca 100644 (file)
@@ -1,10 +1,11 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io io.files kernel namespaces make sequences system
-tools.deploy.backend tools.deploy.config
+USING: io io.files io.files.info.unix io.pathnames
+io.directories io.directories.hierarchy kernel namespaces make
+sequences system tools.deploy.backend tools.deploy.config
 tools.deploy.config.editor assocs hashtables prettyprint
-io.unix.backend cocoa io.encodings.utf8 io.backend
-cocoa.application cocoa.classes cocoa.plists qualified
+io.backend.unix cocoa io.encodings.utf8 io.backend
+cocoa.application cocoa.classes cocoa.plists
 combinators ;
 IN: tools.deploy.macosx
 
@@ -53,7 +54,8 @@ IN: tools.deploy.macosx
         } cleave
     ]
     [ create-app-plist ]
-    [ "Contents/MacOS/" append-path "" copy-vm ] 2tri ;
+    [ "Contents/MacOS/" append-path "" copy-vm ] 2tri
+    dup OCT: 755 set-file-permissions ;
 
 : deploy.app-image ( vocab bundle-name -- str )
     [ % "/Contents/Resources/" % % ".image" % ] "" make ;
index 3d4944841d2ee642683f65db27c287d13aa21965..c894a8931b6462628113305de8a1a137f3de6e32 100755 (executable)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors qualified io.backend io.streams.c init fry
+USING: accessors io.backend io.streams.c init fry
 namespaces make assocs kernel parser lexer strings.parser vocabs
 sequences words words.private memory kernel.private
 continuations io vocabs.loader system strings sets
@@ -365,6 +365,7 @@ SYMBOL: deploy-vocab
         init-hooks get values concat %
         ,
         strip-io? [ \ flush , ] unless
+        [ 0 exit ] %
     ] [ ] make
     set-boot-quot ;
 
index 773b2d0f3b5bae9ec439a536b0ea538a3bcf8013..df64443b7b1d88bcd1871f22c0264539af86f781 100644 (file)
@@ -19,12 +19,8 @@ IN: cocoa.application
 
 [ [ die ] 19 setenv ] "cocoa.application" add-init-hook
 
-"stop-after-last-window?" get
-
 H{ } clone \ pool [
     global [
-        "stop-after-last-window?" "ui" lookup set
-
         ! Only keeps those methods that we actually call
         sent-messages get super-sent-messages get assoc-union
         objc-methods [ assoc-intersect pool-values ] change
index b38c5da6767da39b42ee3a944b2c5318c66cb63b..f3131237bfa4e7c739a0df95c9a1a4c9288e7f04 100644 (file)
@@ -1,14 +1,15 @@
 USING: tools.deploy.config ;
 H{
-    { deploy-threads? t }
-    { deploy-c-types? f }
+    { deploy-unicode? f }
+    { deploy-name "tools.deploy.test.3" }
     { deploy-ui? f }
-    { deploy-word-props? f }
+    { "stop-after-last-window?" t }
     { deploy-word-defs? f }
-    { deploy-math? t }
-    { deploy-io 3 }
-    { deploy-name "tools.deploy.test.3" }
-    { deploy-compiler? t }
     { deploy-reflection 1 }
-    { "stop-after-last-window?" t }
+    { deploy-compiler? t }
+    { deploy-threads? t }
+    { deploy-io 3 }
+    { deploy-math? t }
+    { deploy-word-props? f }
+    { deploy-c-types? f }
 }
diff --git a/basis/tools/deploy/test/9/9.factor b/basis/tools/deploy/test/9/9.factor
new file mode 100644 (file)
index 0000000..a1cbd5b
--- /dev/null
@@ -0,0 +1,10 @@
+USING: alien kernel math ;
+IN: tools.deploy.test.9
+
+: callback-test ( -- callback )
+    "int" { "int" } "cdecl" [ 1 + ] alien-callback ;
+
+: indirect-test ( -- )
+    10 callback-test "int" { "int" } "cdecl" alien-indirect 11 assert= ;
+
+MAIN: indirect-test
diff --git a/basis/tools/deploy/test/9/deploy.factor b/basis/tools/deploy/test/9/deploy.factor
new file mode 100644 (file)
index 0000000..91b1da5
--- /dev/null
@@ -0,0 +1,15 @@
+USING: tools.deploy.config ;
+H{
+    { deploy-unicode? f }
+    { deploy-name "tools.deploy.test.9" }
+    { deploy-ui? f }
+    { "stop-after-last-window?" t }
+    { deploy-word-defs? f }
+    { deploy-reflection 1 }
+    { deploy-compiler? t }
+    { deploy-threads? f }
+    { deploy-io 1 }
+    { deploy-math? t }
+    { deploy-word-props? f }
+    { deploy-c-types? f }
+}
index bd49155e8442f4d7d48f33aeae815a54e0d06647..9e0bb8ac688398ef8a9ac4a8cf459834cef95439 100644 (file)
@@ -1,13 +1,15 @@
 ! Copyright (C) 2008 James Cash
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io io.files io.backend kernel namespaces make sequences
+USING: io io.pathnames io.directories io.files
+io.files.info.unix io.backend kernel namespaces make sequences
 system tools.deploy.backend tools.deploy.config
 tools.deploy.config.editor assocs hashtables prettyprint ;
 IN: tools.deploy.unix
 
 : create-app-dir ( vocab bundle-name -- vm )
     dup "" copy-fonts
-    "" copy-vm ;
+    "" copy-vm
+    dup OCT: 755 set-file-permissions ;
 
 : bundle-name ( -- str )
     deploy-name get ;
index 6188e78b0eb37e410c58841fa6d7b6a806044523..7ce635b1ba90623ffac6c0007a036d1f2ab648e4 100755 (executable)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io io.files kernel namespaces sequences system
+USING: io io.files io.directories kernel namespaces sequences system
 tools.deploy.backend tools.deploy.config
 tools.deploy.config.editor assocs hashtables prettyprint
 combinators windows.shell32 windows.user32 ;
index fac340845b8f1ade79f36c947dbbc309407f835c..2a717c084fd038515ad36586f01bdc2d5eda46b6 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: tr arrays sequences io words generic system combinators
-vocabs.loader ;
+vocabs.loader kernel ;
 IN: tools.disassembler
 
 GENERIC: disassemble ( obj -- )
@@ -18,8 +18,7 @@ M: word disassemble word-xt 2array disassemble ;
 
 M: method-spec disassemble first2 method disassemble ;
 
-cpu {
-    { x86.32 [ "tools.disassembler.udis" ] }
-    { x86.64 [ "tools.disassembler.udis" ] }
-    { ppc [ "tools.disassembler.gdb" ] }
-} case require
+cpu x86? os unix? and
+"tools.disassembler.udis"
+"tools.disassembler.gdb" ?
+require
old mode 100644 (file)
new mode 100755 (executable)
index 65d0e2f..9076b67
@@ -1,9 +1,9 @@
 ! Copyright (C) 2008 Slava Pestov, Jorge Acereda Macia.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io.files io words alien kernel math.parser alien.syntax
-io.launcher system assocs arrays sequences namespaces make
-qualified system math io.encodings.ascii accessors
-tools.disassembler ;
+USING: io.files io.files.temp io words alien kernel math.parser
+alien.syntax io.launcher system assocs arrays sequences
+namespaces make system math io.encodings.ascii
+accessors tools.disassembler ;
 IN: tools.disassembler.gdb
 
 SINGLETON: gdb-disassembler
index c5b5c80d137661d514eac1bfd38a51a5e54f95ed..a915551263a78ca06c02439a0dfd67d857e660ab 100644 (file)
@@ -20,8 +20,9 @@ TYPEDEF: char[592] ud
 FUNCTION: void ud_translate_intel ( ud* u ) ;
 FUNCTION: void ud_translate_att ( ud* u ) ;
 
-: UD_SYN_INTEL    &: ud_translate_intel ; inline
-: UD_SYN_ATT      &: ud_translate_att ; inline
+: UD_SYN_INTEL ( -- addr ) &: ud_translate_intel ; inline
+: UD_SYN_ATT ( -- addr ) &: ud_translate_att ; inline
+
 : UD_EOI          -1 ; inline
 : UD_INP_CACHE_SZ 32 ; inline
 : UD_VENDOR_AMD   0 ; inline
index 7968639d47ff510987d6e1d3e6429ded5ad08735..3670891e41abfc6da56d85821a5dbb8a26c77bd6 100755 (executable)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays combinators io io.files kernel
-math.parser sequences system vocabs.loader calendar math
-symbols fry prettyprint ;
+USING: accessors arrays combinators io io.files io.files.info
+io.directories kernel math.parser sequences system vocabs.loader
+calendar math fry prettyprint ;
 IN: tools.files
 
 <PRIVATE
index 184f371b1c1b7ed8ff1ac090de1395a99e874641..3b32f7b52d373bfbd327ee03c8b6885469065703 100755 (executable)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors combinators kernel system unicode.case
-io.unix.files tools.files generalizations strings
-arrays sequences io.files math.parser unix.groups unix.users
+USING: accessors combinators kernel system unicode.case io.files
+io.files.info io.files.info.unix tools.files generalizations
+strings arrays sequences math.parser unix.groups unix.users
 tools.files.private unix.stat math ;
 IN: tools.files.unix
 
index 76e6ea55907439cc3d86c2b97dbf68ab14e823d3..328bb8dc71f6e587692998cf0277eef9a5e8e194 100755 (executable)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors calendar.format combinators io.files
 kernel math.parser sequences splitting system tools.files
-generalizations tools.files.private ;
+generalizations tools.files.private io.files.info ;
 IN: tools.files.windows
 
 <PRIVATE
index f21e8498ebeca28f09fb65d28866646acd98f2ce..83915363749f6ef62dfed14c2903cba72b80a153 100644 (file)
@@ -3,7 +3,7 @@
 USING: accessors words sequences math prettyprint kernel arrays io
 io.styles namespaces assocs kernel.private strings combinators
 sorting math.parser vocabs definitions tools.profiler.private
-continuations generic ;
+continuations generic compiler.units sets ;
 IN: tools.profiler
 
 : profile ( quot -- )
@@ -19,7 +19,7 @@ TUPLE: usage-profile word ;
 C: <usage-profile> usage-profile
 
 M: word (profile.)
-    dup unparse swap <usage-profile> write-object ;
+    [ name>> "( no name )" or ] [ <usage-profile> ] bi write-object ;
 
 TUPLE: vocab-profile vocab ;
 
@@ -29,8 +29,8 @@ M: string (profile.)
     dup <vocab-profile> write-object ;
 
 M: method-body (profile.)
-    dup synopsis swap "method-generic" word-prop
-    <usage-profile> write-object ;
+    [ synopsis ] [ "method-generic" word-prop <usage-profile> ] bi
+    write-object ;
 
 : counter. ( obj n -- )
     [
@@ -58,7 +58,10 @@ M: method-body (profile.)
     "Call counts for words which call " write
     dup pprint
     ":" print
-    smart-usage [ word? ] filter counters counters. ;
+    [ smart-usage [ word? ] filter ]
+    [ compiled-generic-usage keys ]
+    [ compiled-usage keys ]
+    tri 3append prune counters counters. ;
 
 : vocabs-profile. ( -- )
     "Call counts for all vocabularies:" print
index d8822f51dc1eb4064d346282b3086e1edec3fda1..b6e8eb2a4644423dd5c84cb11a7b13b14345df56 100644 (file)
@@ -1,10 +1,11 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: assocs io.files hashtables kernel namespaces sequences
-vocabs.loader io combinators io.encodings.utf8 calendar accessors
-math.parser io.streams.string ui.tools.operations quotations
-strings arrays prettyprint words vocabs sorting sets
-classes math alien urls splitting ascii ;
+USING: assocs io.files io.pathnames io.directories
+io.encodings.utf8 hashtables kernel namespaces sequences
+vocabs.loader io combinators calendar accessors math.parser
+io.streams.string ui.tools.operations quotations strings arrays
+prettyprint words vocabs sorting sets classes math alien urls
+splitting ascii ;
 IN: tools.scaffold
 
 SYMBOL: developer-name
index e9e8d27870704378c223bc9e53acbbd7e71937c3..36f23a8298aa2f6244406db3fbc7a15d8db501e9 100644 (file)
@@ -3,10 +3,10 @@
 USING: accessors arrays assocs classes classes.builtin
 classes.intersection classes.mixin classes.predicate
 classes.singleton classes.tuple classes.union combinators
-definitions effects fry generic help help.markup
-help.stylesheet help.topics io io.files io.styles kernel macros
+definitions effects fry generic help help.markup help.stylesheet
+help.topics io io.files io.pathnames io.styles kernel macros
 make namespaces prettyprint sequences sets sorting summary
-tools.vocabs vocabs vocabs.loader words ;
+tools.vocabs vocabs vocabs.loader words words.symbol ;
 IN: tools.vocabs.browser
 
 : vocab-status-string ( vocab -- string )
index f1eece91c23bba921fdf0227aff815c0b07a0063..0e767a3d34983cbfc20ade9d3314f03fd5278218 100644 (file)
@@ -1,4 +1,4 @@
-USING: tools.test tools.vocabs.monitor io.files ;
+USING: tools.test tools.vocabs.monitor io.pathnames ;
 IN: tools.vocabs.monitor.tests
 
 [ "kernel" ] [ "core/kernel/kernel.factor" path>vocab ] unit-test
index 416eec91d2b164df9555f10bdba54745e868a1e1..ac0160e58f1477e166f788a9ab9d4d6d52bd9549 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Slava Pestov.\r
 ! See http://factorcode.org/license.txt for BSD license.\r
-USING: threads io.files io.monitors init kernel\r
+USING: threads io.files io.pathnames io.monitors init kernel\r
 vocabs vocabs.loader tools.vocabs namespaces continuations\r
 sequences splitting assocs command-line concurrency.messaging\r
 io.backend sets tr ;\r
index ab2d089d94914f4412cd2f0143fff78b83cf7c45..fe380e0afe6cbcf7cb56fc24ff736553ab1b65cf 100644 (file)
@@ -1,11 +1,11 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.\r
 ! See http://factorcode.org/license.txt for BSD license.\r
-USING: kernel io io.styles io.files io.encodings.utf8\r
-vocabs.loader vocabs sequences namespaces make math.parser\r
-arrays hashtables assocs memoize summary sorting splitting\r
-combinators source-files debugger continuations compiler.errors\r
-init checksums checksums.crc32 sets accessors generic\r
-definitions words ;\r
+USING: kernel io io.styles io.files io.files.info io.directories\r
+io.pathnames io.encodings.utf8 vocabs.loader vocabs sequences\r
+namespaces make math.parser arrays hashtables assocs memoize\r
+summary sorting splitting combinators source-files debugger\r
+continuations compiler.errors init checksums checksums.crc32\r
+sets accessors generic definitions words ;\r
 IN: tools.vocabs\r
 \r
 : vocab-xref ( vocab quot -- vocabs )\r
index 5da70857734d950ca100df6377ac5bb2b37b0914..af62c0b0d714389320e798cba4f7c269380863d4 100644 (file)
@@ -16,7 +16,7 @@ M: tuple-array nth
     [ seq>> nth ] [ class>> ] bi prefix >tuple ;
 
 M: tuple-array set-nth ( elt n seq -- )
-    >r >r tuple>array 1 tail r> r> seq>> set-nth ;
+    [ tuple>array 1 tail ] 2dip seq>> set-nth ;
 
 M: tuple-array new-sequence
     class>> <tuple-array> ;
index aa84419d642e58d18f319e125a41c6538ee88aab..eaa0953d2571de0babd08ca442d140a5b8cb9595 100755 (executable)
@@ -5,8 +5,6 @@ IN: ui.backend
 
 SYMBOL: ui-backend
 
-HOOK: do-events ui-backend ( -- )
-
 HOOK: set-title ui-backend ( string world -- )
 
 HOOK: set-fullscreen* ui-backend ( ? world -- )
index fecbb52a253a410f12d90cb88842663ccbe607c1..331c0a698cbf3c7c98cb2d648a844c1a6f1f4bc3 100755 (executable)
@@ -3,10 +3,11 @@
 USING: accessors math arrays assocs cocoa cocoa.application
 command-line kernel memory namespaces cocoa.messages
 cocoa.runtime cocoa.subclassing cocoa.pasteboard cocoa.types
-cocoa.windows cocoa.classes cocoa.nibs sequences system
-ui ui.backend ui.clipboards ui.gadgets ui.gadgets.worlds
-ui.cocoa.views core-foundation threads math.geometry.rect fry
-libc generalizations alien.c-types cocoa.views combinators ;
+cocoa.windows cocoa.classes cocoa.nibs sequences system ui
+ui.backend ui.clipboards ui.gadgets ui.gadgets.worlds
+ui.cocoa.views core-foundation core-foundation.run-loop threads
+math.geometry.rect fry libc generalizations alien.c-types
+cocoa.views combinators io.thread ;
 IN: ui.cocoa
 
 TUPLE: handle ;
@@ -18,9 +19,6 @@ C: <offscreen-handle> offscreen-handle
 
 SINGLETON: cocoa-ui-backend
 
-M: cocoa-ui-backend do-events ( -- )
-    [ NSApp '[ _ do-event ] loop ui-wait ] with-autorelease-pool ;
-
 TUPLE: pasteboard handle ;
 
 C: <pasteboard> pasteboard
@@ -134,8 +132,8 @@ CLASS: {
     { +name+ "FactorApplicationDelegate" }
 }
 
-{ "applicationDidFinishLaunching:" "void" { "id" "SEL" "id" }
-    [ 3drop event-loop ]
+{  "applicationDidUpdate:" "void" { "id" "SEL" "id" }
+    [ 3drop reset-run-loop ]
 } ;
 
 : install-app-delegate ( -- )
@@ -153,6 +151,9 @@ M: cocoa-ui-backend ui
             init-clipboard
             cocoa-init-hook get call
             start-ui
+            f io-thread-running? set-global
+            init-thread-timer
+            reset-run-loop
             NSApp -> run
         ] ui-running
     ] with-cocoa ;
index ccaae0c1ab39629f498dc63ab166b82e9aeb79e9..a0755e9ec89da647a7566e457e01c9239dcfec20 100644 (file)
@@ -1,10 +1,10 @@
-! Copyright (C) 2006, 2007 Slava Pestov.
+! Copyright (C) 2006, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien.syntax cocoa cocoa.nibs cocoa.application
 cocoa.classes cocoa.dialogs cocoa.pasteboard cocoa.subclassing
-core-foundation help.topics kernel memory namespaces parser
-system ui ui.tools.browser ui.tools.listener ui.tools.workspace
-ui.cocoa eval locals ;
+core-foundation core-foundation.strings help.topics kernel
+memory namespaces parser system ui ui.tools.browser
+ui.tools.listener ui.tools.workspace ui.cocoa eval locals ;
 IN: ui.cocoa.tools
 
 : finder-run-files ( alien -- )
index 7bb9679132e50b015b11db1b1bb3f1c366091393..3201779cc5026822e96a68f3a12a3d71654da0db 100644 (file)
@@ -4,7 +4,7 @@ USING: accessors alien alien.c-types arrays assocs cocoa kernel
 math cocoa.messages cocoa.subclassing cocoa.classes cocoa.views
 cocoa.application cocoa.pasteboard cocoa.types cocoa.windows
 sequences ui ui.gadgets ui.gadgets.worlds ui.gestures
-core-foundation threads combinators math.geometry.rect ;
+core-foundation.strings threads combinators math.geometry.rect ;
 IN: ui.cocoa.views
 
 : send-mouse-moved ( view event -- )
diff --git a/basis/ui/event-loop/event-loop-tests.factor b/basis/ui/event-loop/event-loop-tests.factor
new file mode 100644 (file)
index 0000000..ae1d7ec
--- /dev/null
@@ -0,0 +1,4 @@
+IN: ui.event-loop.tests
+USING: ui.event-loop tools.test ;
+
+\ event-loop must-infer
diff --git a/basis/ui/event-loop/event-loop.factor b/basis/ui/event-loop/event-loop.factor
new file mode 100644 (file)
index 0000000..7c08d80
--- /dev/null
@@ -0,0 +1,18 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: calendar combinators deques kernel namespaces sequences
+threads ui ui.backend ui.gadgets ;
+IN: ui.event-loop
+
+: event-loop? ( -- ? )
+    {
+        { [ graft-queue deque-empty? not ] [ t ] }
+        { [ windows get-global empty? not ] [ t ] }
+        [ f ]
+    } cond ;
+
+HOOK: do-events ui-backend ( -- )
+
+: event-loop ( -- ) [ event-loop? ] [ do-events ] [ ] while ;
+
+: ui-wait ( -- ) 10 milliseconds sleep ;
index 22a4f1722db1f3f5a8ab6c89d854b668c1a48bf1..0f36f3dcbaef77629e40df47776135bb96fe331c 100644 (file)
@@ -78,9 +78,9 @@ SYMBOL: dpi
 
 72 dpi set-global
 
-: ft-floor -6 shift ; inline
+: ft-floor ( m -- n ) -6 shift ; inline
 
-: ft-ceil 63 + -64 bitand -6 shift ; inline
+: ft-ceil ( m -- n ) 63 + -64 bitand -6 shift ; inline
 
 : font-units>pixels ( n font -- n )
     face-size face-size-y-scale FT_MulFix ;
index 8d79c9e07c9877af633c8cb8949dba507719c8c0..03e2e64d958af30040890fce49c249b10dffc4c7 100755 (executable)
@@ -11,7 +11,7 @@ C: <grid-lines> grid-lines
 
 SYMBOL: grid-dim
 
-: half-gap grid get gap>> [ 2/ ] map ; inline
+: half-gap ( -- gap ) grid get gap>> [ 2/ ] map ; inline
 
 : grid-line-from/to ( orientation point -- from to )
     half-gap v-
index d53cba5f76516f47d224666f1dba0ca57c560ed8..23dc99da82124b3d0305f6d075ab7fb94c7e3d97 100644 (file)
@@ -49,8 +49,8 @@ HELP: <pane-control>
 HELP: pane-stream
 { $class-description "Pane streams implement the portion of the " { $link "stream-protocol" } " responsible for output of text, including full support for " { $link "styles" } ". Pane streams also support direct output of gadgets via " { $link write-gadget } " and " { $link print-gadget } ". Pane streams are created by calling " { $link <pane-stream> } "." } ;
 
-HELP: <pane-stream> ( pane -- stream )
-{ $values { "pane" pane } { "stream" "a new " { $link pane-stream } } }
+HELP: <pane-stream>
+{ $values { "pane" pane } { "pane-stream" "a new " { $link pane-stream } } }
 { $description "Creates a new " { $link pane-stream } " for writing to " { $snippet "pane" } "." } ;
 
 { with-pane make-pane } related-words
index 79a47380b6ccaf0e611f4802a434677523c61cf7..efdd54bcc7b8b18c601964ef299e7df4e1c350c2 100644 (file)
@@ -358,25 +358,25 @@ M: f sloppy-pick-up*
     [ 3drop { } ]
     if ;
 
-: move-caret ( pane -- pane )
-    dup hand-rel over sloppy-pick-up >>caret
+: move-caret ( pane loc -- pane )
+    over screen-loc v- over sloppy-pick-up >>caret
     dup relayout-1 ;
 
 : begin-selection ( pane -- )
     f >>selecting?
-    move-caret
+    hand-loc get move-caret
     f >>mark
     drop ;
 
 : extend-selection ( pane -- )
     hand-moved? [
         dup selecting?>> [
-            move-caret
+            hand-loc get move-caret
         ] [
             dup hand-clicked get child? [
                 t >>selecting?
                 dup hand-clicked set-global
-                move-caret
+                hand-click-loc get move-caret
                 caret>mark
             ] when
         ] if
@@ -394,7 +394,7 @@ M: f sloppy-pick-up*
 : select-to-caret ( pane -- )
     t >>selecting?
     dup mark>> [ caret>mark ] unless
-    move-caret
+    hand-loc get move-caret
     dup request-focus
     com-copy-selection ;
 
index fa36e61d90d69b3c112992885fede4e8e2ba1971..6ca3868d87d9ce2245943dae52466c3af61f11d7 100644 (file)
@@ -2,7 +2,7 @@
 ! Copyright (C) 2006, 2007 Alex Chapman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: arrays kernel sequences io.styles ui.gadgets ui.render
-colors colors.gray qualified accessors ;
+colors colors.gray accessors ;
 QUALIFIED: colors
 IN: ui.gadgets.theme
 
index 123a7620d1f4b500b75d8217e8ed8209ca2922f7..b74a36bc0b34f507a0860e521ebc4d804cd9d038 100644 (file)
@@ -3,7 +3,7 @@
 USING: accessors arrays assocs kernel math math.order models
 namespaces make sequences words strings system hashtables
 math.parser math.vectors classes.tuple classes boxes calendar
-alarms symbols combinators sets columns fry deques ui.gadgets ;
+alarms combinators sets columns fry deques ui.gadgets ;
 IN: ui.gestures
 
 GENERIC: handle-gesture ( gesture gadget -- ? )
index f233c9f162891882de8588405fb2804ce2790325..38db81c3dc26e5664f741e905c170fc514c69de4 100644 (file)
@@ -18,10 +18,6 @@ TUPLE: deploy-gadget < pack vocab settings ;
     deploy-ui? get
     "Include user interface framework" <checkbox> add-gadget ;
 
-: exit-when-windows-closed ( parent -- parent )
-    "stop-after-last-window?" get
-    "Exit when last UI window closed" <checkbox> add-gadget ;
-
 : io-settings ( parent -- parent )
     "Input/output support:" <label> add-gadget
     deploy-io get deploy-io-options <radio-buttons> add-gadget ;
@@ -50,7 +46,6 @@ TUPLE: deploy-gadget < pack vocab settings ;
             <pile>
             bundle-name
             deploy-ui
-            os macosx? [ exit-when-windows-closed ] when
             io-settings
             reflection-settings
             advanced-settings
index 51425b124d0afffb64ddc73cc9dfad41c15206f2..40da6ebafc7bb185fdd3404d828e8f116e9e042d 100644 (file)
@@ -7,7 +7,7 @@ quotations sequences strings threads listener classes.tuple
 ui.commands ui.gadgets ui.gadgets.editors ui.gadgets.status-bar
 ui.gadgets.presentations ui.gadgets.worlds ui.gestures
 definitions calendar concurrency.flags concurrency.mailboxes
-ui.tools.workspace accessors sets destructors fry ;
+ui.tools.workspace accessors sets destructors fry vocabs.parser ;
 IN: ui.tools.interactor
 
 ! If waiting is t, we're waiting for user input, and invoking
index e3c3d46904c3c36ff16f971c22954466b17d4bd2..a9405424dc283d72cd1f4f49cce790fb9e5d29b2 100644 (file)
@@ -3,12 +3,13 @@
 USING: continuations definitions ui.tools.browser
 ui.tools.interactor ui.tools.listener ui.tools.profiler
 ui.tools.search ui.tools.traceback ui.tools.workspace generic
-help.topics stack-checker summary inspector io.files io.styles
-kernel namespaces parser prettyprint quotations
+help.topics stack-checker summary inspector io.pathnames
+io.styles kernel namespaces parser prettyprint quotations
 tools.annotations editors tools.profiler tools.test tools.time
 tools.walker ui.commands ui.gadgets.editors ui.gestures
 ui.operations ui.tools.deploy vocabs vocabs.loader words
-sequences tools.vocabs classes compiler.units accessors ;
+sequences tools.vocabs classes compiler.units accessors
+vocabs.parser ;
 IN: ui.tools.operations
 
 V{ } clone operations set-global
index 39a644230808654d58ff111e24c5cc3bf14ff04b..4f239ba6e9e022145967856e1a5f9a0875197220 100644 (file)
@@ -1,4 +1,4 @@
-USING: assocs ui.tools.search help.topics io.files io.styles
+USING: assocs ui.tools.search help.topics io.pathnames io.styles
 kernel namespaces sequences source-files threads
 tools.test ui.gadgets ui.gestures vocabs accessors
 vocabs.loader words tools.test.ui debugger calendar ;
index cf980cfc234a57ba58fecb334d9d24ed96b808bc..9d248e29bdb9ceae5ceef453d41d6cd536dba056 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2006, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs help help.topics io.files io.styles
+USING: accessors assocs help help.topics io.pathnames io.styles
 kernel models models.delay models.filter namespaces prettyprint
 quotations sequences sorting source-files definitions strings
 tools.completion tools.crossref classes.tuple vocabs words
index 738d259cad5c0a3c15843887fab27eb3de9e7e2a..64a98fee0392bec439bb9b6b3207c3824fa0fd3f 100644 (file)
@@ -143,9 +143,7 @@ ARTICLE: "ui-backend-init" "UI initialization and the event loop"
 }
 "The above word must call the following:"
 { $subsection start-ui }
-"The " { $link ui } " word must not return until the event loop has stopped and the UI has been shut down."
-$nl
-"The event loop must not block, since otherwise other Factor threads and I/O will not run. Instead, it should poll for pending events, then call " { $link ui-wait } "." ;
+"The " { $link ui } " word must not return until the event loop has stopped and the UI has been shut down." ;
 
 ARTICLE: "ui-backend-windows" "UI backend window management"
 "The high-level " { $link open-window } " word eventually calls a low-level word which you must implement:"
index 2920b58fffbb32c1cc3675dc4979c48af256a9d5..15999d128b081ac41f6f46ecc5a7ff0c275df247 100644 (file)
@@ -1,5 +1,4 @@
 IN: ui.tests
 USING: ui tools.test ;
 
-\ event-loop must-infer
 \ open-window must-infer
index 1ee860c9748d0ea6316fd7e92f44331ff9748add..37ce4ea499316e04f091fc457d7acfe17ca5dcfa 100644 (file)
@@ -10,18 +10,6 @@ IN: ui
 ! Assoc mapping aliens to gadgets
 SYMBOL: windows
 
-SYMBOL: stop-after-last-window?
-
-: event-loop? ( -- ? )
-    {
-        { [ stop-after-last-window? get not ] [ t ] }
-        { [ graft-queue deque-empty? not ] [ t ] }
-        { [ windows get-global empty? not ] [ t ] }
-        [ f ]
-    } cond ;
-
-: event-loop ( -- ) [ event-loop? ] [ do-events ] [ ] while ;
-
 : window ( handle -- world ) windows get-global at ;
 
 : window-focus ( handle -- gadget ) window world-focus ;
@@ -155,9 +143,6 @@ SYMBOL: ui-hook
         ] assert-depth
     ] [ ui-error ] recover ;
 
-: ui-wait ( -- )
-    10 milliseconds sleep ;
-
 SYMBOL: ui-thread
 
 : ui-running ( quot -- )
@@ -220,7 +205,6 @@ MAIN: ui
         f windows set-global
         [
             ui-hook set
-            stop-after-last-window? on
             ui
         ] with-scope
     ] if ;
index 35ee9f9a600ca2ef67021c3887404487c112af05..c22fcb6cbefce746854294b19a1c36c465b0251e 100755 (executable)
@@ -3,14 +3,14 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.strings arrays assocs ui
 ui.gadgets ui.backend ui.clipboards ui.gadgets.worlds
-ui.gestures io kernel math math.vectors namespaces make
-sequences strings vectors words windows.kernel32 windows.gdi32
-windows.user32 windows.opengl32 windows.messages windows.types
-windows.nt windows threads libc combinators fry
+ui.gestures ui.event-loop io kernel math math.vectors namespaces
+make sequences strings vectors words windows.kernel32
+windows.gdi32 windows.user32 windows.opengl32 windows.messages
+windows.types windows.nt windows threads libc combinators fry
 combinators.short-circuit continuations command-line shuffle
-opengl ui.render ascii math.bitwise locals symbols accessors
-math.geometry.rect math.order ascii calendar
-io.encodings.utf16n ;
+opengl ui.render ascii math.bitwise locals accessors
+math.geometry.rect math.order ascii calendar io.encodings.utf16n
+;
 IN: ui.windows
 
 SINGLETON: windows-ui-backend
@@ -172,10 +172,10 @@ SYMBOLS: msg-obj class-name-ptr mouse-captured ;
         { 27 "ESC" }
     } ;
 
-: exclude-key-wm-keydown? ( n -- bool )
+: exclude-key-wm-keydown? ( n -- ? )
     exclude-keys-wm-keydown key? ;
 
-: exclude-key-wm-char? ( n -- bool )
+: exclude-key-wm-char? ( n -- ? )
     exclude-keys-wm-char key? ;
 
 : keystroke>gesture ( n -- mods sym )
@@ -574,7 +574,6 @@ M: windows-ui-backend set-title ( string world -- )
 M: windows-ui-backend ui
     [
         [
-            stop-after-last-window? on
             init-clipboard
             init-win32-ui
             start-ui
index 817e356712505d2100b7b021f40ee1cfcd6290b0..666ebf2f18b2f8eeb3a634810707f1b2a4550a3c 100755 (executable)
@@ -2,10 +2,10 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors alien alien.c-types arrays ui ui.gadgets
 ui.gestures ui.backend ui.clipboards ui.gadgets.worlds ui.render
-assocs kernel math namespaces opengl sequences strings x11.xlib
-x11.events x11.xim x11.glx x11.clipboard x11.constants
-x11.windows io.encodings.string io.encodings.ascii
-io.encodings.utf8 combinators command-line qualified
+ui.event-loop assocs kernel math namespaces opengl sequences
+strings x11.xlib x11.events x11.xim x11.glx x11.clipboard
+x11.constants x11.windows io.encodings.string io.encodings.ascii
+io.encodings.utf8 combinators command-line
 math.vectors classes.tuple opengl.gl threads math.geometry.rect
 environment ascii ;
 IN: ui.x11
@@ -281,7 +281,6 @@ M: x11-ui-backend ui ( -- )
     [
         f [
             [
-                stop-after-last-window? on
                 init-clipboard
                 start-ui
                 event-loop
index 96917971280bc20d7aa7db32150b9806d516f421..ad9a6d08966afc768d868e8f6ed7ebe992b074a0 100644 (file)
@@ -1,9 +1,10 @@
 ! Copyright (C) 2008 Daniel Ehrenberg.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors values kernel sequences assocs io.files
-io.encodings ascii math.ranges io splitting math.parser 
+io.encodings ascii math.ranges io splitting math.parser
 namespaces make byte-arrays locals math sets io.encodings.ascii
-words compiler.units arrays interval-maps unicode.data ;
+words words.symbol compiler.units arrays interval-maps
+unicode.data ;
 IN: unicode.script
 
 <PRIVATE
index bf426ad8672cce3ffea90f9d6d0e3a365ea15b95..bb0f9b520163324302a7761fa79a813c47028117 100644 (file)
@@ -3,28 +3,28 @@
 USING: alien.syntax combinators system vocabs.loader ;
 IN: unix
 
-: MAXPATHLEN 1024 ; inline
-
-: O_RDONLY   HEX: 0000 ; inline
-: O_WRONLY   HEX: 0001 ; inline
-: O_RDWR     HEX: 0002 ; inline
-: O_NONBLOCK HEX: 0004 ; inline
-: O_APPEND   HEX: 0008 ; inline
-: O_CREAT    HEX: 0200 ; inline
-: O_TRUNC    HEX: 0400 ; inline
-: O_EXCL     HEX: 0800 ; inline
-: O_NOCTTY   HEX: 20000 ; inline
-: O_NDELAY O_NONBLOCK ; inline
-
-: SOL_SOCKET HEX: ffff ; inline
-: SO_REUSEADDR HEX: 4 ; inline
-: SO_OOBINLINE HEX: 100 ; inline
-: SO_SNDTIMEO HEX: 1005 ; inline
-: SO_RCVTIMEO HEX: 1006 ; inline
-
-: F_SETFD 2 ; inline
-: F_SETFL 4 ; inline
-: FD_CLOEXEC 1 ; inline
+CONSTANT: MAXPATHLEN 1024
+
+CONSTANT: O_RDONLY   HEX: 0000
+CONSTANT: O_WRONLY   HEX: 0001
+CONSTANT: O_RDWR     HEX: 0002
+CONSTANT: O_NONBLOCK HEX: 0004
+CONSTANT: O_APPEND   HEX: 0008
+CONSTANT: O_CREAT    HEX: 0200
+CONSTANT: O_TRUNC    HEX: 0400
+CONSTANT: O_EXCL     HEX: 0800
+CONSTANT: O_NOCTTY   HEX: 20000
+ALIAS: O_NDELAY O_NONBLOCK
+
+CONSTANT: SOL_SOCKET HEX: ffff
+CONSTANT: SO_REUSEADDR HEX: 4
+CONSTANT: SO_OOBINLINE HEX: 100
+CONSTANT: SO_SNDTIMEO HEX: 1005
+CONSTANT: SO_RCVTIMEO HEX: 1006
+
+CONSTANT: F_SETFD 2
+CONSTANT: F_SETFL 4
+CONSTANT: FD_CLOEXEC 1
 
 C-STRUCT: sockaddr-in
     { "uchar" "len" }
@@ -59,29 +59,29 @@ C-STRUCT: passwd
     { "time_t" "pw_expire" }
     { "int"    "pw_fields" } ;
 
-: max-un-path 104 ; inline
+CONSTANT: max-un-path 104
 
-: SOCK_STREAM 1 ; inline
-: SOCK_DGRAM 2 ; inline
+CONSTANT: SOCK_STREAM 1
+CONSTANT: SOCK_DGRAM 2
 
-: AF_UNSPEC 0 ; inline
-: AF_UNIX 1 ; inline
-: AF_INET 2 ; inline
-: AF_INET6 30 ; inline
+CONSTANT: AF_UNSPEC 0
+CONSTANT: AF_UNIX 1
+CONSTANT: AF_INET 2
+CONSTANT: AF_INET6 30
 
-: PF_UNSPEC AF_UNSPEC ; inline
-: PF_UNIX AF_UNIX ; inline
-: PF_INET AF_INET ; inline
-: PF_INET6 AF_INET6 ; inline
+ALIAS: PF_UNSPEC AF_UNSPEC
+ALIAS: PF_UNIX AF_UNIX
+ALIAS: PF_INET AF_INET
+ALIAS: PF_INET6 AF_INET6
 
-: IPPROTO_TCP 6 ; inline
-: IPPROTO_UDP 17 ; inline
+CONSTANT: IPPROTO_TCP 6
+CONSTANT: IPPROTO_UDP 17
 
-: AI_PASSIVE 1 ; inline
+CONSTANT: AI_PASSIVE 1
 
-: SEEK_SET 0 ; inline
-: SEEK_CUR 1 ; inline
-: SEEK_END 2 ; inline
+CONSTANT: SEEK_SET 0
+CONSTANT: SEEK_CUR 1
+CONSTANT: SEEK_END 2
 
 os {
     { macosx  [ "unix.bsd.macosx"  require ] }
index 81885ff14157b1f7d12e8ce4138cba4620e02aff..4536c532bf649e377faaa0c4ed303f5f1fcbeb19 100644 (file)
@@ -20,97 +20,97 @@ C-STRUCT: dirent
     { "u_int8_t"  "d_namlen" }
     { { "char" 256 } "d_name" } ;
 
-: EPERM 1 ; inline
-: ENOENT 2 ; inline
-: ESRCH 3 ; inline
-: EINTR 4 ; inline
-: EIO 5 ; inline
-: ENXIO 6 ; inline
-: E2BIG 7 ; inline
-: ENOEXEC 8 ; inline
-: EBADF 9 ; inline
-: ECHILD 10 ; inline
-: EDEADLK 11 ; inline
-: ENOMEM 12 ; inline
-: EACCES 13 ; inline
-: EFAULT 14 ; inline
-: ENOTBLK 15 ; inline
-: EBUSY 16 ; inline
-: EEXIST 17 ; inline
-: EXDEV 18 ; inline
-: ENODEV 19 ; inline
-: ENOTDIR 20 ; inline
-: EISDIR 21 ; inline
-: EINVAL 22 ; inline
-: ENFILE 23 ; inline
-: EMFILE 24 ; inline
-: ENOTTY 25 ; inline
-: ETXTBSY 26 ; inline
-: EFBIG 27 ; inline
-: ENOSPC 28 ; inline
-: ESPIPE 29 ; inline
-: EROFS 30 ; inline
-: EMLINK 31 ; inline
-: EPIPE 32 ; inline
-: EDOM 33 ; inline
-: ERANGE 34 ; inline
-: EAGAIN 35 ; inline
-: EWOULDBLOCK EAGAIN ; inline
-: EINPROGRESS 36 ; inline
-: EALREADY 37 ; inline
-: ENOTSOCK 38 ; inline
-: EDESTADDRREQ 39 ; inline
-: EMSGSIZE 40 ; inline
-: EPROTOTYPE 41 ; inline
-: ENOPROTOOPT 42 ; inline
-: EPROTONOSUPPORT 43 ; inline
-: ESOCKTNOSUPPORT 44 ; inline
-: EOPNOTSUPP 45 ; inline
-: ENOTSUP EOPNOTSUPP ; inline
-: EPFNOSUPPORT 46 ; inline
-: EAFNOSUPPORT 47 ; inline
-: EADDRINUSE 48 ; inline
-: EADDRNOTAVAIL 49 ; inline
-: ENETDOWN 50 ; inline
-: ENETUNREACH 51 ; inline
-: ENETRESET 52 ; inline
-: ECONNABORTED 53 ; inline
-: ECONNRESET 54 ; inline
-: ENOBUFS 55 ; inline
-: EISCONN 56 ; inline
-: ENOTCONN 57 ; inline
-: ESHUTDOWN 58 ; inline
-: ETOOMANYREFS 59 ; inline
-: ETIMEDOUT 60 ; inline
-: ECONNREFUSED 61 ; inline
-: ELOOP 62 ; inline
-: ENAMETOOLONG 63 ; inline
-: EHOSTDOWN 64 ; inline
-: EHOSTUNREACH 65 ; inline
-: ENOTEMPTY 66 ; inline
-: EPROCLIM 67 ; inline
-: EUSERS 68 ; inline
-: EDQUOT 69 ; inline
-: ESTALE 70 ; inline
-: EREMOTE 71 ; inline
-: EBADRPC 72 ; inline
-: ERPCMISMATCH 73 ; inline
-: EPROGUNAVAIL 74 ; inline
-: EPROGMISMATCH 75 ; inline
-: EPROCUNAVAIL 76 ; inline
-: ENOLCK 77 ; inline
-: ENOSYS 78 ; inline
-: EFTYPE 79 ; inline
-: EAUTH 80 ; inline
-: ENEEDAUTH 81 ; inline
-: EIDRM 82 ; inline
-: ENOMSG 83 ; inline
-: EOVERFLOW 84 ; inline
-: ECANCELED 85 ; inline
-: EILSEQ 86 ; inline
-: ENOATTR 87 ; inline
-: EDOOFUS 88 ; inline
-: EBADMSG 89 ; inline
-: EMULTIHOP 90 ; inline
-: ENOLINK 91 ; inline
-: EPROTO 92 ; inline
+CONSTANT: EPERM 1
+CONSTANT: ENOENT 2
+CONSTANT: ESRCH 3
+CONSTANT: EINTR 4
+CONSTANT: EIO 5
+CONSTANT: ENXIO 6
+CONSTANT: E2BIG 7
+CONSTANT: ENOEXEC 8
+CONSTANT: EBADF 9
+CONSTANT: ECHILD 10
+CONSTANT: EDEADLK 11
+CONSTANT: ENOMEM 12
+CONSTANT: EACCES 13
+CONSTANT: EFAULT 14
+CONSTANT: ENOTBLK 15
+CONSTANT: EBUSY 16
+CONSTANT: EEXIST 17
+CONSTANT: EXDEV 18
+CONSTANT: ENODEV 19
+CONSTANT: ENOTDIR 20
+CONSTANT: EISDIR 21
+CONSTANT: EINVAL 22
+CONSTANT: ENFILE 23
+CONSTANT: EMFILE 24
+CONSTANT: ENOTTY 25
+CONSTANT: ETXTBSY 26
+CONSTANT: EFBIG 27
+CONSTANT: ENOSPC 28
+CONSTANT: ESPIPE 29
+CONSTANT: EROFS 30
+CONSTANT: EMLINK 31
+CONSTANT: EPIPE 32
+CONSTANT: EDOM 33
+CONSTANT: ERANGE 34
+CONSTANT: EAGAIN 35
+ALIAS: EWOULDBLOCK EAGAIN
+CONSTANT: EINPROGRESS 36
+CONSTANT: EALREADY 37
+CONSTANT: ENOTSOCK 38
+CONSTANT: EDESTADDRREQ 39
+CONSTANT: EMSGSIZE 40
+CONSTANT: EPROTOTYPE 41
+CONSTANT: ENOPROTOOPT 42
+CONSTANT: EPROTONOSUPPORT 43
+CONSTANT: ESOCKTNOSUPPORT 44
+CONSTANT: EOPNOTSUPP 45
+ALIAS: ENOTSUP EOPNOTSUPP
+CONSTANT: EPFNOSUPPORT 46
+CONSTANT: EAFNOSUPPORT 47
+CONSTANT: EADDRINUSE 48
+CONSTANT: EADDRNOTAVAIL 49
+CONSTANT: ENETDOWN 50
+CONSTANT: ENETUNREACH 51
+CONSTANT: ENETRESET 52
+CONSTANT: ECONNABORTED 53
+CONSTANT: ECONNRESET 54
+CONSTANT: ENOBUFS 55
+CONSTANT: EISCONN 56
+CONSTANT: ENOTCONN 57
+CONSTANT: ESHUTDOWN 58
+CONSTANT: ETOOMANYREFS 59
+CONSTANT: ETIMEDOUT 60
+CONSTANT: ECONNREFUSED 61
+CONSTANT: ELOOP 62
+CONSTANT: ENAMETOOLONG 63
+CONSTANT: EHOSTDOWN 64
+CONSTANT: EHOSTUNREACH 65
+CONSTANT: ENOTEMPTY 66
+CONSTANT: EPROCLIM 67
+CONSTANT: EUSERS 68
+CONSTANT: EDQUOT 69
+CONSTANT: ESTALE 70
+CONSTANT: EREMOTE 71
+CONSTANT: EBADRPC 72
+CONSTANT: ERPCMISMATCH 73
+CONSTANT: EPROGUNAVAIL 74
+CONSTANT: EPROGMISMATCH 75
+CONSTANT: EPROCUNAVAIL 76
+CONSTANT: ENOLCK 77
+CONSTANT: ENOSYS 78
+CONSTANT: EFTYPE 79
+CONSTANT: EAUTH 80
+CONSTANT: ENEEDAUTH 81
+CONSTANT: EIDRM 82
+CONSTANT: ENOMSG 83
+CONSTANT: EOVERFLOW 84
+CONSTANT: ECANCELED 85
+CONSTANT: EILSEQ 86
+CONSTANT: ENOATTR 87
+CONSTANT: EDOOFUS 88
+CONSTANT: EBADMSG 89
+CONSTANT: EMULTIHOP 90
+CONSTANT: ENOLINK 91
+CONSTANT: EPROTO 92
index fb9eb9a621388b0e0e23e10a2bfd37fde273e71e..32dd4d80d8c3dc2f2036f90f1046055938c6652d 100644 (file)
@@ -1,7 +1,7 @@
 USING: alien.syntax unix.time ;
 IN: unix
 
-: FD_SETSIZE 1024 ; inline
+CONSTANT: FD_SETSIZE 1024
 
 C-STRUCT: addrinfo
     { "int" "flags" }
@@ -13,10 +13,10 @@ C-STRUCT: addrinfo
     { "void*" "addr" }
     { "addrinfo*" "next" } ;
 
-: _UTX_USERSIZE 256 ; inline
-: _UTX_LINESIZE 32 ; inline
-: _UTX_IDSIZE 4 ; inline
-: _UTX_HOSTSIZE 256 ; inline
+CONSTANT: _UTX_USERSIZE 256
+CONSTANT: _UTX_LINESIZE 32
+CONSTANT: _UTX_IDSIZE 4
+CONSTANT: _UTX_HOSTSIZE 256
     
 C-STRUCT: utmpx
     { { "char" _UTX_USERSIZE } "ut_user" }
@@ -28,9 +28,9 @@ C-STRUCT: utmpx
     { { "char" _UTX_HOSTSIZE } "ut_host" }
     { { "uint" 16 } "ut_pad" } ;
 
-: __DARWIN_MAXPATHLEN 1024 ; inline
-: __DARWIN_MAXNAMELEN 255 ; inline
-: __DARWIN_MAXNAMELEN+1 255 ; inline
+CONSTANT: __DARWIN_MAXPATHLEN 1024
+CONSTANT: __DARWIN_MAXNAMELEN 255
+CONSTANT: __DARWIN_MAXNAMELEN+1 255
 
 C-STRUCT: dirent
     { "ino_t" "d_ino" }
@@ -39,107 +39,107 @@ C-STRUCT: dirent
     { "__uint8_t"  "d_namlen" }
     { { "char" __DARWIN_MAXNAMELEN+1 } "d_name" } ;
 
-: EPERM 1 ; inline
-: ENOENT 2 ; inline
-: ESRCH 3 ; inline
-: EINTR 4 ; inline
-: EIO 5 ; inline
-: ENXIO 6 ; inline
-: E2BIG 7 ; inline
-: ENOEXEC 8 ; inline
-: EBADF 9 ; inline
-: ECHILD 10 ; inline
-: EDEADLK 11 ; inline
-: ENOMEM 12 ; inline
-: EACCES 13 ; inline
-: EFAULT 14 ; inline
-: ENOTBLK 15 ; inline
-: EBUSY 16 ; inline
-: EEXIST 17 ; inline
-: EXDEV 18 ; inline
-: ENODEV 19 ; inline
-: ENOTDIR 20 ; inline
-: EISDIR 21 ; inline
-: EINVAL 22 ; inline
-: ENFILE 23 ; inline
-: EMFILE 24 ; inline
-: ENOTTY 25 ; inline
-: ETXTBSY 26 ; inline
-: EFBIG 27 ; inline
-: ENOSPC 28 ; inline
-: ESPIPE 29 ; inline
-: EROFS 30 ; inline
-: EMLINK 31 ; inline
-: EPIPE 32 ; inline
-: EDOM 33 ; inline
-: ERANGE 34 ; inline
-: EAGAIN 35 ; inline
-: EWOULDBLOCK EAGAIN ; inline
-: EINPROGRESS 36 ; inline
-: EALREADY 37 ; inline
-: ENOTSOCK 38 ; inline
-: EDESTADDRREQ 39 ; inline
-: EMSGSIZE 40 ; inline
-: EPROTOTYPE 41 ; inline
-: ENOPROTOOPT 42 ; inline
-: EPROTONOSUPPORT 43 ; inline
-: ESOCKTNOSUPPORT 44 ; inline
-: ENOTSUP 45 ; inline
-: EPFNOSUPPORT 46 ; inline
-: EAFNOSUPPORT 47 ; inline
-: EADDRINUSE 48 ; inline
-: EADDRNOTAVAIL 49 ; inline
-: ENETDOWN 50 ; inline
-: ENETUNREACH 51 ; inline
-: ENETRESET 52 ; inline
-: ECONNABORTED 53 ; inline
-: ECONNRESET 54 ; inline
-: ENOBUFS 55 ; inline
-: EISCONN 56 ; inline
-: ENOTCONN 57 ; inline
-: ESHUTDOWN 58 ; inline
-: ETOOMANYREFS 59 ; inline
-: ETIMEDOUT 60 ; inline
-: ECONNREFUSED 61 ; inline
-: ELOOP 62 ; inline
-: ENAMETOOLONG 63 ; inline
-: EHOSTDOWN 64 ; inline
-: EHOSTUNREACH 65 ; inline
-: ENOTEMPTY 66 ; inline
-: EPROCLIM 67 ; inline
-: EUSERS 68 ; inline
-: EDQUOT 69 ; inline
-: ESTALE 70 ; inline
-: EREMOTE 71 ; inline
-: EBADRPC 72 ; inline
-: ERPCMISMATCH 73 ; inline
-: EPROGUNAVAIL 74 ; inline
-: EPROGMISMATCH 75 ; inline
-: EPROCUNAVAIL 76 ; inline
-: ENOLCK 77 ; inline
-: ENOSYS 78 ; inline
-: EFTYPE 79 ; inline
-: EAUTH 80 ; inline
-: ENEEDAUTH 81 ; inline
-: EPWROFF 82 ; inline
-: EDEVERR 83 ; inline
-: EOVERFLOW 84 ; inline
-: EBADEXEC 85 ; inline
-: EBADARCH 86 ; inline
-: ESHLIBVERS 87 ; inline
-: EBADMACHO 88 ; inline
-: ECANCELED 89 ; inline
-: EIDRM 90 ; inline
-: ENOMSG 91 ; inline
-: EILSEQ 92 ; inline
-: ENOATTR 93 ; inline
-: EBADMSG 94 ; inline
-: EMULTIHOP 95 ; inline
-: ENODATA 96 ; inline
-: ENOLINK 97 ; inline
-: ENOSR 98 ; inline
-: ENOSTR 99 ; inline
-: EPROTO 100 ; inline
-: ETIME 101 ; inline
-: EOPNOTSUPP 102 ; inline
-: ENOPOLICY 103 ; inline
+CONSTANT: EPERM 1
+CONSTANT: ENOENT 2
+CONSTANT: ESRCH 3
+CONSTANT: EINTR 4
+CONSTANT: EIO 5
+CONSTANT: ENXIO 6
+CONSTANT: E2BIG 7
+CONSTANT: ENOEXEC 8
+CONSTANT: EBADF 9
+CONSTANT: ECHILD 10
+CONSTANT: EDEADLK 11
+CONSTANT: ENOMEM 12
+CONSTANT: EACCES 13
+CONSTANT: EFAULT 14
+CONSTANT: ENOTBLK 15
+CONSTANT: EBUSY 16
+CONSTANT: EEXIST 17
+CONSTANT: EXDEV 18
+CONSTANT: ENODEV 19
+CONSTANT: ENOTDIR 20
+CONSTANT: EISDIR 21
+CONSTANT: EINVAL 22
+CONSTANT: ENFILE 23
+CONSTANT: EMFILE 24
+CONSTANT: ENOTTY 25
+CONSTANT: ETXTBSY 26
+CONSTANT: EFBIG 27
+CONSTANT: ENOSPC 28
+CONSTANT: ESPIPE 29
+CONSTANT: EROFS 30
+CONSTANT: EMLINK 31
+CONSTANT: EPIPE 32
+CONSTANT: EDOM 33
+CONSTANT: ERANGE 34
+CONSTANT: EAGAIN 35
+ALIAS: EWOULDBLOCK EAGAIN
+CONSTANT: EINPROGRESS 36
+CONSTANT: EALREADY 37
+CONSTANT: ENOTSOCK 38
+CONSTANT: EDESTADDRREQ 39
+CONSTANT: EMSGSIZE 40
+CONSTANT: EPROTOTYPE 41
+CONSTANT: ENOPROTOOPT 42
+CONSTANT: EPROTONOSUPPORT 43
+CONSTANT: ESOCKTNOSUPPORT 44
+CONSTANT: ENOTSUP 45
+CONSTANT: EPFNOSUPPORT 46
+CONSTANT: EAFNOSUPPORT 47
+CONSTANT: EADDRINUSE 48
+CONSTANT: EADDRNOTAVAIL 49
+CONSTANT: ENETDOWN 50
+CONSTANT: ENETUNREACH 51
+CONSTANT: ENETRESET 52
+CONSTANT: ECONNABORTED 53
+CONSTANT: ECONNRESET 54
+CONSTANT: ENOBUFS 55
+CONSTANT: EISCONN 56
+CONSTANT: ENOTCONN 57
+CONSTANT: ESHUTDOWN 58
+CONSTANT: ETOOMANYREFS 59
+CONSTANT: ETIMEDOUT 60
+CONSTANT: ECONNREFUSED 61
+CONSTANT: ELOOP 62
+CONSTANT: ENAMETOOLONG 63
+CONSTANT: EHOSTDOWN 64
+CONSTANT: EHOSTUNREACH 65
+CONSTANT: ENOTEMPTY 66
+CONSTANT: EPROCLIM 67
+CONSTANT: EUSERS 68
+CONSTANT: EDQUOT 69
+CONSTANT: ESTALE 70
+CONSTANT: EREMOTE 71
+CONSTANT: EBADRPC 72
+CONSTANT: ERPCMISMATCH 73
+CONSTANT: EPROGUNAVAIL 74
+CONSTANT: EPROGMISMATCH 75
+CONSTANT: EPROCUNAVAIL 76
+CONSTANT: ENOLCK 77
+CONSTANT: ENOSYS 78
+CONSTANT: EFTYPE 79
+CONSTANT: EAUTH 80
+CONSTANT: ENEEDAUTH 81
+CONSTANT: EPWROFF 82
+CONSTANT: EDEVERR 83
+CONSTANT: EOVERFLOW 84
+CONSTANT: EBADEXEC 85
+CONSTANT: EBADARCH 86
+CONSTANT: ESHLIBVERS 87
+CONSTANT: EBADMACHO 88
+CONSTANT: ECANCELED 89
+CONSTANT: EIDRM 90
+CONSTANT: ENOMSG 91
+CONSTANT: EILSEQ 92
+CONSTANT: ENOATTR 93
+CONSTANT: EBADMSG 94
+CONSTANT: EMULTIHOP 95
+CONSTANT: ENODATA 96
+CONSTANT: ENOLINK 97
+CONSTANT: ENOSR 98
+CONSTANT: ENOSTR 99
+CONSTANT: EPROTO 100
+CONSTANT: ETIME 101
+CONSTANT: EOPNOTSUPP 102
+CONSTANT: ENOPOLICY 103
index 149f35afce1e2fc3390d08650a99da32d16d8301..f124e7f998fa54dcf56a61482e28e6ac7e40ffb3 100644 (file)
@@ -1,7 +1,7 @@
 USING: alien.syntax alien.c-types math vocabs.loader ;
 IN: unix
 
-: FD_SETSIZE 256 ; inline
+CONSTANT: FD_SETSIZE 256
 
 C-STRUCT: addrinfo
     { "int" "flags" }
@@ -20,111 +20,111 @@ C-STRUCT: dirent
     { "__uint8_t"  "d_namlen" }
     { { "char" 256 } "d_name" } ;
 
-: EPERM 1 ; inline
-: ENOENT 2 ; inline
-: ESRCH 3 ; inline
-: EINTR 4 ; inline
-: EIO 5 ; inline
-: ENXIO 6 ; inline
-: E2BIG 7 ; inline
-: ENOEXEC 8 ; inline
-: EBADF 9 ; inline
-: ECHILD 10 ; inline
-: EDEADLK 11 ; inline
-: ENOMEM 12 ; inline
-: EACCES 13 ; inline
-: EFAULT 14 ; inline
-: ENOTBLK 15 ; inline
-: EBUSY 16 ; inline
-: EEXIST 17 ; inline
-: EXDEV 18 ; inline
-: ENODEV 19 ; inline
-: ENOTDIR 20 ; inline
-: EISDIR 21 ; inline
-: EINVAL 22 ; inline
-: ENFILE 23 ; inline
-: EMFILE 24 ; inline
-: ENOTTY 25 ; inline
-: ETXTBSY 26 ; inline
-: EFBIG 27 ; inline
-: ENOSPC 28 ; inline
-: ESPIPE 29 ; inline
-: EROFS 30 ; inline
-: EMLINK 31 ; inline
-: EPIPE 32 ; inline
-: EDOM 33 ; inline
-: ERANGE 34 ; inline
-: EAGAIN 35 ; inline
-: EWOULDBLOCK EAGAIN ; inline
-: EINPROGRESS 36 ; inline
-: EALREADY 37 ; inline
-: ENOTSOCK 38 ; inline
-: EDESTADDRREQ 39 ; inline
-: EMSGSIZE 40 ; inline
-: EPROTOTYPE 41 ; inline
-: ENOPROTOOPT 42 ; inline
-: EPROTONOSUPPORT 43 ; inline
-: ESOCKTNOSUPPORT 44 ; inline
-: EOPNOTSUPP 45 ; inline
-: EPFNOSUPPORT 46 ; inline
-: EAFNOSUPPORT 47 ; inline
-: EADDRINUSE 48 ; inline
-: EADDRNOTAVAIL 49 ; inline
-: ENETDOWN 50 ; inline
-: ENETUNREACH 51 ; inline
-: ENETRESET 52 ; inline
-: ECONNABORTED 53 ; inline
-: ECONNRESET 54 ; inline
-: ENOBUFS 55 ; inline
-: EISCONN 56 ; inline
-: ENOTCONN 57 ; inline
-: ESHUTDOWN 58 ; inline
-: ETOOMANYREFS 59 ; inline
-: ETIMEDOUT 60 ; inline
-: ECONNREFUSED 61 ; inline
-: ELOOP 62 ; inline
-: ENAMETOOLONG 63 ; inline
-: EHOSTDOWN 64 ; inline
-: EHOSTUNREACH 65 ; inline
-: ENOTEMPTY 66 ; inline
-: EPROCLIM 67 ; inline
-: EUSERS 68 ; inline
-: EDQUOT 69 ; inline
-: ESTALE 70 ; inline
-: EREMOTE 71 ; inline
-: EBADRPC 72 ; inline
-: ERPCMISMATCH 73 ; inline
-: EPROGUNAVAIL 74 ; inline
-: EPROGMISMATCH 75 ; inline
-: EPROCUNAVAIL 76 ; inline
-: ENOLCK 77 ; inline
-: ENOSYS 78 ; inline
-: EFTYPE 79 ; inline
-: EAUTH 80 ; inline
-: ENEEDAUTH 81 ; inline
-: EIDRM 82 ; inline
-: ENOMSG 83 ; inline
-: EOVERFLOW 84 ; inline
-: EILSEQ 85 ; inline
-: ENOTSUP 86 ; inline
-: ECANCELED 87 ; inline
-: EBADMSG 88 ; inline
-: ENODATA 89 ; inline
-: ENOSR 90 ; inline
-: ENOSTR 91 ; inline
-: ETIME 92 ; inline
-: ENOATTR 93 ; inline
-: EMULTIHOP 94 ; inline
-: ENOLINK 95 ; inline
-: EPROTO 96 ; inline
-: ELAST 96 ; inline
+CONSTANT: EPERM 1
+CONSTANT: ENOENT 2
+CONSTANT: ESRCH 3
+CONSTANT: EINTR 4
+CONSTANT: EIO 5
+CONSTANT: ENXIO 6
+CONSTANT: E2BIG 7
+CONSTANT: ENOEXEC 8
+CONSTANT: EBADF 9
+CONSTANT: ECHILD 10
+CONSTANT: EDEADLK 11
+CONSTANT: ENOMEM 12
+CONSTANT: EACCES 13
+CONSTANT: EFAULT 14
+CONSTANT: ENOTBLK 15
+CONSTANT: EBUSY 16
+CONSTANT: EEXIST 17
+CONSTANT: EXDEV 18
+CONSTANT: ENODEV 19
+CONSTANT: ENOTDIR 20
+CONSTANT: EISDIR 21
+CONSTANT: EINVAL 22
+CONSTANT: ENFILE 23
+CONSTANT: EMFILE 24
+CONSTANT: ENOTTY 25
+CONSTANT: ETXTBSY 26
+CONSTANT: EFBIG 27
+CONSTANT: ENOSPC 28
+CONSTANT: ESPIPE 29
+CONSTANT: EROFS 30
+CONSTANT: EMLINK 31
+CONSTANT: EPIPE 32
+CONSTANT: EDOM 33
+CONSTANT: ERANGE 34
+CONSTANT: EAGAIN 35
+ALIAS: EWOULDBLOCK EAGAIN
+CONSTANT: EINPROGRESS 36
+CONSTANT: EALREADY 37
+CONSTANT: ENOTSOCK 38
+CONSTANT: EDESTADDRREQ 39
+CONSTANT: EMSGSIZE 40
+CONSTANT: EPROTOTYPE 41
+CONSTANT: ENOPROTOOPT 42
+CONSTANT: EPROTONOSUPPORT 43
+CONSTANT: ESOCKTNOSUPPORT 44
+CONSTANT: EOPNOTSUPP 45
+CONSTANT: EPFNOSUPPORT 46
+CONSTANT: EAFNOSUPPORT 47
+CONSTANT: EADDRINUSE 48
+CONSTANT: EADDRNOTAVAIL 49
+CONSTANT: ENETDOWN 50
+CONSTANT: ENETUNREACH 51
+CONSTANT: ENETRESET 52
+CONSTANT: ECONNABORTED 53
+CONSTANT: ECONNRESET 54
+CONSTANT: ENOBUFS 55
+CONSTANT: EISCONN 56
+CONSTANT: ENOTCONN 57
+CONSTANT: ESHUTDOWN 58
+CONSTANT: ETOOMANYREFS 59
+CONSTANT: ETIMEDOUT 60
+CONSTANT: ECONNREFUSED 61
+CONSTANT: ELOOP 62
+CONSTANT: ENAMETOOLONG 63
+CONSTANT: EHOSTDOWN 64
+CONSTANT: EHOSTUNREACH 65
+CONSTANT: ENOTEMPTY 66
+CONSTANT: EPROCLIM 67
+CONSTANT: EUSERS 68
+CONSTANT: EDQUOT 69
+CONSTANT: ESTALE 70
+CONSTANT: EREMOTE 71
+CONSTANT: EBADRPC 72
+CONSTANT: ERPCMISMATCH 73
+CONSTANT: EPROGUNAVAIL 74
+CONSTANT: EPROGMISMATCH 75
+CONSTANT: EPROCUNAVAIL 76
+CONSTANT: ENOLCK 77
+CONSTANT: ENOSYS 78
+CONSTANT: EFTYPE 79
+CONSTANT: EAUTH 80
+CONSTANT: ENEEDAUTH 81
+CONSTANT: EIDRM 82
+CONSTANT: ENOMSG 83
+CONSTANT: EOVERFLOW 84
+CONSTANT: EILSEQ 85
+CONSTANT: ENOTSUP 86
+CONSTANT: ECANCELED 87
+CONSTANT: EBADMSG 88
+CONSTANT: ENODATA 89
+CONSTANT: ENOSR 90
+CONSTANT: ENOSTR 91
+CONSTANT: ETIME 92
+CONSTANT: ENOATTR 93
+CONSTANT: EMULTIHOP 94
+CONSTANT: ENOLINK 95
+CONSTANT: EPROTO 96
+CONSTANT: ELAST 96
 
 TYPEDEF: __uint8_t sa_family_t
 
-: _UTX_USERSIZE   32 ; inline
-: _UTX_LINESIZE   32 ; inline
-: _UTX_IDSIZE     4 ; inline
-: _UTX_HOSTSIZE   256 ; inline
+CONSTANT: _UTX_USERSIZE   32
+CONSTANT: _UTX_LINESIZE   32
+CONSTANT: _UTX_IDSIZE     4
+CONSTANT: _UTX_HOSTSIZE   256
 
 : _SS_MAXSIZE ( -- n )
     128 ; inline
index a4189775e7430eb4aa66ff582d78cbca8feaff64..e915b6ffcd35b4deab61a9e71af31de26ce60c91 100644 (file)
@@ -1,7 +1,7 @@
 USING: alien.syntax ;
 IN: unix
 
-: FD_SETSIZE 1024 ; inline
+CONSTANT: FD_SETSIZE 1024
 
 C-STRUCT: addrinfo
     { "int" "flags" }
@@ -20,92 +20,92 @@ C-STRUCT: dirent
     { "__uint8_t"  "d_namlen" }
     { { "char" 256 } "d_name" } ;
 
-: EPERM 1 ; inline
-: ENOENT 2 ; inline
-: ESRCH 3 ; inline
-: EINTR 4 ; inline
-: EIO 5 ; inline
-: ENXIO 6 ; inline
-: E2BIG 7 ; inline
-: ENOEXEC 8 ; inline
-: EBADF 9 ; inline
-: ECHILD 10 ; inline
-: EDEADLK 11 ; inline
-: ENOMEM 12 ; inline
-: EACCES 13 ; inline
-: EFAULT 14 ; inline
-: ENOTBLK 15 ; inline
-: EBUSY 16 ; inline
-: EEXIST 17 ; inline
-: EXDEV 18 ; inline
-: ENODEV 19 ; inline
-: ENOTDIR 20 ; inline
-: EISDIR 21 ; inline
-: EINVAL 22 ; inline
-: ENFILE 23 ; inline
-: EMFILE 24 ; inline
-: ENOTTY 25 ; inline
-: ETXTBSY 26 ; inline
-: EFBIG 27 ; inline
-: ENOSPC 28 ; inline
-: ESPIPE 29 ; inline
-: EROFS 30 ; inline
-: EMLINK 31 ; inline
-: EPIPE 32 ; inline
-: EDOM 33 ; inline
-: ERANGE 34 ; inline
-: EAGAIN 35 ; inline
-: EWOULDBLOCK EAGAIN ; inline
-: EINPROGRESS 36 ; inline
-: EALREADY 37 ; inline
-: ENOTSOCK 38 ; inline
-: EDESTADDRREQ 39 ; inline
-: EMSGSIZE 40 ; inline
-: EPROTOTYPE 41 ; inline
-: ENOPROTOOPT 42 ; inline
-: EPROTONOSUPPORT 43 ; inline
-: ESOCKTNOSUPPORT 44 ; inline
-: EOPNOTSUPP 45 ; inline
-: EPFNOSUPPORT 46 ; inline
-: EAFNOSUPPORT 47 ; inline
-: EADDRINUSE 48 ; inline
-: EADDRNOTAVAIL 49 ; inline
-: ENETDOWN 50 ; inline
-: ENETUNREACH 51 ; inline
-: ENETRESET 52 ; inline
-: ECONNABORTED 53 ; inline
-: ECONNRESET 54 ; inline
-: ENOBUFS 55 ; inline
-: EISCONN 56 ; inline
-: ENOTCONN 57 ; inline
-: ESHUTDOWN 58 ; inline
-: ETOOMANYREFS 59 ; inline
-: ETIMEDOUT 60 ; inline
-: ECONNREFUSED 61 ; inline
-: ELOOP 62 ; inline
-: ENAMETOOLONG 63 ; inline
-: EHOSTDOWN 64 ; inline
-: EHOSTUNREACH 65 ; inline
-: ENOTEMPTY 66 ; inline
-: EPROCLIM 67 ; inline
-: EUSERS 68 ; inline
-: EDQUOT 69 ; inline
-: ESTALE 70 ; inline
-: EREMOTE 71 ; inline
-: EBADRPC 72 ; inline
-: ERPCMISMATCH 73 ; inline
-: EPROGUNAVAIL 74 ; inline
-: EPROGMISMATCH 75 ; inline
-: EPROCUNAVAIL 76 ; inline
-: ENOLCK 77 ; inline
-: ENOSYS 78 ; inline
-: EFTYPE 79 ; inline
-: EAUTH 80 ; inline
-: ENEEDAUTH 81 ; inline
-: EIPSEC 82 ; inline
-: ENOATTR 83 ; inline
-: EILSEQ 84 ; inline
-: ENOMEDIUM 85 ; inline
-: EMEDIUMTYPE 86 ; inline
-: EOVERFLOW 87 ; inline
-: ECANCELED 88 ; inline
+CONSTANT: EPERM 1
+CONSTANT: ENOENT 2
+CONSTANT: ESRCH 3
+CONSTANT: EINTR 4
+CONSTANT: EIO 5
+CONSTANT: ENXIO 6
+CONSTANT: E2BIG 7
+CONSTANT: ENOEXEC 8
+CONSTANT: EBADF 9
+CONSTANT: ECHILD 10
+CONSTANT: EDEADLK 11
+CONSTANT: ENOMEM 12
+CONSTANT: EACCES 13
+CONSTANT: EFAULT 14
+CONSTANT: ENOTBLK 15
+CONSTANT: EBUSY 16
+CONSTANT: EEXIST 17
+CONSTANT: EXDEV 18
+CONSTANT: ENODEV 19
+CONSTANT: ENOTDIR 20
+CONSTANT: EISDIR 21
+CONSTANT: EINVAL 22
+CONSTANT: ENFILE 23
+CONSTANT: EMFILE 24
+CONSTANT: ENOTTY 25
+CONSTANT: ETXTBSY 26
+CONSTANT: EFBIG 27
+CONSTANT: ENOSPC 28
+CONSTANT: ESPIPE 29
+CONSTANT: EROFS 30
+CONSTANT: EMLINK 31
+CONSTANT: EPIPE 32
+CONSTANT: EDOM 33
+CONSTANT: ERANGE 34
+CONSTANT: EAGAIN 35
+ALIAS: EWOULDBLOCK EAGAIN
+CONSTANT: EINPROGRESS 36
+CONSTANT: EALREADY 37
+CONSTANT: ENOTSOCK 38
+CONSTANT: EDESTADDRREQ 39
+CONSTANT: EMSGSIZE 40
+CONSTANT: EPROTOTYPE 41
+CONSTANT: ENOPROTOOPT 42
+CONSTANT: EPROTONOSUPPORT 43
+CONSTANT: ESOCKTNOSUPPORT 44
+CONSTANT: EOPNOTSUPP 45
+CONSTANT: EPFNOSUPPORT 46
+CONSTANT: EAFNOSUPPORT 47
+CONSTANT: EADDRINUSE 48
+CONSTANT: EADDRNOTAVAIL 49
+CONSTANT: ENETDOWN 50
+CONSTANT: ENETUNREACH 51
+CONSTANT: ENETRESET 52
+CONSTANT: ECONNABORTED 53
+CONSTANT: ECONNRESET 54
+CONSTANT: ENOBUFS 55
+CONSTANT: EISCONN 56
+CONSTANT: ENOTCONN 57
+CONSTANT: ESHUTDOWN 58
+CONSTANT: ETOOMANYREFS 59
+CONSTANT: ETIMEDOUT 60
+CONSTANT: ECONNREFUSED 61
+CONSTANT: ELOOP 62
+CONSTANT: ENAMETOOLONG 63
+CONSTANT: EHOSTDOWN 64
+CONSTANT: EHOSTUNREACH 65
+CONSTANT: ENOTEMPTY 66
+CONSTANT: EPROCLIM 67
+CONSTANT: EUSERS 68
+CONSTANT: EDQUOT 69
+CONSTANT: ESTALE 70
+CONSTANT: EREMOTE 71
+CONSTANT: EBADRPC 72
+CONSTANT: ERPCMISMATCH 73
+CONSTANT: EPROGUNAVAIL 74
+CONSTANT: EPROGMISMATCH 75
+CONSTANT: EPROCUNAVAIL 76
+CONSTANT: ENOLCK 77
+CONSTANT: ENOSYS 78
+CONSTANT: EFTYPE 79
+CONSTANT: EAUTH 80
+CONSTANT: ENEEDAUTH 81
+CONSTANT: EIPSEC 82
+CONSTANT: ENOATTR 83
+CONSTANT: EILSEQ 84
+CONSTANT: ENOMEDIUM 85
+CONSTANT: EMEDIUMTYPE 86
+CONSTANT: EOVERFLOW 87
+CONSTANT: ECANCELED 88
index 1d9cab577eda8501a5e1e13ad15d8724fb25447e..44d85680a715fd4e35412013f48d2cbbb41877d2 100644 (file)
@@ -3,9 +3,9 @@
 USING: alien.syntax ;
 IN: unix.getfsstat.freebsd
 
-: MNT_WAIT        1       ; inline ! synchronously wait for I/O to complete
-: MNT_NOWAIT      2       ; inline ! start all I/O, but do not wait for it 
-: MNT_LAZY        3       ; inline ! push data not written by filesystem syncer 
-: MNT_SUSPEND     4       ; inline ! Suspend file system after sync 
+CONSTANT: MNT_WAIT        1       ! synchronously wait for I/O to complete
+CONSTANT: MNT_NOWAIT      2       ! start all I/O, but do not wait for it 
+CONSTANT: MNT_LAZY        3       ! push data not written by filesystem syncer 
+CONSTANT: MNT_SUSPEND     4       ! Suspend file system after sync 
 
 FUNCTION: int getfsstat ( statfs* buf, int bufsize, int flags ) ;
index fe39f8556b8131228a8e72a21cc09f8f0e339a4e..0db1bb86ad4b0070a80e8d9db5f51c7c75eadc82 100644 (file)
@@ -3,7 +3,7 @@
 USING: alien.syntax ;
 IN: unix.getfsstat.macosx
 
-: MNT_WAIT    1   ; inline ! synchronously wait for I/O to complete
-: MNT_NOWAIT  2   ; inline ! start all I/O, but do not wait for it
+CONSTANT: MNT_WAIT    1   ! synchronously wait for I/O to complete
+CONSTANT: MNT_NOWAIT  2   ! start all I/O, but do not wait for it
 
 FUNCTION: int getfsstat64 ( statfs* buf, int bufsize, int flags ) ;
index 1c8941a6531f5f8272577a5f3e81b2a85c01e60b..1eca6d7dc391081e412fba43db800e520168ab6f 100644 (file)
@@ -3,8 +3,8 @@
 USING: alien.syntax ;
 IN: unix.getfsstat.netbsd
 
-: MNT_WAIT        1       ; inline ! synchronously wait for I/O to complete
-: MNT_NOWAIT      2       ; inline ! start all I/O, but do not wait for it 
-: MNT_LAZY        3       ; inline ! push data not written by filesystem syncer 
+CONSTANT: MNT_WAIT   1 ! synchronously wait for I/O to complete
+CONSTANT: MNT_NOWAIT 2 ! start all I/O, but do not wait for it 
+CONSTANT: MNT_LAZY   3 ! push data not written by filesystem syncer 
 
 FUNCTION: int getvfsstat ( statfs* buf, int bufsize, int flags ) ;
index 8bf692bd9c3d629a8794ce3ccfa531b934ea87ec..19465d8040163738e65cb82835e4809d79901f9b 100644 (file)
@@ -3,8 +3,8 @@
 USING: alien.syntax ;
 IN: unix.getfsstat.openbsd
 
-: MNT_WAIT        1       ; ! synchronously wait for I/O to complete
-: MNT_NOWAIT      2       ; ! start all I/O, but do not wait for it
-: MNT_LAZY        3       ; ! push data not written by filesystem syncer
+CONSTANT: MNT_WAIT   1 ! synchronously wait for I/O to complete
+CONSTANT: MNT_NOWAIT 2 ! start all I/O, but do not wait for it
+CONSTANT: MNT_LAZY   3 ! push data not written by filesystem syncer
 
 FUNCTION: int getfsstat ( statfs* buf, int bufsize, int flags ) ;
index 177949aec9591adf826ef6712a97c1b790f93290..60785a5b172aea539842f060e8b413075e5ffb05 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.strings io.encodings.utf8
-io.unix.backend kernel math sequences splitting unix strings
-combinators.short-circuit byte-arrays combinators qualified
+io.backend.unix kernel math sequences splitting unix strings
+combinators.short-circuit byte-arrays combinators
 accessors math.parser fry assocs namespaces continuations
 unix.users unix.utilities ;
 IN: unix.groups
index edddae2c16dea9afb961248b96768f6a160593a4..1153b997c2edd91de78c0307a632b9a31f8c697d 100644 (file)
@@ -1,4 +1,4 @@
-USE: alien.syntax
+USING: alien.syntax ;
 IN: unix.kqueue
 
 C-STRUCT: kevent
@@ -12,12 +12,12 @@ C-STRUCT: kevent
 
 FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
 
-: EVFILT_READ     -1 ; inline
-: EVFILT_WRITE    -2 ; inline
-: EVFILT_AIO      -3 ; inline ! attached to aio requests
-: EVFILT_VNODE    -4 ; inline ! attached to vnodes
-: EVFILT_PROC     -5 ; inline ! attached to struct proc
-: EVFILT_SIGNAL   -6 ; inline ! attached to struct proc
-: EVFILT_TIMER    -7 ; inline ! timers
-: EVFILT_NETDEV   -8 ; inline ! Mach ports
-: EVFILT_FS       -9 ; inline ! Filesystem events
+CONSTANT: EVFILT_READ     -1
+CONSTANT: EVFILT_WRITE    -2
+CONSTANT: EVFILT_AIO      -3 ! attached to aio requests
+CONSTANT: EVFILT_VNODE    -4 ! attached to vnodes
+CONSTANT: EVFILT_PROC     -5 ! attached to struct proc
+CONSTANT: EVFILT_SIGNAL   -6 ! attached to struct proc
+CONSTANT: EVFILT_TIMER    -7 ! timers
+CONSTANT: EVFILT_NETDEV   -8 ! Mach ports
+CONSTANT: EVFILT_FS       -9 ! Filesystem events
index d7623df8be0954b85446de497a84fb144f04101e..6c3b9ef2cb07bfb05a66fe22dfbb488829eea193 100644 (file)
@@ -9,47 +9,47 @@ IN: unix.kqueue
 FUNCTION: int kqueue ( ) ;
 
 ! actions
-: EV_ADD     HEX: 1 ; inline ! add event to kq (implies enable)
-: EV_DELETE  HEX: 2 ; inline ! delete event from kq
-: EV_ENABLE  HEX: 4 ; inline ! enable event
-: EV_DISABLE HEX: 8 ; inline ! disable event (not reported)
+CONSTANT: EV_ADD     HEX: 1 ! add event to kq (implies enable)
+CONSTANT: EV_DELETE  HEX: 2 ! delete event from kq
+CONSTANT: EV_ENABLE  HEX: 4 ! enable event
+CONSTANT: EV_DISABLE HEX: 8 ! disable event (not reported)
 
 ! flags
-: EV_ONESHOT HEX: 10 ; inline ! only report one occurrence
-: EV_CLEAR   HEX: 20 ; inline ! clear event state after reporting
+CONSTANT: EV_ONESHOT HEX: 10 ! only report one occurrence
+CONSTANT: EV_CLEAR   HEX: 20 ! clear event state after reporting
 
-: EV_SYSFLAGS HEX: f000 ; inline ! reserved by system
-: EV_FLAG0    HEX: 1000 ; inline ! filter-specific flag
-: EV_FLAG1    HEX: 2000 ; inline ! filter-specific flag
+CONSTANT: EV_SYSFLAGS HEX: f000 ! reserved by system
+CONSTANT: EV_FLAG0    HEX: 1000 ! filter-specific flag
+CONSTANT: EV_FLAG1    HEX: 2000 ! filter-specific flag
 
 ! returned values
-: EV_EOF          HEX: 8000 ; inline ! EOF detected
-: EV_ERROR        HEX: 4000 ; inline ! error, data contains errno
-
-: EV_POLL EV_FLAG0 ; inline
-: EV_OOBAND EV_FLAG1 ; inline
-
-: NOTE_LOWAT      HEX: 00000001 ; inline ! low water mark
-
-: NOTE_DELETE     HEX: 00000001 ; inline ! vnode was removed
-: NOTE_WRITE      HEX: 00000002 ; inline ! data contents changed
-: NOTE_EXTEND     HEX: 00000004 ; inline ! size increased
-: NOTE_ATTRIB     HEX: 00000008 ; inline ! attributes changed
-: NOTE_LINK       HEX: 00000010 ; inline ! link count changed
-: NOTE_RENAME     HEX: 00000020 ; inline ! vnode was renamed
-: NOTE_REVOKE     HEX: 00000040 ; inline ! vnode access was revoked
-
-: NOTE_EXIT       HEX: 80000000 ; inline ! process exited
-: NOTE_FORK       HEX: 40000000 ; inline ! process forked
-: NOTE_EXEC       HEX: 20000000 ; inline ! process exec'd
-: NOTE_PCTRLMASK  HEX: f0000000 ; inline ! mask for hint bits
-: NOTE_PDATAMASK  HEX: 000fffff ; inline ! mask for pid
-
-: NOTE_SECONDS    HEX: 00000001 ; inline ! data is seconds
-: NOTE_USECONDS   HEX: 00000002 ; inline ! data is microseconds
-: NOTE_NSECONDS   HEX: 00000004 ; inline ! data is nanoseconds
-: NOTE_ABSOLUTE   HEX: 00000008 ; inline ! absolute timeout
-
-: NOTE_TRACK      HEX: 00000001 ; inline ! follow across forks
-: NOTE_TRACKERR   HEX: 00000002 ; inline ! could not track child
-: NOTE_CHILD      HEX: 00000004 ; inline ! am a child process
+CONSTANT: EV_EOF          HEX: 8000 ! EOF detected
+CONSTANT: EV_ERROR        HEX: 4000 ! error, data contains errno
+
+ALIAS: EV_POLL EV_FLAG0
+ALIAS: EV_OOBAND EV_FLAG1
+
+CONSTANT: NOTE_LOWAT      HEX: 00000001 ! low water mark
+
+CONSTANT: NOTE_DELETE     HEX: 00000001 ! vnode was removed
+CONSTANT: NOTE_WRITE      HEX: 00000002 ! data contents changed
+CONSTANT: NOTE_EXTEND     HEX: 00000004 ! size increased
+CONSTANT: NOTE_ATTRIB     HEX: 00000008 ! attributes changed
+CONSTANT: NOTE_LINK       HEX: 00000010 ! link count changed
+CONSTANT: NOTE_RENAME     HEX: 00000020 ! vnode was renamed
+CONSTANT: NOTE_REVOKE     HEX: 00000040 ! vnode access was revoked
+
+CONSTANT: NOTE_EXIT       HEX: 80000000 ! process exited
+CONSTANT: NOTE_FORK       HEX: 40000000 ! process forked
+CONSTANT: NOTE_EXEC       HEX: 20000000 ! process exec'd
+CONSTANT: NOTE_PCTRLMASK  HEX: f0000000 ! mask for hint bits
+CONSTANT: NOTE_PDATAMASK  HEX: 000fffff ! mask for pid
+
+CONSTANT: NOTE_SECONDS    HEX: 00000001 ! data is seconds
+CONSTANT: NOTE_USECONDS   HEX: 00000002 ! data is microseconds
+CONSTANT: NOTE_NSECONDS   HEX: 00000004 ! data is nanoseconds
+CONSTANT: NOTE_ABSOLUTE   HEX: 00000008 ! absolute timeout
+
+CONSTANT: NOTE_TRACK      HEX: 00000001 ! follow across forks
+CONSTANT: NOTE_TRACKERR   HEX: 00000002 ! could not track child
+CONSTANT: NOTE_CHILD      HEX: 00000004 ! am a child process
index 7dc2a79c09f78ef743fd9749567a28f0736f3c5c..843a0afad921741408457b6c0ccc5cf716ada8c3 100644 (file)
@@ -1,4 +1,4 @@
-USE: alien.syntax
+USING: alien.syntax ;
 IN: unix.kqueue
 
 C-STRUCT: kevent
@@ -12,12 +12,12 @@ C-STRUCT: kevent
 
 FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
 
-: EVFILT_READ     -1 ; inline
-: EVFILT_WRITE    -2 ; inline
-: EVFILT_AIO      -3 ; inline ! attached to aio requests
-: EVFILT_VNODE    -4 ; inline ! attached to vnodes
-: EVFILT_PROC     -5 ; inline ! attached to struct proc
-: EVFILT_SIGNAL   -6 ; inline ! attached to struct proc
-: EVFILT_TIMER    -7 ; inline ! timers
-: EVFILT_MACHPORT -8 ; inline ! Mach ports
-: EVFILT_FS       -9 ; inline ! Filesystem events
+CONSTANT: EVFILT_READ     -1
+CONSTANT: EVFILT_WRITE    -2
+CONSTANT: EVFILT_AIO      -3 ! attached to aio requests
+CONSTANT: EVFILT_VNODE    -4 ! attached to vnodes
+CONSTANT: EVFILT_PROC     -5 ! attached to struct proc
+CONSTANT: EVFILT_SIGNAL   -6 ! attached to struct proc
+CONSTANT: EVFILT_TIMER    -7 ! timers
+CONSTANT: EVFILT_MACHPORT -8 ! Mach ports
+CONSTANT: EVFILT_FS       -9 ! Filesystem events
index e3fc11a688c8ec588f4ca2dc24eb5b80593668df..7ba942d712e4c74f33a848a07c896e861fd1de4a 100644 (file)
@@ -1,4 +1,4 @@
-USE: alien.syntax
+USING: alien.syntax ;
 IN: unix.kqueue
 
 C-STRUCT: kevent
@@ -12,11 +12,11 @@ C-STRUCT: kevent
 
 FUNCTION: int kevent ( int kq, kevent* changelist, size_t nchanges, kevent* eventlist, size_t nevents, timespec* timeout ) ;
 
-: EVFILT_READ     0 ; inline
-: EVFILT_WRITE    1 ; inline
-: EVFILT_AIO      2 ; inline ! attached to aio requests
-: EVFILT_VNODE    3 ; inline ! attached to vnodes
-: EVFILT_PROC     4 ; inline ! attached to struct proc
-: EVFILT_SIGNAL   5 ; inline ! attached to struct proc
-: EVFILT_TIMER    6 ; inline ! timers
-: EVFILT_SYSCOUNT 7 ; inline ! Filesystem events
+CONSTANT: EVFILT_READ     0
+CONSTANT: EVFILT_WRITE    1
+CONSTANT: EVFILT_AIO      2 ! attached to aio requests
+CONSTANT: EVFILT_VNODE    3 ! attached to vnodes
+CONSTANT: EVFILT_PROC     4 ! attached to struct proc
+CONSTANT: EVFILT_SIGNAL   5 ! attached to struct proc
+CONSTANT: EVFILT_TIMER    6 ! timers
+CONSTANT: EVFILT_SYSCOUNT 7 ! Filesystem events
index bc4be88c42311cbd3f6c7fb18a40aa8cd818fcb5..c62ba05a4c599ff2f7433d31357594868e955439 100644 (file)
@@ -1,4 +1,4 @@
-USE: alien.syntax
+USING: alien.syntax ;
 IN: unix.kqueue
 
 C-STRUCT: kevent
@@ -12,10 +12,10 @@ C-STRUCT: kevent
 
 FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
 
-: EVFILT_READ     -1 ; inline
-: EVFILT_WRITE    -2 ; inline
-: EVFILT_AIO      -3 ; inline ! attached to aio requests
-: EVFILT_VNODE    -4 ; inline ! attached to vnodes
-: EVFILT_PROC     -5 ; inline ! attached to struct proc
-: EVFILT_SIGNAL   -6 ; inline ! attached to struct proc
-: EVFILT_TIMER    -7 ; inline ! timers
+CONSTANT: EVFILT_READ     -1
+CONSTANT: EVFILT_WRITE    -2
+CONSTANT: EVFILT_AIO      -3 ! attached to aio requests
+CONSTANT: EVFILT_VNODE    -4 ! attached to vnodes
+CONSTANT: EVFILT_PROC     -5 ! attached to struct proc
+CONSTANT: EVFILT_SIGNAL   -6 ! attached to struct proc
+CONSTANT: EVFILT_TIMER    -7 ! timers
index 72935807c320c5e52747fa32912c9ac55156607a..7c68dfa45a8124b4e6a22220e90a8a1e928fdc9d 100644 (file)
@@ -14,19 +14,19 @@ C-STRUCT: epoll-event
 
 FUNCTION: int epoll_wait ( int epfd, epoll_event* events, int maxevents, int timeout ) ;
 
-: EPOLL_CTL_ADD 1 ; inline ! Add a file decriptor to the interface.
-: EPOLL_CTL_DEL 2 ; inline ! Remove a file decriptor from the interface.
-: EPOLL_CTL_MOD 3 ; inline ! Change file decriptor epoll_event structure.
+CONSTANT: EPOLL_CTL_ADD 1 ! Add a file decriptor to the interface.
+CONSTANT: EPOLL_CTL_DEL 2 ! Remove a file decriptor from the interface.
+CONSTANT: EPOLL_CTL_MOD 3 ! Change file decriptor epoll_event structure.
 
-: EPOLLIN      HEX: 001 ; inline
-: EPOLLPRI     HEX: 002 ; inline
-: EPOLLOUT     HEX: 004 ; inline
-: EPOLLRDNORM  HEX: 040 ; inline
-: EPOLLRDBAND  HEX: 080 ; inline
-: EPOLLWRNORM  HEX: 100 ; inline
-: EPOLLWRBAND  HEX: 200 ; inline
-: EPOLLMSG     HEX: 400 ; inline
-: EPOLLERR     HEX: 008 ; inline
-: EPOLLHUP     HEX: 010 ; inline
-: EPOLLONESHOT 30 2^    ; inline
-: EPOLLET      31 2^    ; inline
+CONSTANT: EPOLLIN      HEX: 001
+CONSTANT: EPOLLPRI     HEX: 002
+CONSTANT: EPOLLOUT     HEX: 004
+CONSTANT: EPOLLRDNORM  HEX: 040
+CONSTANT: EPOLLRDBAND  HEX: 080
+CONSTANT: EPOLLWRNORM  HEX: 100
+CONSTANT: EPOLLWRBAND  HEX: 200
+CONSTANT: EPOLLMSG     HEX: 400
+CONSTANT: EPOLLERR     HEX: 008
+CONSTANT: EPOLLHUP     HEX: 010
+: EPOLLONESHOT ( -- n ) 30 2^ ; inline
+: EPOLLET      ( -- n ) 31 2^ ; inline
diff --git a/basis/unix/linux/fs/authors.txt b/basis/unix/linux/fs/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/basis/unix/linux/fs/fs.factor b/basis/unix/linux/fs/fs.factor
deleted file mode 100644 (file)
index 6cb9f68..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-USING: alien.syntax ;
-IN: unix.linux.fs
-
-: MS_RDONLY             1    ; ! Mount read-only.
-: MS_NOSUID             2    ; ! Ignore suid and sgid bits.
-: MS_NODEV              4    ; ! Disallow access to device special files.
-: MS_NOEXEC             8    ; ! Disallow program execution.
-: MS_SYNCHRONOUS        16   ; ! Writes are synced at once.
-: MS_REMOUNT            32   ; ! Alter flags of a mounted FS.
-: MS_MANDLOCK           64   ; ! Allow mandatory locks on an FS.
-: S_WRITE               128  ; ! Write on file/directory/symlink.
-: S_APPEND              256  ; ! Append-only file.
-: S_IMMUTABLE           512  ; ! Immutable file.
-: MS_NOATIME            1024 ; ! Do not update access times.
-: MS_NODIRATIME         2048 ; ! Do not update directory access times.
-: MS_BIND               4096 ; ! Bind directory at different place.
-
-FUNCTION: int mount
-( char* special_file, char* dir, char* fstype, ulong options, void* data ) ;
-
-! FUNCTION: int umount2 ( char* file, int flags ) ;
-
-FUNCTION: int umount ( char* file ) ;
diff --git a/basis/unix/linux/fs/tags.txt b/basis/unix/linux/fs/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/unix/linux/if/authors.txt b/basis/unix/linux/if/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/basis/unix/linux/if/if.factor b/basis/unix/linux/if/if.factor
deleted file mode 100644 (file)
index 0a90883..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-
-USING: alien.syntax ;
-
-IN: unix.linux.if
-
-: IFNAMSIZ    16 ;
-: IF_NAMESIZE 16 ;
-: IFHWADDRLEN 6 ;
-
-! Standard interface flags (netdevice->flags)
-
-: IFF_UP          HEX: 1 ;             ! interface is up
-: IFF_BROADCAST   HEX: 2 ;             ! broadcast address valid
-: IFF_DEBUG      HEX: 4 ;              ! turn on debugging
-: IFF_LOOPBACK           HEX: 8 ;              ! is a loopback net
-: IFF_POINTOPOINT HEX: 10 ;            ! interface is has p-p link
-: IFF_NOTRAILERS  HEX: 20 ;            ! avoid use of trailers
-: IFF_RUNNING    HEX: 40 ;             ! interface running and carrier ok
-: IFF_NOARP      HEX: 80 ;             ! no ARP protocol
-: IFF_PROMISC    HEX: 100 ;            ! receive all packets
-: IFF_ALLMULTI           HEX: 200 ;            ! receive all multicast packets
-
-: IFF_MASTER     HEX: 400 ;            ! master of a load balancer
-: IFF_SLAVE      HEX: 800 ;            ! slave of a load balancer
-
-: IFF_MULTICAST   HEX: 1000 ;          ! Supports multicast
-
-! #define IFF_VOLATILE
-! (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_MASTER|IFF_SLAVE|IFF_RUNNING)
-
-: IFF_PORTSEL     HEX: 2000 ;           ! can set media type
-: IFF_AUTOMEDIA   HEX: 4000 ;          ! auto media select active
-: IFF_DYNAMIC    HEX: 8000 ;           ! dialup device with changing addresses
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-C-STRUCT: struct-ifmap
-  { "ulong" "mem-start" }
-  { "ulong" "mem-end" }
-  { "ushort" "base-addr" }
-  { "uchar" "irq" }
-  { "uchar" "dma" }
-  { "uchar" "port" } ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-! Hmm... the generic sockaddr type isn't defined anywhere.
-! Put it here for now.
-
-TYPEDEF: ushort sa_family_t
-
-C-STRUCT: struct-sockaddr
-  { "sa_family_t" "sa_family" }
-  { { "char" 14 } "sa_data" } ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-! C-UNION: union-ifr-ifrn { "char" IFNAMSIZ } ;
-
-C-UNION: union-ifr-ifrn { "char" 16 } ;
-
-C-UNION: union-ifr-ifru
- "struct-sockaddr"
-!   "sockaddr"
-  "short"
-  "int"
-  "struct-ifmap"
-!   { "char" IFNAMSIZ }
-  { "char" 16 }
-  "caddr_t" ;
-
-C-STRUCT: struct-ifreq
-  { "union-ifr-ifrn" "ifr-ifrn" }
-  { "union-ifr-ifru" "ifr-ifru" } ;
-
-: ifr-name      ( struct-ifreq -- value ) struct-ifreq-ifr-ifrn ;
-
-: ifr-hwaddr   ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
-: ifr-addr     ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
-: ifr-dstaddr  ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
-: ifr-broadaddr ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
-: ifr-netmask  ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
-: ifr-flags    ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-C-UNION: union-ifc-ifcu "caddr_t" "struct-ifreq*" ;
-
-C-STRUCT: struct-ifconf
-  { "int" "ifc-len" }
-  { "union-ifc-ifcu" "ifc-ifcu" } ;
-
-: ifc-len ( struct-ifconf -- value ) struct-ifconf-ifc-len ;
-
-: ifc-buf ( struct-ifconf -- value ) struct-ifconf-ifc-ifcu ;
-: ifc-req ( struct-ifconf -- value ) struct-ifconf-ifc-ifcu ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
\ No newline at end of file
diff --git a/basis/unix/linux/if/tags.txt b/basis/unix/linux/if/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/unix/linux/ifreq/authors.txt b/basis/unix/linux/ifreq/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/basis/unix/linux/ifreq/ifreq.factor b/basis/unix/linux/ifreq/ifreq.factor
deleted file mode 100644 (file)
index 5dc1c0f..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-
-USING: kernel alien alien.c-types
-       io.sockets
-       unix
-       unix.linux.sockios
-       unix.linux.if ;
-
-IN: unix.linux.ifreq
-
-: set-if-addr ( name addr -- )
-  "struct-ifreq" <c-object>
-  rot  ascii string>alien       over set-struct-ifreq-ifr-ifrn
-  swap 0 <inet4> make-sockaddr  over set-struct-ifreq-ifr-ifru
-
-  AF_INET SOCK_DGRAM 0 socket SIOCSIFADDR rot ioctl drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: set-if-flags ( name flags -- )
-  "struct-ifreq" <c-object>
-  rot  ascii string>alien over set-struct-ifreq-ifr-ifrn
-  swap <short>          over set-struct-ifreq-ifr-ifru
-
-  AF_INET SOCK_DGRAM 0 socket SIOCSIFFLAGS rot ioctl drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: set-if-dst-addr ( name addr -- )
-  "struct-ifreq" <c-object>
-  rot  ascii string>alien       over set-struct-ifreq-ifr-ifrn
-  swap 0 <inet4> make-sockaddr  over set-struct-ifreq-ifr-ifru
-
-  AF_INET SOCK_DGRAM 0 socket SIOCSIFDSTADDR rot ioctl drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: set-if-brd-addr ( name addr -- )
-  "struct-ifreq" <c-object>
-  rot  ascii string>alien       over set-struct-ifreq-ifr-ifrn
-  swap 0 <inet4> make-sockaddr  over set-struct-ifreq-ifr-ifru
-
-  AF_INET SOCK_DGRAM 0 socket SIOCSIFBRDADDR rot ioctl drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: set-if-netmask ( name addr -- )
-  "struct-ifreq" <c-object>
-  rot  ascii string>alien       over set-struct-ifreq-ifr-ifrn
-  swap 0 <inet4> make-sockaddr  over set-struct-ifreq-ifr-ifru
-
-  AF_INET SOCK_DGRAM 0 socket SIOCSIFNETMASK rot ioctl drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: set-if-metric ( name metric -- )
-  "struct-ifreq" <c-object>
-  rot ascii string>alien over set-struct-ifreq-ifr-ifrn
-  swap <int>           over set-struct-ifreq-ifr-ifru
-
-  AF_INET SOCK_DGRAM 0 socket SIOCSIFMETRIC rot ioctl drop ;
\ No newline at end of file
diff --git a/basis/unix/linux/ifreq/tags.txt b/basis/unix/linux/ifreq/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
index 3385e454d2891d3dab207e7adc4522ae3cd3eca2..e3d40b5b2837acd1dd162c789ab5b6ad7f39ca1b 100644 (file)
@@ -11,31 +11,31 @@ C-STRUCT: inotify-event
     { "char[0]" "name" } ! stub for possible name\r
     ;\r
 \r
-: IN_ACCESS HEX: 1 ; inline         ! File was accessed\r
-: IN_MODIFY HEX: 2 ; inline         ! File was modified\r
-: IN_ATTRIB HEX: 4 ; inline         ! Metadata changed\r
-: IN_CLOSE_WRITE HEX: 8 ; inline    ! Writtable file was closed\r
-: IN_CLOSE_NOWRITE HEX: 10 ; inline ! Unwrittable file closed\r
-: IN_OPEN HEX: 20 ; inline          ! File was opened\r
-: IN_MOVED_FROM HEX: 40 ; inline    ! File was moved from X\r
-: IN_MOVED_TO HEX: 80 ; inline      ! File was moved to Y\r
-: IN_CREATE HEX: 100 ; inline       ! Subfile was created\r
-: IN_DELETE HEX: 200 ; inline       ! Subfile was deleted\r
-: IN_DELETE_SELF HEX: 400 ; inline  ! Self was deleted\r
-: IN_MOVE_SELF HEX: 800 ; inline    ! Self was moved\r
-\r
-: IN_UNMOUNT HEX: 2000 ; inline     ! Backing fs was unmounted\r
-: IN_Q_OVERFLOW HEX: 4000 ; inline  ! Event queued overflowed\r
-: IN_IGNORED HEX: 8000 ; inline     ! File was ignored\r
+CONSTANT: IN_ACCESS HEX: 1         ! File was accessed\r
+CONSTANT: IN_MODIFY HEX: 2         ! File was modified\r
+CONSTANT: IN_ATTRIB HEX: 4         ! Metadata changed\r
+CONSTANT: IN_CLOSE_WRITE HEX: 8    ! Writtable file was closed\r
+CONSTANT: IN_CLOSE_NOWRITE HEX: 10 ! Unwrittable file closed\r
+CONSTANT: IN_OPEN HEX: 20          ! File was opened\r
+CONSTANT: IN_MOVED_FROM HEX: 40    ! File was moved from X\r
+CONSTANT: IN_MOVED_TO HEX: 80      ! File was moved to Y\r
+CONSTANT: IN_CREATE HEX: 100       ! Subfile was created\r
+CONSTANT: IN_DELETE HEX: 200       ! Subfile was deleted\r
+CONSTANT: IN_DELETE_SELF HEX: 400  ! Self was deleted\r
+CONSTANT: IN_MOVE_SELF HEX: 800    ! Self was moved\r
+\r
+CONSTANT: IN_UNMOUNT HEX: 2000     ! Backing fs was unmounted\r
+CONSTANT: IN_Q_OVERFLOW HEX: 4000  ! Event queued overflowed\r
+CONSTANT: IN_IGNORED HEX: 8000     ! File was ignored\r
 \r
 : IN_CLOSE ( -- n ) IN_CLOSE_WRITE IN_CLOSE_NOWRITE bitor ; inline ! close\r
-: IN_MOVE ( -- n ) IN_MOVED_FROM IN_MOVED_TO bitor ; inline        ! moves\r
+: IN_MOVE ( -- n ) IN_MOVED_FROM IN_MOVED_TO bitor        ; inline ! moves\r
 \r
-: IN_ONLYDIR HEX: 1000000 ; inline     ! only watch the path if it is a directory\r
-: IN_DONT_FOLLOW HEX: 2000000 ; inline ! don't follow a sym link\r
-: IN_MASK_ADD HEX: 20000000 ; inline   ! add to the mask of an already existing watch\r
-: IN_ISDIR HEX: 40000000 ; inline      ! event occurred against dir\r
-: IN_ONESHOT HEX: 80000000 ; inline    ! only send event once\r
+CONSTANT: IN_ONLYDIR HEX: 1000000     ! only watch the path if it is a directory\r
+CONSTANT: IN_DONT_FOLLOW HEX: 2000000 ! don't follow a sym link\r
+CONSTANT: IN_MASK_ADD HEX: 20000000   ! add to the mask of an already existing watch\r
+CONSTANT: IN_ISDIR HEX: 40000000      ! event occurred against dir\r
+CONSTANT: IN_ONESHOT HEX: 80000000    ! only send event once\r
 \r
 : IN_CHANGE_EVENTS ( -- n )\r
     {\r
index 7a77dc9316788c9fddfb2d12280db62b53af4089..0cf33be1bf3514cfa99c832c47913a65cd688d57 100644 (file)
@@ -5,32 +5,33 @@ IN: unix
 
 ! Linux.
 
-: MAXPATHLEN 1024 ; inline
+CONSTANT: MAXPATHLEN 1024
 
-: O_RDONLY   HEX: 0000 ; inline
-: O_WRONLY   HEX: 0001 ; inline
-: O_RDWR     HEX: 0002 ; inline
-: O_CREAT    HEX: 0040 ; inline
-: O_EXCL     HEX: 0080 ; inline
-: O_NOCTTY   HEX: 0100 ; inline
-: O_TRUNC    HEX: 0200 ; inline
-: O_APPEND   HEX: 0400 ; inline
-: O_NONBLOCK HEX: 0800 ; inline
-: O_NDELAY O_NONBLOCK ; inline
+CONSTANT: O_RDONLY   HEX: 0000
+CONSTANT: O_WRONLY   HEX: 0001
+CONSTANT: O_RDWR     HEX: 0002
+CONSTANT: O_CREAT    HEX: 0040
+CONSTANT: O_EXCL     HEX: 0080
+CONSTANT: O_NOCTTY   HEX: 0100
+CONSTANT: O_TRUNC    HEX: 0200
+CONSTANT: O_APPEND   HEX: 0400
+CONSTANT: O_NONBLOCK HEX: 0800
 
-: SOL_SOCKET 1 ; inline
+ALIAS: O_NDELAY O_NONBLOCK
 
-: FD_SETSIZE 1024 ; inline
+CONSTANT: SOL_SOCKET 1
 
-: SO_REUSEADDR 2 ; inline
-: SO_OOBINLINE 10 ; inline
-: SO_SNDTIMEO HEX: 15 ; inline
-: SO_RCVTIMEO HEX: 14 ; inline
+CONSTANT: FD_SETSIZE 1024
 
-: F_SETFD 2 ; inline
-: FD_CLOEXEC 1 ; inline
+CONSTANT: SO_REUSEADDR 2
+CONSTANT: SO_OOBINLINE 10
+CONSTANT: SO_SNDTIMEO HEX: 15
+CONSTANT: SO_RCVTIMEO HEX: 14
 
-: F_SETFL 4 ; inline
+CONSTANT: F_SETFD 2
+CONSTANT: FD_CLOEXEC 1
+
+CONSTANT: F_SETFL 4
 
 C-STRUCT: addrinfo
     { "int" "flags" }
@@ -55,33 +56,33 @@ C-STRUCT: sockaddr-in6
     { { "uchar" 16 } "addr" }
     { "uint" "scopeid" } ;
 
-: max-un-path 108 ; inline
+CONSTANT: max-un-path 108
 
 C-STRUCT: sockaddr-un
     { "ushort" "family" }
     { { "char" max-un-path } "path" } ;
 
-: SOCK_STREAM 1 ; inline
-: SOCK_DGRAM 2 ; inline
+CONSTANT: SOCK_STREAM 1
+CONSTANT: SOCK_DGRAM 2
 
-: AF_UNSPEC 0 ; inline
-: AF_UNIX 1 ; inline
-: AF_INET 2 ; inline
-: AF_INET6 10 ; inline
+CONSTANT: AF_UNSPEC 0
+CONSTANT: AF_UNIX 1
+CONSTANT: AF_INET 2
+CONSTANT: AF_INET6 10
 
-: PF_UNSPEC AF_UNSPEC ; inline
-: PF_UNIX AF_UNIX ; inline
-: PF_INET AF_INET ; inline
-: PF_INET6 AF_INET6 ; inline
+ALIAS: PF_UNSPEC AF_UNSPEC
+ALIAS: PF_UNIX AF_UNIX
+ALIAS: PF_INET AF_INET
+ALIAS: PF_INET6 AF_INET6
 
-: IPPROTO_TCP 6 ; inline
-: IPPROTO_UDP 17 ; inline
+CONSTANT: IPPROTO_TCP 6
+CONSTANT: IPPROTO_UDP 17
 
-: AI_PASSIVE 1 ; inline
+CONSTANT: AI_PASSIVE 1
 
-: SEEK_SET 0 ; inline
-: SEEK_CUR 1 ; inline
-: SEEK_END 2 ; inline
+CONSTANT: SEEK_SET 0
+CONSTANT: SEEK_CUR 1
+CONSTANT: SEEK_END 2
 
 C-STRUCT: passwd
     { "char*"  "pw_name" }
@@ -99,134 +100,134 @@ C-STRUCT: dirent
     { "uchar" "d_type" }
     { { "char" 256 } "d_name" } ;
 
-: EPERM 1 ; inline
-: ENOENT 2 ; inline
-: ESRCH 3 ; inline
-: EINTR 4 ; inline
-: EIO 5 ; inline
-: ENXIO 6 ; inline
-: E2BIG 7 ; inline
-: ENOEXEC 8 ; inline
-: EBADF 9 ; inline
-: ECHILD 10 ; inline
-: EAGAIN 11 ; inline
-: ENOMEM 12 ; inline
-: EACCES 13 ; inline
-: EFAULT 14 ; inline
-: ENOTBLK 15 ; inline
-: EBUSY 16 ; inline
-: EEXIST 17 ; inline
-: EXDEV 18 ; inline
-: ENODEV 19 ; inline
-: ENOTDIR 20 ; inline
-: EISDIR 21 ; inline
-: EINVAL 22 ; inline
-: ENFILE 23 ; inline
-: EMFILE 24 ; inline
-: ENOTTY 25 ; inline
-: ETXTBSY 26 ; inline
-: EFBIG 27 ; inline
-: ENOSPC 28 ; inline
-: ESPIPE 29 ; inline
-: EROFS 30 ; inline
-: EMLINK 31 ; inline
-: EPIPE 32 ; inline
-: EDOM 33 ; inline
-: ERANGE 34 ; inline
-: EDEADLK 35 ; inline
-: ENAMETOOLONG 36 ; inline
-: ENOLCK 37 ; inline
-: ENOSYS 38 ; inline
-: ENOTEMPTY 39 ; inline
-: ELOOP 40 ; inline
-: EWOULDBLOCK EAGAIN ; inline
-: ENOMSG 42 ; inline
-: EIDRM 43 ; inline
-: ECHRNG 44 ; inline
-: EL2NSYNC 45 ; inline
-: EL3HLT 46 ; inline
-: EL3RST 47 ; inline
-: ELNRNG 48 ; inline
-: EUNATCH 49 ; inline
-: ENOCSI 50 ; inline
-: EL2HLT 51 ; inline
-: EBADE 52 ; inline
-: EBADR 53 ; inline
-: EXFULL 54 ; inline
-: ENOANO 55 ; inline
-: EBADRQC 56 ; inline
-: EBADSLT 57 ; inline
-: EDEADLOCK EDEADLK ; inline
-: EBFONT 59 ; inline
-: ENOSTR 60 ; inline
-: ENODATA 61 ; inline
-: ETIME 62 ; inline
-: ENOSR 63 ; inline
-: ENONET 64 ; inline
-: ENOPKG 65 ; inline
-: EREMOTE 66 ; inline
-: ENOLINK 67 ; inline
-: EADV 68 ; inline
-: ESRMNT 69 ; inline
-: ECOMM 70 ; inline
-: EPROTO 71 ; inline
-: EMULTIHOP 72 ; inline
-: EDOTDOT 73 ; inline
-: EBADMSG 74 ; inline
-: EOVERFLOW 75 ; inline
-: ENOTUNIQ 76 ; inline
-: EBADFD 77 ; inline
-: EREMCHG 78 ; inline
-: ELIBACC 79 ; inline
-: ELIBBAD 80 ; inline
-: ELIBSCN 81 ; inline
-: ELIBMAX 82 ; inline
-: ELIBEXEC 83 ; inline
-: EILSEQ 84 ; inline
-: ERESTART 85 ; inline
-: ESTRPIPE 86 ; inline
-: EUSERS 87 ; inline
-: ENOTSOCK 88 ; inline
-: EDESTADDRREQ 89 ; inline
-: EMSGSIZE 90 ; inline
-: EPROTOTYPE 91 ; inline
-: ENOPROTOOPT 92 ; inline
-: EPROTONOSUPPORT 93 ; inline
-: ESOCKTNOSUPPORT 94 ; inline
-: EOPNOTSUPP 95 ; inline
-: EPFNOSUPPORT 96 ; inline
-: EAFNOSUPPORT 97 ; inline
-: EADDRINUSE 98 ; inline
-: EADDRNOTAVAIL 99 ; inline
-: ENETDOWN 100 ; inline
-: ENETUNREACH 101 ; inline
-: ENETRESET 102 ; inline
-: ECONNABORTED 103 ; inline
-: ECONNRESET 104 ; inline
-: ENOBUFS 105 ; inline
-: EISCONN 106 ; inline
-: ENOTCONN 107 ; inline
-: ESHUTDOWN 108 ; inline
-: ETOOMANYREFS 109 ; inline
-: ETIMEDOUT 110 ; inline
-: ECONNREFUSED 111 ; inline
-: EHOSTDOWN 112 ; inline
-: EHOSTUNREACH 113 ; inline
-: EALREADY 114 ; inline
-: EINPROGRESS 115 ; inline
-: ESTALE 116 ; inline
-: EUCLEAN 117 ; inline
-: ENOTNAM 118 ; inline
-: ENAVAIL 119 ; inline
-: EISNAM 120 ; inline
-: EREMOTEIO 121 ; inline
-: EDQUOT 122 ; inline
-: ENOMEDIUM 123 ; inline
-: EMEDIUMTYPE 124 ; inline
-: ECANCELED 125 ; inline
-: ENOKEY 126 ; inline
-: EKEYEXPIRED 127 ; inline
-: EKEYREVOKED 128 ; inline
-: EKEYREJECTED 129 ; inline
-: EOWNERDEAD 130 ; inline
-: ENOTRECOVERABLE 131 ; inline
+CONSTANT: EPERM 1
+CONSTANT: ENOENT 2
+CONSTANT: ESRCH 3
+CONSTANT: EINTR 4
+CONSTANT: EIO 5
+CONSTANT: ENXIO 6
+CONSTANT: E2BIG 7
+CONSTANT: ENOEXEC 8
+CONSTANT: EBADF 9
+CONSTANT: ECHILD 10
+CONSTANT: EAGAIN 11
+CONSTANT: ENOMEM 12
+CONSTANT: EACCES 13
+CONSTANT: EFAULT 14
+CONSTANT: ENOTBLK 15
+CONSTANT: EBUSY 16
+CONSTANT: EEXIST 17
+CONSTANT: EXDEV 18
+CONSTANT: ENODEV 19
+CONSTANT: ENOTDIR 20
+CONSTANT: EISDIR 21
+CONSTANT: EINVAL 22
+CONSTANT: ENFILE 23
+CONSTANT: EMFILE 24
+CONSTANT: ENOTTY 25
+CONSTANT: ETXTBSY 26
+CONSTANT: EFBIG 27
+CONSTANT: ENOSPC 28
+CONSTANT: ESPIPE 29
+CONSTANT: EROFS 30
+CONSTANT: EMLINK 31
+CONSTANT: EPIPE 32
+CONSTANT: EDOM 33
+CONSTANT: ERANGE 34
+CONSTANT: EDEADLK 35
+CONSTANT: ENAMETOOLONG 36
+CONSTANT: ENOLCK 37
+CONSTANT: ENOSYS 38
+CONSTANT: ENOTEMPTY 39
+CONSTANT: ELOOP 40
+ALIAS: EWOULDBLOCK EAGAIN
+CONSTANT: ENOMSG 42
+CONSTANT: EIDRM 43
+CONSTANT: ECHRNG 44
+CONSTANT: EL2NSYNC 45
+CONSTANT: EL3HLT 46
+CONSTANT: EL3RST 47
+CONSTANT: ELNRNG 48
+CONSTANT: EUNATCH 49
+CONSTANT: ENOCSI 50
+CONSTANT: EL2HLT 51
+CONSTANT: EBADE 52
+CONSTANT: EBADR 53
+CONSTANT: EXFULL 54
+CONSTANT: ENOANO 55
+CONSTANT: EBADRQC 56
+CONSTANT: EBADSLT 57
+ALIAS: EDEADLOCK EDEADLK
+CONSTANT: EBFONT 59
+CONSTANT: ENOSTR 60
+CONSTANT: ENODATA 61
+CONSTANT: ETIME 62
+CONSTANT: ENOSR 63
+CONSTANT: ENONET 64
+CONSTANT: ENOPKG 65
+CONSTANT: EREMOTE 66
+CONSTANT: ENOLINK 67
+CONSTANT: EADV 68
+CONSTANT: ESRMNT 69
+CONSTANT: ECOMM 70
+CONSTANT: EPROTO 71
+CONSTANT: EMULTIHOP 72
+CONSTANT: EDOTDOT 73
+CONSTANT: EBADMSG 74
+CONSTANT: EOVERFLOW 75
+CONSTANT: ENOTUNIQ 76
+CONSTANT: EBADFD 77
+CONSTANT: EREMCHG 78
+CONSTANT: ELIBACC 79
+CONSTANT: ELIBBAD 80
+CONSTANT: ELIBSCN 81
+CONSTANT: ELIBMAX 82
+CONSTANT: ELIBEXEC 83
+CONSTANT: EILSEQ 84
+CONSTANT: ERESTART 85
+CONSTANT: ESTRPIPE 86
+CONSTANT: EUSERS 87
+CONSTANT: ENOTSOCK 88
+CONSTANT: EDESTADDRREQ 89
+CONSTANT: EMSGSIZE 90
+CONSTANT: EPROTOTYPE 91
+CONSTANT: ENOPROTOOPT 92
+CONSTANT: EPROTONOSUPPORT 93
+CONSTANT: ESOCKTNOSUPPORT 94
+CONSTANT: EOPNOTSUPP 95
+CONSTANT: EPFNOSUPPORT 96
+CONSTANT: EAFNOSUPPORT 97
+CONSTANT: EADDRINUSE 98
+CONSTANT: EADDRNOTAVAIL 99
+CONSTANT: ENETDOWN 100
+CONSTANT: ENETUNREACH 101
+CONSTANT: ENETRESET 102
+CONSTANT: ECONNABORTED 103
+CONSTANT: ECONNRESET 104
+CONSTANT: ENOBUFS 105
+CONSTANT: EISCONN 106
+CONSTANT: ENOTCONN 107
+CONSTANT: ESHUTDOWN 108
+CONSTANT: ETOOMANYREFS 109
+CONSTANT: ETIMEDOUT 110
+CONSTANT: ECONNREFUSED 111
+CONSTANT: EHOSTDOWN 112
+CONSTANT: EHOSTUNREACH 113
+CONSTANT: EALREADY 114
+CONSTANT: EINPROGRESS 115
+CONSTANT: ESTALE 116
+CONSTANT: EUCLEAN 117
+CONSTANT: ENOTNAM 118
+CONSTANT: ENAVAIL 119
+CONSTANT: EISNAM 120
+CONSTANT: EREMOTEIO 121
+CONSTANT: EDQUOT 122
+CONSTANT: ENOMEDIUM 123
+CONSTANT: EMEDIUMTYPE 124
+CONSTANT: ECANCELED 125
+CONSTANT: ENOKEY 126
+CONSTANT: EKEYEXPIRED 127
+CONSTANT: EKEYREVOKED 128
+CONSTANT: EKEYREJECTED 129
+CONSTANT: EOWNERDEAD 130
+CONSTANT: ENOTRECOVERABLE 131
diff --git a/basis/unix/linux/route/authors.txt b/basis/unix/linux/route/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/basis/unix/linux/route/route.factor b/basis/unix/linux/route/route.factor
deleted file mode 100644 (file)
index 4d9bbfa..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-USING: alien.syntax ;
-
-IN: unix.linux.route
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-C-STRUCT: struct-rtentry
-  { "ulong"           "rt_pad1" }
-  { "struct-sockaddr" "rt_dst" }
-  { "struct-sockaddr" "rt_gateway" }
-  { "struct-sockaddr" "rt_genmask" }
-  { "ushort"          "rt_flags" }
-  { "short"           "rt_pad2" }
-  { "ulong"           "rt_pad3" }
-  { "uchar"          "rt_tos" }
-  { "uchar"          "rt_class" }
-  { "short"          "rt_pad4" }
-  { "short"          "rt_metric" }
-  { "char*"          "rt_dev" }
-  { "ulong"          "rt_mtu" }
-  { "ulong"          "rt_window" }
-  { "ushort"         "rt_irtt" } ;
-
-: RTF_UP        HEX: 0001 ;            ! Route usable.
-: RTF_GATEWAY   HEX: 0002 ;            ! Destination is a gateway.
-
-: RTF_HOST      HEX: 0004 ;            ! Host entry (net otherwise).
-: RTF_REINSTATE         HEX: 0008 ;            ! Reinstate route after timeout.
-: RTF_DYNAMIC   HEX: 0010 ;            ! Created dyn. (by redirect).
-: RTF_MODIFIED  HEX: 0020 ;            ! Modified dyn. (by redirect).
-: RTF_MTU       HEX: 0040 ;            ! Specific MTU for this route.
-: RTF_MSS       RTF_MTU ;              ! Compatibility.
-: RTF_WINDOW    HEX: 0080 ;            ! Per route window clamping.
-: RTF_IRTT      HEX: 0100 ;            ! Initial round trip time.
-: RTF_REJECT    HEX: 0200 ;            ! Reject route.
-: RTF_STATIC    HEX: 0400 ;            ! Manually injected route.
-: RTF_XRESOLVE  HEX: 0800 ;            ! External resolver.
-: RTF_NOFORWARD  HEX: 1000 ;           ! Forwarding inhibited.
-: RTF_THROW     HEX: 2000 ;            ! Go to next class.
-: RTF_NOPMTUDISC HEX: 4000 ;           ! Do not send packets with DF.
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-USING: kernel alien.c-types io.sockets
-       unix unix.linux.sockios ;
-
-: route ( dst gateway genmask flags -- )
-  >r >r >r >r
-  "struct-rtentry" <c-object>
-  r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_dst
-  r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_gateway
-  r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_genmask
-  r>                                over set-struct-rtentry-rt_flags
-  AF_INET SOCK_DGRAM 0 socket SIOCADDRT rot ioctl drop ;
diff --git a/basis/unix/linux/route/tags.txt b/basis/unix/linux/route/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/unix/linux/sockios/authors.txt b/basis/unix/linux/sockios/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/basis/unix/linux/sockios/sockios.factor b/basis/unix/linux/sockios/sockios.factor
deleted file mode 100644 (file)
index fd1bb10..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-
-IN: unix.linux.sockios
-
-! Imported from linux-headers-2.6.15-28-686 on Ubuntu 6.06
-
-! Routing table calls
-: SIOCADDRT    HEX: 890B ;             ! add routing table entry
-: SIOCDELRT    HEX: 890C ;             ! delete routing table entry
-: SIOCRTMSG    HEX: 890D ;             ! call to routing system
-
-! Socket configuration controls
-
-: SIOCGIFNAME       HEX: 8910 ;                ! get iface name
-: SIOCSIFLINK       HEX: 8911 ;                ! set iface channel
-: SIOCGIFCONF       HEX: 8912 ;                ! get iface list
-: SIOCGIFFLAGS      HEX: 8913 ;                ! get flags
-: SIOCSIFFLAGS      HEX: 8914 ;                ! set flags
-: SIOCGIFADDR       HEX: 8915 ;                ! get PA address
-: SIOCSIFADDR       HEX: 8916 ;                ! set PA address
-: SIOCGIFDSTADDR     HEX: 8917 ;               ! get remote PA address
-: SIOCSIFDSTADDR     HEX: 8918 ;               ! set remote PA address
-: SIOCGIFBRDADDR     HEX: 8919 ;               ! get broadcast PA address
-: SIOCSIFBRDADDR     HEX: 891a ;               ! set broadcast PA address
-: SIOCGIFNETMASK     HEX: 891b ;               ! get network PA mask
-: SIOCSIFNETMASK     HEX: 891c ;               ! set network PA mask
-: SIOCGIFMETRIC             HEX: 891d ;                ! get metric
-: SIOCSIFMETRIC             HEX: 891e ;                ! set metric
-: SIOCGIFMEM        HEX: 891f ;                ! get memory address (BSD)
-: SIOCSIFMEM        HEX: 8920 ;                ! set memory address (BSD)
-: SIOCGIFMTU        HEX: 8921 ;                ! get MTU size
-: SIOCSIFMTU        HEX: 8922 ;                ! set MTU size
-: SIOCSIFNAME       HEX: 8923 ;                ! set interface name
-: SIOCSIFHWADDR             HEX: 8924 ;                ! set hardware address
-: SIOCGIFENCAP      HEX: 8925 ;                ! get/set encapsulations
-: SIOCSIFENCAP      HEX: 8926 ;
-: SIOCGIFHWADDR             HEX: 8927 ;                ! Get hardware address
-: SIOCGIFSLAVE      HEX: 8929 ;                ! Driver slaving support
-: SIOCSIFSLAVE      HEX: 8930 ;
-: SIOCADDMULTI      HEX: 8931 ;                ! Multicast address lists
-: SIOCDELMULTI      HEX: 8932 ;
-: SIOCGIFINDEX      HEX: 8933 ;                ! name -> if_index mapping
-: SIOGIFINDEX       SIOCGIFINDEX ;             ! misprint compatibility :-)
-: SIOCSIFPFLAGS             HEX: 8934 ;                ! set/get extended flags set
-: SIOCGIFPFLAGS             HEX: 8935 ;
-: SIOCDIFADDR       HEX: 8936 ;                ! delete PA address
-: SIOCSIFHWBROADCAST HEX: 8937 ;               ! set hardware broadcast addr
-: SIOCGIFCOUNT      HEX: 8938 ;                ! get number of devices
-
-: SIOCGIFBR         HEX: 8940 ;                ! Bridging support
-: SIOCSIFBR         HEX: 8941 ;                ! Set bridging options
-
-: SIOCGIFTXQLEN             HEX: 8942 ;                ! Get the tx queue length
-: SIOCSIFTXQLEN             HEX: 8943 ;                ! Set the tx queue length
-
-: SIOCGIFDIVERT             HEX: 8944 ;                ! Frame diversion support
-: SIOCSIFDIVERT             HEX: 8945 ;                ! Set frame diversion options
-
-: SIOCETHTOOL       HEX: 8946 ;                ! Ethtool interface
-
-: SIOCGMIIPHY       HEX: 8947 ;                ! Get address of MII PHY in use
-: SIOCGMIIREG       HEX: 8948 ;                ! Read MII PHY register.
-: SIOCSMIIREG       HEX: 8949 ;                ! Write MII PHY register.
-
-: SIOCWANDEV        HEX: 894A ;                ! get/set netdev parameters
diff --git a/basis/unix/linux/sockios/tags.txt b/basis/unix/linux/sockios/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/basis/unix/linux/swap/authors.txt b/basis/unix/linux/swap/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/basis/unix/linux/swap/swap.factor b/basis/unix/linux/swap/swap.factor
deleted file mode 100644 (file)
index b4edaaa..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-USING: alien.syntax ;
-
-IN: unix.linux.swap
-
-: SWAP_FLAG_PREFER      HEX: 8000 ; ! Set if swap priority is specified.
-: SWAP_FLAG_PRIO_MASK   HEX: 7fff ;
-: SWAP_FLAG_PRIO_SHIFT  0 ;
-
-FUNCTION: int swapon ( char* path, int flags ) ;
-
-FUNCTION: int swapoff ( char* path ) ;
\ No newline at end of file
diff --git a/basis/unix/linux/swap/tags.txt b/basis/unix/linux/swap/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
index 7d5f9eb330468ee079f6f8bd2da03921297643b6..6e83ea9a4226d78f7d188c9ebb78be5d9eeee6e5 100644 (file)
@@ -1,6 +1,6 @@
 USING: kernel alien.c-types alien.strings sequences math alien.syntax unix
 vectors kernel namespaces continuations threads assocs vectors
-io.unix.backend io.encodings.utf8 unix.utilities ;
+io.backend.unix io.encodings.utf8 unix.utilities ;
 IN: unix.process
 
 ! Low-level Unix process launching utilities. These are used
@@ -39,34 +39,34 @@ FUNCTION: int execve ( char* path, char** argv, char** envp ) ;
     [ [ fork-process dup zero? ] dip [ drop ] prepose ] dip
     if ; inline
 
-: SIGKILL 9 ; inline
-: SIGTERM 15 ; inline
+CONSTANT: SIGKILL 9
+CONSTANT: SIGTERM 15
 
 FUNCTION: int kill ( pid_t pid, int sig ) ;
 
-: PRIO_PROCESS 0 ; inline
-: PRIO_PGRP 1 ; inline
-: PRIO_USER 2 ; inline
+CONSTANT: PRIO_PROCESS 0
+CONSTANT: PRIO_PGRP 1
+CONSTANT: PRIO_USER 2
 
-: PRIO_MIN -20 ; inline
-: PRIO_MAX 20 ; inline
+CONSTANT: PRIO_MIN -20
+CONSTANT: PRIO_MAX 20
 
 ! which/who = 0 for current process
 FUNCTION: int getpriority ( int which, int who ) ;
 FUNCTION: int setpriority ( int which, int who, int prio ) ;
 
 : set-priority ( n -- )
-    0 0 rot setpriority io-error ;
+    [ 0 0 ] dip setpriority io-error ;
 
 ! Flags for waitpid
 
-: WNOHANG   1 ; inline
-: WUNTRACED 2 ; inline
+CONSTANT: WNOHANG   1
+CONSTANT: WUNTRACED 2
 
-: WSTOPPED   2 ; inline
-: WEXITED    4 ; inline
-: WCONTINUED 8 ; inline
-: WNOWAIT    HEX: 1000000 ; inline
+CONSTANT: WSTOPPED   2
+CONSTANT: WEXITED    4
+CONSTANT: WCONTINUED 8
+CONSTANT: WNOWAIT    HEX: 1000000
 
 ! Examining status
 
index 2bca20c6b6fba3887b41d2f0f85e1655d7097274..d91fbdfddc1f5c1a1f92da9b1320ca6e24c8ab4a 100644 (file)
@@ -1,30 +1,30 @@
 ! Copyright (C) 2006 Patrick Mauritz.
 ! See http://factorcode.org/license.txt for BSD license.
 IN: unix
-USING: alien.syntax system kernel ;
+USING: alien.syntax system kernel layouts ;
 
 ! Solaris.
 
-: O_RDONLY  HEX: 0000 ; inline
-: O_WRONLY  HEX: 0001 ; inline
-: O_RDWR    HEX: 0002 ; inline
-: O_APPEND  HEX: 0008 ; inline
-: O_CREAT   HEX: 0100 ; inline
-: O_TRUNC   HEX: 0200 ; inline
+CONSTANT: O_RDONLY  HEX: 0000
+CONSTANT: O_WRONLY  HEX: 0001
+CONSTANT: O_RDWR    HEX: 0002
+CONSTANT: O_APPEND  HEX: 0008
+CONSTANT: O_CREAT   HEX: 0100
+CONSTANT: O_TRUNC   HEX: 0200
 
-: SEEK_END 2 ; inline
+CONSTANT: SEEK_END 2
 
-: SOL_SOCKET HEX: ffff ; inline
+CONSTANT: SOL_SOCKET HEX: ffff
 
-: FD_SETSIZE cell 4 = 1024 65536 ? ; inline
+: FD_SETSIZE ( -- n ) cell 4 = 1024 65536 ? ;
 
-: SO_REUSEADDR 4 ; inline
-: SO_OOBINLINE HEX: 0100 ; inline
-: SO_SNDTIMEO HEX: 1005 ; inline
-: SO_RCVTIMEO HEX: 1006 ; inline
+CONSTANT: SO_REUSEADDR 4
+CONSTANT: SO_OOBINLINE HEX: 0100
+CONSTANT: SO_SNDTIMEO HEX: 1005
+CONSTANT: SO_RCVTIMEO HEX: 1006
 
-: F_SETFL 4 ;    ! set file status flags
-: O_NONBLOCK HEX: 80 ; ! no delay
+CONSTANT: F_SETFL 4    ! set file status flags
+CONSTANT: O_NONBLOCK HEX: 80 ! no delay
 
 C-STRUCT: addrinfo
     { "int" "flags" }
@@ -58,24 +58,24 @@ C-STRUCT: sockaddr-un
     { "ushort" "family" }
     { { "char" max-un-path } "path" } ;
 
-: EINTR 4 ; inline
-: EAGAIN 11 ; inline
-: EINPROGRESS 150 ; inline
+CONSTANT: EINTR 4
+CONSTANT: EAGAIN 11
+CONSTANT: EINPROGRESS 150
 
-: SOCK_STREAM 2 ; inline
-: SOCK_DGRAM 1 ; inline
+CONSTANT: SOCK_STREAM 2
+CONSTANT: SOCK_DGRAM 1
 
-: AF_UNSPEC 0 ; inline
-: AF_UNIX 1 ; inline
-: AF_INET 2 ; inline
-: AF_INET6 26 ; inline
+CONSTANT: AF_UNSPEC 0
+CONSTANT: AF_UNIX 1
+CONSTANT: AF_INET 2
+CONSTANT: AF_INET6 26
 
-: PF_UNSPEC AF_UNSPEC ; inline
-: PF_UNIX AF_UNIX ; inline
-: PF_INET AF_INET ; inline
-: PF_INET6 AF_INET6 ; inline
+ALIAS: PF_UNSPEC AF_UNSPEC
+ALIAS: PF_UNIX AF_UNIX
+ALIAS: PF_INET AF_INET
+ALIAS: PF_INET6 AF_INET6
 
-: IPPROTO_TCP 6 ; inline
-: IPPROTO_UDP 17 ; inline
+CONSTANT: IPPROTO_TCP 6
+CONSTANT: IPPROTO_UDP 17
 
-: AI_PASSIVE 8 ; inline
+CONSTANT: AI_PASSIVE 8
index ded06595de7c14bbd3e19f09bfa542b121725dc1..35963cf4edf0d157b16cf5de948454db3d928683 100644 (file)
@@ -25,5 +25,5 @@ C-STRUCT: stat
 FUNCTION: int __xstat  ( int ver, char* pathname, stat* buf ) ;
 FUNCTION: int __lxstat ( int ver, char* pathname, stat* buf ) ;
 
-:  stat ( pathname buf -- int ) 3 -rot __xstat ;
-: lstat ( pathname buf -- int ) 3 -rot __lxstat ;
+:  stat ( pathname buf -- int ) [ 3 ] 2dip __xstat ;
+: lstat ( pathname buf -- int ) [ 3 ] 2dip __lxstat ;
index f406b2ccee306f183156d484feef077cf6cd889d..81b33f322789ee1b0511c43c3abc12f536aa4e41 100644 (file)
@@ -26,5 +26,5 @@ C-STRUCT: stat
 FUNCTION: int __xstat  ( int ver, char* pathname, stat* buf ) ;
 FUNCTION: int __lxstat ( int ver, char* pathname, stat* buf ) ;
 
-:  stat ( pathname buf -- int ) 1 -rot __xstat ;
-: lstat ( pathname buf -- int ) 1 -rot __lxstat ;
+:  stat ( pathname buf -- int ) [ 1 ] 2dip __xstat ;
+: lstat ( pathname buf -- int ) [ 1 ] 2dip __lxstat ;
index d6a60ba5c88f385b773096fb87a8be8f40001526..c4cf5cc7a0951773d0df22eece0d5dbd47aa8b81 100644 (file)
@@ -25,5 +25,5 @@ C-STRUCT: stat
 FUNCTION: int __stat30  ( char* pathname, stat* buf ) ;
 FUNCTION: int __lstat30 ( char* pathname, stat* buf ) ;
 
-: stat ( pathname buf -- n ) __stat30 ; inline
-: lstat ( pathname buf -- n ) __lstat30 ; inline
+: stat ( pathname buf -- n ) __stat30 ;
+: lstat ( pathname buf -- n ) __lstat30 ;
index 1a1f97507c9a9fd6f2560b192afcb22505610c7a..cd9286c6ba410be22bea6375fae133fad9884e13 100644 (file)
@@ -25,5 +25,5 @@ C-STRUCT: stat
 FUNCTION: int __stat13 ( char* pathname, stat* buf ) ;
 FUNCTION: int __lstat13 ( char* pathname, stat* buf ) ;
 
-: stat ( pathname buf -- n ) __stat13 ; inline
-: lstat ( pathname buf -- n ) __lstat13 ; inline
+: stat ( pathname buf -- n ) __stat13 ;
+: lstat ( pathname buf -- n ) __lstat13 ;
index a3b0ed11b7f6caf984af2605939c88b3f99edb60..156be961906773f4a231932a1f5b860070983891 100644 (file)
@@ -1,19 +1,19 @@
 USING: kernel system combinators alien.syntax alien.c-types
-math io.unix.backend vocabs.loader unix ;
+math io.backend.unix vocabs.loader unix ;
 IN: unix.stat
 
 ! File Types
 
-: S_IFMT   OCT: 170000 ; ! These bits determine file type.
+CONSTANT: S_IFMT   OCT: 170000   ! These bits determine file type.
 
-: S_IFDIR  OCT:  40000 ; inline   ! Directory.
-: S_IFCHR  OCT:  20000 ; inline   ! Character device.
-: S_IFBLK  OCT:  60000 ; inline   ! Block device.
-: S_IFREG  OCT: 100000 ; inline   ! Regular file.
-: S_IFIFO  OCT: 010000 ; inline   ! FIFO.
-: S_IFLNK  OCT: 120000 ; inline   ! Symbolic link.
-: S_IFSOCK OCT: 140000 ; inline   ! Socket.
-: S_IFWHT  OCT: 160000 ; inline   ! Whiteout.
+CONSTANT: S_IFDIR  OCT:  40000   ! Directory.
+CONSTANT: S_IFCHR  OCT:  20000   ! Character device.
+CONSTANT: S_IFBLK  OCT:  60000   ! Block device.
+CONSTANT: S_IFREG  OCT: 100000   ! Regular file.
+CONSTANT: S_IFIFO  OCT: 010000   ! FIFO.
+CONSTANT: S_IFLNK  OCT: 120000   ! Symbolic link.
+CONSTANT: S_IFSOCK OCT: 140000   ! Socket.
+CONSTANT: S_IFWHT  OCT: 160000   ! Whiteout.
 
 FUNCTION: int chmod ( char* path, mode_t mode ) ;
 FUNCTION: int fchmod ( int fd, mode_t mode ) ;
@@ -22,8 +22,8 @@ FUNCTION: int mkdir ( char* path, mode_t mode ) ;
 C-STRUCT: fsid
     { { "int" 2 } "__val" } ;
 
-    TYPEDEF: fsid __fsid_t
-    TYPEDEF: fsid fsid_t
+TYPEDEF: fsid __fsid_t
+TYPEDEF: fsid fsid_t
 
 << os {
     { linux   [ "unix.stat.linux"   require ] }
index 038178f6f8351f018017f4dc2db51a34874dffe1..e6a033e09d505f484da2fa0f82ded795312ef563 100644 (file)
@@ -3,9 +3,9 @@
 USING: alien.syntax ;
 IN: unix.statfs.freebsd
 
-: MFSNAMELEN      16            ; inline ! length of type name including null */
-: MNAMELEN        88            ; inline ! size of on/from name bufs
-: STATFS_VERSION  HEX: 20030518 ; inline ! current version number 
+CONSTANT: MFSNAMELEN      16            ! length of type name including null */
+CONSTANT: MNAMELEN        88            ! size of on/from name bufs
+CONSTANT: STATFS_VERSION  HEX: 20030518 ! current version number 
 
 C-STRUCT: statfs
     { "uint32_t" "f_version" }
index 210e9fbe12ede628e582c7fb3265d5a4c805d705..f80eb29ccd785386dbcd4305350aa5523b2cae18 100644 (file)
@@ -5,28 +5,28 @@ kernel sequences unix.stat accessors unix combinators math
 grouping system alien.strings math.bitwise alien.syntax ;
 IN: unix.statfs.macosx
 
-: MNT_RDONLY  HEX: 00000001 ; inline
-: MNT_SYNCHRONOUS HEX: 00000002 ; inline
-: MNT_NOEXEC  HEX: 00000004 ; inline
-: MNT_NOSUID  HEX: 00000008 ; inline
-: MNT_NODEV   HEX: 00000010 ; inline
-: MNT_UNION   HEX: 00000020 ; inline
-: MNT_ASYNC   HEX: 00000040 ; inline
-: MNT_EXPORTED HEX: 00000100 ; inline
-: MNT_QUARANTINE  HEX: 00000400 ; inline
-: MNT_LOCAL   HEX: 00001000 ; inline
-: MNT_QUOTA   HEX: 00002000 ; inline
-: MNT_ROOTFS  HEX: 00004000 ; inline
-: MNT_DOVOLFS HEX: 00008000 ; inline
-: MNT_DONTBROWSE  HEX: 00100000 ; inline
-: MNT_IGNORE_OWNERSHIP HEX: 00200000 ; inline
-: MNT_AUTOMOUNTED HEX: 00400000 ; inline
-: MNT_JOURNALED   HEX: 00800000 ; inline
-: MNT_NOUSERXATTR HEX: 01000000 ; inline
-: MNT_DEFWRITE    HEX: 02000000 ; inline
-: MNT_MULTILABEL  HEX: 04000000 ; inline
-: MNT_NOATIME HEX: 10000000 ; inline
-: MNT_UNKNOWNPERMISSIONS MNT_IGNORE_OWNERSHIP ; inline
+CONSTANT: MNT_RDONLY  HEX: 00000001
+CONSTANT: MNT_SYNCHRONOUS HEX: 00000002
+CONSTANT: MNT_NOEXEC  HEX: 00000004
+CONSTANT: MNT_NOSUID  HEX: 00000008
+CONSTANT: MNT_NODEV   HEX: 00000010
+CONSTANT: MNT_UNION   HEX: 00000020
+CONSTANT: MNT_ASYNC   HEX: 00000040
+CONSTANT: MNT_EXPORTED HEX: 00000100
+CONSTANT: MNT_QUARANTINE  HEX: 00000400
+CONSTANT: MNT_LOCAL   HEX: 00001000
+CONSTANT: MNT_QUOTA   HEX: 00002000
+CONSTANT: MNT_ROOTFS  HEX: 00004000
+CONSTANT: MNT_DOVOLFS HEX: 00008000
+CONSTANT: MNT_DONTBROWSE  HEX: 00100000
+CONSTANT: MNT_IGNORE_OWNERSHIP HEX: 00200000
+CONSTANT: MNT_AUTOMOUNTED HEX: 00400000
+CONSTANT: MNT_JOURNALED   HEX: 00800000
+CONSTANT: MNT_NOUSERXATTR HEX: 01000000
+CONSTANT: MNT_DEFWRITE    HEX: 02000000
+CONSTANT: MNT_MULTILABEL  HEX: 04000000
+CONSTANT: MNT_NOATIME HEX: 10000000
+ALIAS: MNT_UNKNOWNPERMISSIONS MNT_IGNORE_OWNERSHIP
 
 : MNT_VISFLAGMASK ( -- n )
     {
@@ -39,58 +39,60 @@ IN: unix.statfs.macosx
         MNT_NOUSERXATTR MNT_DEFWRITE MNT_MULTILABEL MNT_NOATIME
     } flags ; inline
 
-: MNT_UPDATE  HEX: 00010000 ; inline
-: MNT_RELOAD  HEX: 00040000 ; inline
-: MNT_FORCE   HEX: 00080000 ; inline
-: MNT_CMDFLAGS { MNT_UPDATE MNT_RELOAD MNT_FORCE } flags ; inline
+CONSTANT: MNT_UPDATE  HEX: 00010000
+CONSTANT: MNT_RELOAD  HEX: 00040000
+CONSTANT: MNT_FORCE   HEX: 00080000
 
-: VFS_GENERIC 0 ; inline
-: VFS_NUMMNTOPS 1 ; inline
-: VFS_MAXTYPENUM 1 ; inline
-: VFS_CONF 2 ; inline
-: VFS_SET_PACKAGE_EXTS 3 ; inline
+: MNT_CMDFLAGS ( -- n )
+    { MNT_UPDATE MNT_RELOAD MNT_FORCE } flags ; inline
 
-: MNT_WAIT    1 ; inline
-: MNT_NOWAIT  2 ; inline
+CONSTANT: VFS_GENERIC 0
+CONSTANT: VFS_NUMMNTOPS 1
+CONSTANT: VFS_MAXTYPENUM 1
+CONSTANT: VFS_CONF 2
+CONSTANT: VFS_SET_PACKAGE_EXTS 3
 
-: VFS_CTL_VERS1   HEX: 01 ; inline
+CONSTANT: MNT_WAIT    1
+CONSTANT: MNT_NOWAIT  2
 
-: VFS_CTL_STATFS  HEX: 00010001 ; inline
-: VFS_CTL_UMOUNT  HEX: 00010002 ; inline
-: VFS_CTL_QUERY   HEX: 00010003 ; inline
-: VFS_CTL_NEWADDR HEX: 00010004 ; inline
-: VFS_CTL_TIMEO   HEX: 00010005 ; inline
-: VFS_CTL_NOLOCKS HEX: 00010006 ; inline
+CONSTANT: VFS_CTL_VERS1   HEX: 01
+
+CONSTANT: VFS_CTL_STATFS  HEX: 00010001
+CONSTANT: VFS_CTL_UMOUNT  HEX: 00010002
+CONSTANT: VFS_CTL_QUERY   HEX: 00010003
+CONSTANT: VFS_CTL_NEWADDR HEX: 00010004
+CONSTANT: VFS_CTL_TIMEO   HEX: 00010005
+CONSTANT: VFS_CTL_NOLOCKS HEX: 00010006
 
 C-STRUCT: vfsquery
     { "uint32_t" "vq_flags" }
     { { "uint32_t" 31 } "vq_spare" } ;
 
-: VQ_NOTRESP  HEX: 0001 ; inline
-: VQ_NEEDAUTH HEX: 0002 ; inline
-: VQ_LOWDISK  HEX: 0004 ; inline
-: VQ_MOUNT    HEX: 0008 ; inline
-: VQ_UNMOUNT  HEX: 0010 ; inline
-: VQ_DEAD     HEX: 0020 ; inline
-: VQ_ASSIST   HEX: 0040 ; inline
-: VQ_NOTRESPLOCK  HEX: 0080 ; inline
-: VQ_UPDATE   HEX: 0100 ; inline
-: VQ_FLAG0200 HEX: 0200 ; inline
-: VQ_FLAG0400 HEX: 0400 ; inline
-: VQ_FLAG0800 HEX: 0800 ; inline
-: VQ_FLAG1000 HEX: 1000 ; inline
-: VQ_FLAG2000 HEX: 2000 ; inline
-: VQ_FLAG4000 HEX: 4000 ; inline
-: VQ_FLAG8000 HEX: 8000 ; inline
+CONSTANT: VQ_NOTRESP  HEX: 0001
+CONSTANT: VQ_NEEDAUTH HEX: 0002
+CONSTANT: VQ_LOWDISK  HEX: 0004
+CONSTANT: VQ_MOUNT    HEX: 0008
+CONSTANT: VQ_UNMOUNT  HEX: 0010
+CONSTANT: VQ_DEAD     HEX: 0020
+CONSTANT: VQ_ASSIST   HEX: 0040
+CONSTANT: VQ_NOTRESPLOCK  HEX: 0080
+CONSTANT: VQ_UPDATE   HEX: 0100
+CONSTANT: VQ_FLAG0200 HEX: 0200
+CONSTANT: VQ_FLAG0400 HEX: 0400
+CONSTANT: VQ_FLAG0800 HEX: 0800
+CONSTANT: VQ_FLAG1000 HEX: 1000
+CONSTANT: VQ_FLAG2000 HEX: 2000
+CONSTANT: VQ_FLAG4000 HEX: 4000
+CONSTANT: VQ_FLAG8000 HEX: 8000
 
-: NFSV4_MAX_FH_SIZE 128 ; inline
-: NFSV3_MAX_FH_SIZE 64 ; inline
-: NFSV2_MAX_FH_SIZE 32 ; inline
-: NFS_MAX_FH_SIZE NFSV4_MAX_FH_SIZE ; inline
+CONSTANT: NFSV4_MAX_FH_SIZE 128
+CONSTANT: NFSV3_MAX_FH_SIZE 64
+CONSTANT: NFSV2_MAX_FH_SIZE 32
+ALIAS: NFS_MAX_FH_SIZE NFSV4_MAX_FH_SIZE
 
-: MFSNAMELEN 15 ; inline
-: MNAMELEN 90 ; inline
-: MFSTYPENAMELEN 16 ; inline
+CONSTANT: MFSNAMELEN 15
+CONSTANT: MNAMELEN 90
+CONSTANT: MFSTYPENAMELEN 16
 
 C-STRUCT: fsid_t
     { { "int32_t" 2 } "val" } ;
index 378e335c115e265760775a941cc740ce676de4bc..f495f2af4e75001e18ed40bdb9ebe65246527293 100644 (file)
@@ -3,8 +3,8 @@
 USING: alien.syntax ;
 IN: unix.statfs.openbsd
 
-: MFSNAMELEN 16 ; inline
-: MNAMELEN 90 ; inline
+CONSTANT: MFSNAMELEN 16
+CONSTANT: MNAMELEN 90
 
 C-STRUCT: statfs
     { "u_int32_t"       "f_flags" }
index 7d1a6afb6146e8a4b7778d9d9904fc7768d6e6a3..3140b8500476d78556d961745f9364381ddbab88 100644 (file)
@@ -17,7 +17,7 @@ C-STRUCT: statvfs
     { "ulong"   "f_namemax" } ;
 
 ! Flags
-: ST_RDONLY   HEX: 1 ; inline ! Read-only file system
-: ST_NOSUID   HEX: 2 ; inline ! Does not honor setuid/setgid
+CONSTANT: ST_RDONLY   HEX: 1 ! Read-only file system
+CONSTANT: ST_NOSUID   HEX: 2 ! Does not honor setuid/setgid
 
 FUNCTION: int statvfs ( char* path, statvfs* buf ) ;
index 3bfbffa197f88e4e1b6d17a63015debd820cf910..c92fef6aaaeb551d7e202dde934e1ba6984add26 100644 (file)
@@ -19,13 +19,13 @@ C-STRUCT: statvfs64
 
 FUNCTION: int statvfs64 ( char* path, statvfs64* buf ) ;
 
-: ST_RDONLY 1 ; inline        ! Mount read-only.
-: ST_NOSUID 2 ; inline        ! Ignore suid and sgid bits.
-: ST_NODEV 4 ; inline         ! Disallow access to device special files.
-: ST_NOEXEC 8 ; inline        ! Disallow program execution.
-: ST_SYNCHRONOUS 16 ; inline  ! Writes are synced at once.
-: ST_MANDLOCK 64 ; inline     ! Allow mandatory locks on an FS.
-: ST_WRITE 128 ; inline       ! Write on file/directory/symlink.
-: ST_APPEND 256 ; inline      ! Append-only file.
-: ST_IMMUTABLE 512 ; inline   ! Immutable file.
-: ST_NOATIME 1024 ; inline    ! Do not update access times.
+CONSTANT: ST_RDONLY 1        ! Mount read-only.
+CONSTANT: ST_NOSUID 2        ! Ignore suid and sgid bits.
+CONSTANT: ST_NODEV 4         ! Disallow access to device special files.
+CONSTANT: ST_NOEXEC 8        ! Disallow program execution.
+CONSTANT: ST_SYNCHRONOUS 16  ! Writes are synced at once.
+CONSTANT: ST_MANDLOCK 64     ! Allow mandatory locks on an FS.
+CONSTANT: ST_WRITE 128       ! Write on file/directory/symlink.
+CONSTANT: ST_APPEND 256      ! Append-only file.
+CONSTANT: ST_IMMUTABLE 512   ! Immutable file.
+CONSTANT: ST_NOATIME 1024    ! Do not update access times.
index 7078ff9f33ad3c587d703d5059ee50542f19ead6..0aafad69fa6966a630bc60dd27117fdc09bae2a5 100644 (file)
@@ -17,7 +17,7 @@ C-STRUCT: statvfs
     { "ulong"   "f_namemax" } ;
 
 ! Flags
-: ST_RDONLY   HEX: 1 ; inline ! Read-only file system
-: ST_NOSUID   HEX: 2 ; inline ! Does not honor setuid/setgid
+CONSTANT: ST_RDONLY   HEX: 1 ! Read-only file system
+CONSTANT: ST_NOSUID   HEX: 2 ! Does not honor setuid/setgid
 
 FUNCTION: int statvfs ( char* path, statvfs* buf ) ;
index cf575c74b16d81e54aa1c84bc1e7035e75c90b5d..1adc1a3da8435cbd9a9327bb3d040b46de53db47 100644 (file)
@@ -3,31 +3,31 @@
 USING: alien.syntax ;
 IN: unix.statvfs.netbsd
 
-: _VFS_NAMELEN    32   ; inline
-: _VFS_MNAMELEN   1024 ; inline
+CONSTANT: _VFS_NAMELEN    32
+CONSTANT: _VFS_MNAMELEN   1024
 
 C-STRUCT: statvfs
-    { "ulong"   "f_flag" }   
+    { "ulong"   "f_flag" }
     { "ulong"   "f_bsize" }
-    { "ulong"   "f_frsize" }  
-    { "ulong"   "f_iosize" }  
-    { "fsblkcnt_t" "f_blocks" }       
-    { "fsblkcnt_t" "f_bfree" } 
-    { "fsblkcnt_t" "f_bavail" }       
-    { "fsblkcnt_t" "f_bresvd" }       
+    { "ulong"   "f_frsize" }
+    { "ulong"   "f_iosize" }
+    { "fsblkcnt_t" "f_blocks" }
+    { "fsblkcnt_t" "f_bfree" }
+    { "fsblkcnt_t" "f_bavail" }
+    { "fsblkcnt_t" "f_bresvd" }
     { "fsfilcnt_t" "f_files" }
     { "fsfilcnt_t" "f_ffree" }
-    { "fsfilcnt_t" "f_favail" }       
-    { "fsfilcnt_t" "f_fresvd" }       
-    { "uint64_t"   "f_syncreads" }    
-    { "uint64_t"   "f_syncwrites" }   
-    { "uint64_t"   "f_asyncreads" }   
-    { "uint64_t"   "f_asyncwrites" }  
+    { "fsfilcnt_t" "f_favail" }
+    { "fsfilcnt_t" "f_fresvd" }
+    { "uint64_t"   "f_syncreads" }
+    { "uint64_t"   "f_syncwrites" }
+    { "uint64_t"   "f_asyncreads" }
+    { "uint64_t"   "f_asyncwrites" }
     { "fsid_t"    "f_fsidx" }
     { "ulong"   "f_fsid" }
-    { "ulong"   "f_namemax" }      
+    { "ulong"   "f_namemax" }
     { "uid_t"   "f_owner" }
-    { { "uint32_t" 4 } "f_spare" }     
+    { { "uint32_t" 4 } "f_spare" }
     { { "char" _VFS_NAMELEN } "f_fstypename" }
     { { "char" _VFS_MNAMELEN } "f_mntonname" }
     { { "char" _VFS_MNAMELEN } "f_mntfromname" } ;
index 3f9353f92692a8295f6683667a96f81bf38b56ef..4ca8d0749daa8b7377264bf0424c6a8ac2dc7378 100644 (file)
@@ -16,7 +16,7 @@ C-STRUCT: statvfs
     { "ulong" "f_flag" }
     { "ulong" "f_namemax" } ;
 
-: ST_RDONLY       1 ; inline
-: ST_NOSUID       2 ; inline
+CONSTANT: ST_RDONLY       1
+CONSTANT: ST_NOSUID       2
 
 FUNCTION: int statvfs ( char* path, statvfs* buf ) ;
index 555f8e2c7da552c2cd79a53653b3bf1e30de8ea8..52e7473800a572834f35f541a34d91c6c206da22 100644 (file)
@@ -2,46 +2,33 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.syntax kernel libc
 sequences continuations byte-arrays strings math namespaces
-system combinators vocabs.loader qualified accessors
+system combinators vocabs.loader accessors
 stack-checker macros locals generalizations unix.types
-io io.files vocabs vocabs.loader ;
+io vocabs vocabs.loader ;
 IN: unix
 
-: PROT_NONE   0 ; inline
-: PROT_READ   1 ; inline
-: PROT_WRITE  2 ; inline
-: PROT_EXEC   4 ; inline
-
-: MAP_FILE    0 ; inline
-: MAP_SHARED  1 ; inline
-: MAP_PRIVATE 2 ; inline
-
-: MAP_FAILED -1 <alien> ; inline
-
-: NGROUPS_MAX 16 ; inline
-
-: DT_UNKNOWN   0 ; inline
-: DT_FIFO      1 ; inline
-: DT_CHR       2 ; inline
-: DT_DIR       4 ; inline
-: DT_BLK       6 ; inline
-: DT_REG       8 ; inline
-: DT_LNK      10 ; inline
-: DT_SOCK     12 ; inline
-: DT_WHT      14 ; inline
-
-: dirent-type>file-type ( ch -- type )
-    {
-        { DT_BLK  [ +block-device+ ] }
-        { DT_CHR  [ +character-device+ ] }
-        { DT_DIR  [ +directory+ ] }
-        { DT_LNK  [ +symbolic-link+ ] }
-        { DT_SOCK [ +socket+ ] }
-        { DT_FIFO [ +fifo+ ] }
-        { DT_REG  [ +regular-file+ ] }
-        { DT_WHT  [ +whiteout+ ] }
-        [ drop +unknown+ ]
-    } case ;
+CONSTANT: PROT_NONE   0
+CONSTANT: PROT_READ   1
+CONSTANT: PROT_WRITE  2
+CONSTANT: PROT_EXEC   4
+                       
+CONSTANT: MAP_FILE    0
+CONSTANT: MAP_SHARED  1
+CONSTANT: MAP_PRIVATE 2
+
+: MAP_FAILED ( -- alien ) -1 <alien> ; inline
+
+CONSTANT: NGROUPS_MAX 16
+
+CONSTANT: DT_UNKNOWN   0
+CONSTANT: DT_FIFO      1
+CONSTANT: DT_CHR       2
+CONSTANT: DT_DIR       4
+CONSTANT: DT_BLK       6
+CONSTANT: DT_REG       8
+CONSTANT: DT_LNK      10
+CONSTANT: DT_SOCK     12
+CONSTANT: DT_WHT      14
 
 C-STRUCT: group
     { "char*" "gr_name" }
@@ -181,7 +168,7 @@ FUNCTION: int readdir_r ( void* dirp, dirent* entry, dirent** result ) ;
 
 FUNCTION: ssize_t readlink ( char* path, char* buf, size_t bufsize ) ;
 
-: PATH_MAX 1024 ; inline
+CONSTANT: PATH_MAX 1024
 
 : read-symbolic-link ( path -- path )
     PATH_MAX <byte-array> dup [
index 8487d5adf2a01c9d52c9da5725af66f05c16fc5e..78417c66bf685a34833447588a5d4fe9293bc680 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.strings io.encodings.utf8
-io.unix.backend kernel math sequences splitting unix strings
+io.backend.unix kernel math sequences splitting unix strings
 combinators.short-circuit grouping byte-arrays combinators
 accessors math.parser fry assocs namespaces continuations
 vocabs.loader system ;
index e1756daa0071068518b8b0e5a9c81c2eb1ddd6e5..6b70ceee2e1d5318a8f1ab72581d9e5f5f8900b1 100644 (file)
@@ -6,18 +6,18 @@ unix calendar system accessors unix.time calendar.unix
 vocabs.loader ;
 IN: unix.utmpx
 
-: EMPTY 0 ; inline
-: RUN_LVL 1 ; inline
-: BOOT_TIME 2 ; inline
-: OLD_TIME 3 ; inline
-: NEW_TIME 4 ; inline
-: INIT_PROCESS 5 ; inline
-: LOGIN_PROCESS 6 ; inline
-: USER_PROCESS 7 ; inline
-: DEAD_PROCESS 8 ; inline
-: ACCOUNTING 9 ; inline
-: SIGNATURE 10 ; inline
-: SHUTDOWN_TIME 11 ; inline
+CONSTANT: EMPTY 0
+CONSTANT: RUN_LVL 1
+CONSTANT: BOOT_TIME 2
+CONSTANT: OLD_TIME 3
+CONSTANT: NEW_TIME 4
+CONSTANT: INIT_PROCESS 5
+CONSTANT: LOGIN_PROCESS 6
+CONSTANT: USER_PROCESS 7
+CONSTANT: DEAD_PROCESS 8
+CONSTANT: ACCOUNTING 9
+CONSTANT: SIGNATURE 10
+CONSTANT: SHUTDOWN_TIME 11
 
 FUNCTION: void setutxent ( ) ;
 FUNCTION: void endutxent ( ) ;
index ce8a7be88ccebd9bc3213fde2d9002370e9e5a50..f6c25980eac5f96f55716479b6cda9f58f819f5b 100644 (file)
@@ -1,6 +1,6 @@
 USING: assocs hashtables help.markup help.syntax
-io.streams.string io.files kernel strings present math multiline
-;
+io.streams.string io.files io.pathnames kernel strings present
+math multiline ;
 IN: urls
 
 HELP: url
index 7c41d3efdb7ec4f885aff4ccbd588702d495f1df..78e01fdaf7854a89cb608239068ffa115c693828 100644 (file)
@@ -51,7 +51,7 @@ IN: validators
     ] if ;
 
 : v-regexp ( str what regexp -- str )
-    >r over r> matches?
+    [ over ] dip matches?
     [ drop ] [ "invalid " prepend throw ] if ;
 
 : v-email ( str -- str )
index ea40594964760773e50c6efe0ccb165abd5d80f8..e4f64ca8f80c42119c766b815d82d2b7e73ed0c4 100644 (file)
@@ -17,7 +17,8 @@ M: vlist nth-unsafe vector>> nth-unsafe ;
 
 <PRIVATE
 
-: >vlist< [ length>> ] [ vector>> ] bi ; inline
+: >vlist< ( vlist -- len vec )
+    [ length>> ] [ vector>> ] bi ; inline
 
 : unshare ( len vec -- len vec' )
     clone [ set-length ] 2keep ; inline
index 251b59a4d837bcfe75460d928bdd845bc9e480a1..f76e389dce76d50e1c07a0c18022cccdd9d8cea7 100644 (file)
@@ -1,65 +1,64 @@
-USING: alias alien.syntax kernel math windows.types math.bitwise ;
+USING: alien.syntax kernel math windows.types math.bitwise ;
 IN: windows.advapi32
 LIBRARY: advapi32
 
-: PROV_RSA_FULL       1 ; inline
-: PROV_RSA_SIG        2 ; inline
-: PROV_DSS            3 ; inline
-: PROV_FORTEZZA       4 ; inline
-: PROV_MS_EXCHANGE    5 ; inline
-: PROV_SSL            6 ; inline
-: PROV_RSA_SCHANNEL  12 ; inline
-: PROV_DSS_DH        13 ; inline
-: PROV_EC_ECDSA_SIG  14 ; inline
-: PROV_EC_ECNRA_SIG  15 ; inline
-: PROV_EC_ECDSA_FULL 16 ; inline
-: PROV_EC_ECNRA_FULL 17 ; inline
-: PROV_DH_SCHANNEL   18 ; inline
-: PROV_SPYRUS_LYNKS  20 ; inline
-: PROV_RNG           21 ; inline
-: PROV_INTEL_SEC     22 ; inline
-: PROV_REPLACE_OWF   23 ; inline
-: PROV_RSA_AES       24 ; inline
-
-: MS_DEF_DH_SCHANNEL_PROV
-    "Microsoft DH Schannel Cryptographic Provider" ; inline
-
-: MS_DEF_DSS_DH_PROV
-    "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider" ; inline
-
-: MS_DEF_DSS_PROV
-    "Microsoft Base DSS Cryptographic Provider" ; inline
-
-: MS_DEF_PROV
-    "Microsoft Base Cryptographic Provider v1.0" ; inline
-
-: MS_DEF_RSA_SCHANNEL_PROV
-    "Microsoft RSA Schannel Cryptographic Provider" ; inline
+CONSTANT: PROV_RSA_FULL       1
+CONSTANT: PROV_RSA_SIG        2
+CONSTANT: PROV_DSS            3
+CONSTANT: PROV_FORTEZZA       4
+CONSTANT: PROV_MS_EXCHANGE    5
+CONSTANT: PROV_SSL            6
+CONSTANT: PROV_RSA_SCHANNEL  12
+CONSTANT: PROV_DSS_DH        13
+CONSTANT: PROV_EC_ECDSA_SIG  14
+CONSTANT: PROV_EC_ECNRA_SIG  15
+CONSTANT: PROV_EC_ECDSA_FULL 16
+CONSTANT: PROV_EC_ECNRA_FULL 17
+CONSTANT: PROV_DH_SCHANNEL   18
+CONSTANT: PROV_SPYRUS_LYNKS  20
+CONSTANT: PROV_RNG           21
+CONSTANT: PROV_INTEL_SEC     22
+CONSTANT: PROV_REPLACE_OWF   23
+CONSTANT: PROV_RSA_AES       24
+
+CONSTANT: MS_DEF_DH_SCHANNEL_PROV "Microsoft DH Schannel Cryptographic Provider"
+
+CONSTANT: MS_DEF_DSS_DH_PROV
+    "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
+
+CONSTANT: MS_DEF_DSS_PROV
+    "Microsoft Base DSS Cryptographic Provider"
+
+CONSTANT: MS_DEF_PROV
+    "Microsoft Base Cryptographic Provider v1.0"
+
+CONSTANT: MS_DEF_RSA_SCHANNEL_PROV
+    "Microsoft RSA Schannel Cryptographic Provider"
 
 ! Unsupported (!)
-: MS_DEF_RSA_SIG_PROV
-    "Microsoft RSA Signature Cryptographic Provider" ; inline
+CONSTANT: MS_DEF_RSA_SIG_PROV
+    "Microsoft RSA Signature Cryptographic Provider"
 
-: MS_ENH_DSS_DH_PROV
-    "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider" ; inline
+CONSTANT: MS_ENH_DSS_DH_PROV
+    "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
 
-: MS_ENH_RSA_AES_PROV
-    "Microsoft Enhanced RSA and AES Cryptographic Provider" ; inline
+CONSTANT: MS_ENH_RSA_AES_PROV
+    "Microsoft Enhanced RSA and AES Cryptographic Provider"
 
-: MS_ENHANCED_PROV
-    "Microsoft Enhanced Cryptographic Provider v1.0" ; inline
+CONSTANT: MS_ENHANCED_PROV
+    "Microsoft Enhanced Cryptographic Provider v1.0"
 
-: MS_SCARD_PROV
-    "Microsoft Base Smart Card Crypto Provider" ; inline
+CONSTANT: MS_SCARD_PROV
+    "Microsoft Base Smart Card Crypto Provider"
 
-: MS_STRONG_PROV
-    "Microsoft Strong Cryptographic Provider" ; inline
+CONSTANT: MS_STRONG_PROV
+    "Microsoft Strong Cryptographic Provider"
 
-: CRYPT_VERIFYCONTEXT  HEX: F0000000 ; inline
-: CRYPT_NEWKEYSET      HEX: 8 ; inline
-: CRYPT_DELETEKEYSET   HEX: 10 ; inline
-: CRYPT_MACHINE_KEYSET HEX: 20 ; inline
-: CRYPT_SILENT         HEX: 40 ; inline
+CONSTANT: CRYPT_VERIFYCONTEXT  HEX: F0000000
+CONSTANT: CRYPT_NEWKEYSET      HEX: 8
+CONSTANT: CRYPT_DELETEKEYSET   HEX: 10
+CONSTANT: CRYPT_MACHINE_KEYSET HEX: 20
+CONSTANT: CRYPT_SILENT         HEX: 40
 
 C-STRUCT: ACL
     { "BYTE" "AclRevision" }
@@ -70,16 +69,16 @@ C-STRUCT: ACL
 
 TYPEDEF: ACL* PACL
 
-: ACCESS_ALLOWED_ACE_TYPE 0 ; inline
-: ACCESS_DENIED_ACE_TYPE 1 ; inline
-: SYSTEM_AUDIT_ACE_TYPE 2 ; inline
-: SYSTEM_ALARM_ACE_TYPE 3 ; inline
+CONSTANT: ACCESS_ALLOWED_ACE_TYPE 0
+CONSTANT: ACCESS_DENIED_ACE_TYPE 1
+CONSTANT: SYSTEM_AUDIT_ACE_TYPE 2
+CONSTANT: SYSTEM_ALARM_ACE_TYPE 3
 
-: OBJECT_INHERIT_ACE HEX: 1 ; inline
-: CONTAINER_INHERIT_ACE HEX: 2 ; inline
-: NO_PROPAGATE_INHERIT_ACE HEX: 4 ; inline
-: INHERIT_ONLY_ACE HEX: 8 ; inline
-: VALID_INHERIT_FLAGS HEX: f ; inline
+CONSTANT: OBJECT_INHERIT_ACE HEX: 1
+CONSTANT: CONTAINER_INHERIT_ACE HEX: 2
+CONSTANT: NO_PROPAGATE_INHERIT_ACE HEX: 4
+CONSTANT: INHERIT_ONLY_ACE HEX: 8
+CONSTANT: VALID_INHERIT_FLAGS HEX: f
 
 C-STRUCT: ACE_HEADER
     { "BYTE" "AceType" }
@@ -125,46 +124,46 @@ TYPEDEF: ACCESS_ALLOWED_CALLBACK_ACE* PACCESS_ALLOWED_CALLBACK_ACE
 
 
 ! typedef enum _TOKEN_INFORMATION_CLASS {
-: TokenUser 1 ; inline
-: TokenGroups 2 ; inline
-: TokenPrivileges 3 ; inline
-: TokenOwner 4 ; inline
-: TokenPrimaryGroup 5 ; inline
-: TokenDefaultDacl 6 ; inline
-: TokenSource 7 ; inline
-: TokenType 8 ; inline
-: TokenImpersonationLevel 9 ; inline
-: TokenStatistics 10 ; inline
-: TokenRestrictedSids 11 ; inline
-: TokenSessionId 12 ; inline
-: TokenGroupsAndPrivileges 13 ; inline
-: TokenSessionReference 14 ; inline
-: TokenSandBoxInert 15 ; inline
+CONSTANT: TokenUser 1
+CONSTANT: TokenGroups 2
+CONSTANT: TokenPrivileges 3
+CONSTANT: TokenOwner 4
+CONSTANT: TokenPrimaryGroup 5
+CONSTANT: TokenDefaultDacl 6
+CONSTANT: TokenSource 7
+CONSTANT: TokenType 8
+CONSTANT: TokenImpersonationLevel 9
+CONSTANT: TokenStatistics 10
+CONSTANT: TokenRestrictedSids 11
+CONSTANT: TokenSessionId 12
+CONSTANT: TokenGroupsAndPrivileges 13
+CONSTANT: TokenSessionReference 14
+CONSTANT: TokenSandBoxInert 15
 ! } TOKEN_INFORMATION_CLASS;
 
-: DELETE                     HEX: 00010000 ; inline
-: READ_CONTROL               HEX: 00020000 ; inline
-: WRITE_DAC                  HEX: 00040000 ; inline
-: WRITE_OWNER                HEX: 00080000 ; inline
-: SYNCHRONIZE                HEX: 00100000 ; inline
-: STANDARD_RIGHTS_REQUIRED   HEX: 000f0000 ; inline
-
-: STANDARD_RIGHTS_READ       READ_CONTROL ; inline
-: STANDARD_RIGHTS_WRITE      READ_CONTROL ; inline
-: STANDARD_RIGHTS_EXECUTE    READ_CONTROL ; inline
-
-: TOKEN_TOKEN_ADJUST_DEFAULT   HEX: 0080 ; inline
-: TOKEN_ADJUST_GROUPS          HEX: 0040 ; inline
-: TOKEN_ADJUST_PRIVILEGES      HEX: 0020 ; inline
-: TOKEN_ADJUST_SESSIONID       HEX: 0100 ; inline
-: TOKEN_ASSIGN_PRIMARY         HEX: 0001 ; inline
-: TOKEN_DUPLICATE              HEX: 0002 ; inline
-: TOKEN_EXECUTE                STANDARD_RIGHTS_EXECUTE ; inline
-: TOKEN_IMPERSONATE            HEX: 0004 ; inline
-: TOKEN_QUERY                  HEX: 0008 ; inline
-: TOKEN_QUERY_SOURCE           HEX: 0010 ; inline
-: TOKEN_ADJUST_DEFAULT         HEX: 0080 ; inline
-: TOKEN_READ ( -- n ) STANDARD_RIGHTS_READ TOKEN_QUERY bitor ;
+CONSTANT: DELETE                     HEX: 00010000
+CONSTANT: READ_CONTROL               HEX: 00020000
+CONSTANT: WRITE_DAC                  HEX: 00040000
+CONSTANT: WRITE_OWNER                HEX: 00080000
+CONSTANT: SYNCHRONIZE                HEX: 00100000
+CONSTANT: STANDARD_RIGHTS_REQUIRED   HEX: 000f0000
+
+ALIAS: STANDARD_RIGHTS_READ       READ_CONTROL
+ALIAS: STANDARD_RIGHTS_WRITE      READ_CONTROL
+ALIAS: STANDARD_RIGHTS_EXECUTE    READ_CONTROL
+
+CONSTANT: TOKEN_TOKEN_ADJUST_DEFAULT   HEX: 0080
+CONSTANT: TOKEN_ADJUST_GROUPS          HEX: 0040
+CONSTANT: TOKEN_ADJUST_PRIVILEGES      HEX: 0020
+CONSTANT: TOKEN_ADJUST_SESSIONID       HEX: 0100
+CONSTANT: TOKEN_ASSIGN_PRIMARY         HEX: 0001
+CONSTANT: TOKEN_DUPLICATE              HEX: 0002
+ALIAS: TOKEN_EXECUTE                STANDARD_RIGHTS_EXECUTE
+CONSTANT: TOKEN_IMPERSONATE            HEX: 0004
+CONSTANT: TOKEN_QUERY                  HEX: 0008
+CONSTANT: TOKEN_QUERY_SOURCE           HEX: 0010
+CONSTANT: TOKEN_ADJUST_DEFAULT         HEX: 0080
+: TOKEN_READ ( -- n ) { STANDARD_RIGHTS_READ TOKEN_QUERY } flags ;
 
 : TOKEN_WRITE ( -- n )
     {
index 710feeec4d8c065c692c0465bbccb3f468639c9c..813d8315ac07f0a893c220e66e5e75fb49f37e6c 100755 (executable)
@@ -123,7 +123,7 @@ unless
 
 : (make-callbacks) ( implementations -- sequence )
     dup [ first ] map (make-iunknown-methods)
-    [ >r >r first2 r> r> swap (make-interface-callbacks) ]
+    [ [ first2 ] 2dip swap (make-interface-callbacks) ]
     curry map-index ;
 
 : (malloc-wrapped-object) ( wrapper -- wrapped-object )
index e3bec6d7ac17e5d9b5b2da8cd862f19ab6d8834a..0e9a03f0759d46ebc96b709d39ef63d60c7fd720 100755 (executable)
@@ -1,6 +1,6 @@
 USING: windows.dinput windows.kernel32 windows.ole32 windows.com
 windows.com.syntax alien alien.c-types alien.syntax kernel system namespaces
-combinators sequences symbols fry math accessors macros words quotations
+combinators sequences fry math accessors macros words quotations
 libc continuations generalizations splitting locals assocs init
 struct-arrays ;
 IN: windows.dinput.constants
old mode 100644 (file)
new mode 100755 (executable)
index 0c75f43..1cd22be
@@ -384,314 +384,314 @@ COM-INTERFACE: IDirectInput8W IUnknown {BF798031-483A-4DA2-AA99-5D64ED369700}
 
 FUNCTION: HRESULT DirectInput8Create ( HINSTANCE hinst, DWORD dwVersion, REFIID riidtlf, LPVOID* ppvOut, LPUNKNOWN punkOuter ) ;
 
-: DIRECTINPUT_VERSION HEX: 0800 ; inline
-
-: DI8DEVCLASS_ALL             0 ; inline
-: DI8DEVCLASS_DEVICE          1 ; inline
-: DI8DEVCLASS_POINTER         2 ; inline
-: DI8DEVCLASS_KEYBOARD        3 ; inline
-: DI8DEVCLASS_GAMECTRL        4 ; inline
-
-: DIEDFL_ALLDEVICES       HEX: 00000000 ; inline
-: DIEDFL_ATTACHEDONLY     HEX: 00000001 ; inline
-: DIEDFL_FORCEFEEDBACK    HEX: 00000100 ; inline
-: DIEDFL_INCLUDEALIASES   HEX: 00010000 ; inline
-: DIEDFL_INCLUDEPHANTOMS  HEX: 00020000 ; inline
-: DIEDFL_INCLUDEHIDDEN    HEX: 00040000 ; inline
-
-: DIENUM_STOP             0 ; inline
-: DIENUM_CONTINUE         1 ; inline
-
-: DIDF_ABSAXIS            1 ;
-: DIDF_RELAXIS            2 ;
-
-: DIDFT_ALL           HEX: 00000000 ; inline
-
-: DIDFT_RELAXIS       HEX: 00000001 ; inline
-: DIDFT_ABSAXIS       HEX: 00000002 ; inline
-: DIDFT_AXIS          HEX: 00000003 ; inline
-
-: DIDFT_PSHBUTTON     HEX: 00000004 ; inline
-: DIDFT_TGLBUTTON     HEX: 00000008 ; inline
-: DIDFT_BUTTON        HEX: 0000000C ; inline
-
-: DIDFT_POV           HEX: 00000010 ; inline
-: DIDFT_COLLECTION    HEX: 00000040 ; inline
-: DIDFT_NODATA        HEX: 00000080 ; inline
-
-: DIDFT_ANYINSTANCE   HEX: 00FFFF00 ; inline
-: DIDFT_INSTANCEMASK  DIDFT_ANYINSTANCE ; inline
+CONSTANT: DIRECTINPUT_VERSION HEX: 0800
+                               
+CONSTANT: DI8DEVCLASS_ALL             0
+CONSTANT: DI8DEVCLASS_DEVICE          1
+CONSTANT: DI8DEVCLASS_POINTER         2
+CONSTANT: DI8DEVCLASS_KEYBOARD        3
+CONSTANT: DI8DEVCLASS_GAMECTRL        4
+
+CONSTANT: DIEDFL_ALLDEVICES       HEX: 00000000
+CONSTANT: DIEDFL_ATTACHEDONLY     HEX: 00000001
+CONSTANT: DIEDFL_FORCEFEEDBACK    HEX: 00000100
+CONSTANT: DIEDFL_INCLUDEALIASES   HEX: 00010000
+CONSTANT: DIEDFL_INCLUDEPHANTOMS  HEX: 00020000
+CONSTANT: DIEDFL_INCLUDEHIDDEN    HEX: 00040000
+                                               
+CONSTANT: DIENUM_STOP             0
+CONSTANT: DIENUM_CONTINUE         1
+
+CONSTANT: DIDF_ABSAXIS            1
+CONSTANT: DIDF_RELAXIS            2
+
+CONSTANT: DIDFT_ALL           HEX: 00000000
+         
+CONSTANT: DIDFT_RELAXIS       HEX: 00000001
+CONSTANT: DIDFT_ABSAXIS       HEX: 00000002
+CONSTANT: DIDFT_AXIS          HEX: 00000003
+         
+CONSTANT: DIDFT_PSHBUTTON     HEX: 00000004
+CONSTANT: DIDFT_TGLBUTTON     HEX: 00000008
+CONSTANT: DIDFT_BUTTON        HEX: 0000000C
+         
+CONSTANT: DIDFT_POV           HEX: 00000010
+CONSTANT: DIDFT_COLLECTION    HEX: 00000040
+CONSTANT: DIDFT_NODATA        HEX: 00000080
+         
+CONSTANT: DIDFT_ANYINSTANCE   HEX: 00FFFF00
+ALIAS: DIDFT_INSTANCEMASK  DIDFT_ANYINSTANCE
 : DIDFT_MAKEINSTANCE ( n -- instance ) 8 shift                   ; inline
 : DIDFT_GETTYPE      ( n -- type     ) HEX: FF bitand            ; inline
 : DIDFT_GETINSTANCE  ( n -- instance ) -8 shift HEX: FFFF bitand ; inline
-: DIDFT_FFACTUATOR        HEX: 01000000 ; inline
-: DIDFT_FFEFFECTTRIGGER   HEX: 02000000 ; inline
-: DIDFT_OUTPUT            HEX: 10000000 ; inline
-: DIDFT_VENDORDEFINED     HEX: 04000000 ; inline
-: DIDFT_ALIAS             HEX: 08000000 ; inline
-: DIDFT_OPTIONAL          HEX: 80000000 ; inline
+CONSTANT: DIDFT_FFACTUATOR        HEX: 01000000
+CONSTANT: DIDFT_FFEFFECTTRIGGER   HEX: 02000000
+CONSTANT: DIDFT_OUTPUT            HEX: 10000000
+CONSTANT: DIDFT_VENDORDEFINED     HEX: 04000000
+CONSTANT: DIDFT_ALIAS             HEX: 08000000
+CONSTANT: DIDFT_OPTIONAL          HEX: 80000000
 
 : DIDFT_ENUMCOLLECTION ( n -- instance ) 8 shift HEX: FFFF bitand ; inline
-: DIDFT_NOCOLLECTION      HEX: 00FFFF00 ; inline
-
-: DIDOI_FFACTUATOR        HEX: 00000001 ; inline
-: DIDOI_FFEFFECTTRIGGER   HEX: 00000002 ; inline
-: DIDOI_POLLED            HEX: 00008000 ; inline
-: DIDOI_ASPECTPOSITION    HEX: 00000100 ; inline
-: DIDOI_ASPECTVELOCITY    HEX: 00000200 ; inline
-: DIDOI_ASPECTACCEL       HEX: 00000300 ; inline
-: DIDOI_ASPECTFORCE       HEX: 00000400 ; inline
-: DIDOI_ASPECTMASK        HEX: 00000F00 ; inline
-: DIDOI_GUIDISUSAGE       HEX: 00010000 ; inline
-
-: DISCL_EXCLUSIVE     HEX: 00000001 ; inline
-: DISCL_NONEXCLUSIVE  HEX: 00000002 ; inline
-: DISCL_FOREGROUND    HEX: 00000004 ; inline
-: DISCL_BACKGROUND    HEX: 00000008 ; inline
-: DISCL_NOWINKEY      HEX: 00000010 ; inline
-
-: DIK_ESCAPE          HEX: 01 ; inline
-: DIK_1               HEX: 02 ; inline
-: DIK_2               HEX: 03 ; inline
-: DIK_3               HEX: 04 ; inline
-: DIK_4               HEX: 05 ; inline
-: DIK_5               HEX: 06 ; inline
-: DIK_6               HEX: 07 ; inline
-: DIK_7               HEX: 08 ; inline
-: DIK_8               HEX: 09 ; inline
-: DIK_9               HEX: 0A ; inline
-: DIK_0               HEX: 0B ; inline
-: DIK_MINUS           HEX: 0C ; inline
-: DIK_EQUALS          HEX: 0D ; inline
-: DIK_BACK            HEX: 0E ; inline
-: DIK_TAB             HEX: 0F ; inline
-: DIK_Q               HEX: 10 ; inline
-: DIK_W               HEX: 11 ; inline
-: DIK_E               HEX: 12 ; inline
-: DIK_R               HEX: 13 ; inline
-: DIK_T               HEX: 14 ; inline
-: DIK_Y               HEX: 15 ; inline
-: DIK_U               HEX: 16 ; inline
-: DIK_I               HEX: 17 ; inline
-: DIK_O               HEX: 18 ; inline
-: DIK_P               HEX: 19 ; inline
-: DIK_LBRACKET        HEX: 1A ; inline
-: DIK_RBRACKET        HEX: 1B ; inline
-: DIK_RETURN          HEX: 1C ; inline
-: DIK_LCONTROL        HEX: 1D ; inline
-: DIK_A               HEX: 1E ; inline
-: DIK_S               HEX: 1F ; inline
-: DIK_D               HEX: 20 ; inline
-: DIK_F               HEX: 21 ; inline
-: DIK_G               HEX: 22 ; inline
-: DIK_H               HEX: 23 ; inline
-: DIK_J               HEX: 24 ; inline
-: DIK_K               HEX: 25 ; inline
-: DIK_L               HEX: 26 ; inline
-: DIK_SEMICOLON       HEX: 27 ; inline
-: DIK_APOSTROPHE      HEX: 28 ; inline
-: DIK_GRAVE           HEX: 29 ; inline
-: DIK_LSHIFT          HEX: 2A ; inline
-: DIK_BACKSLASH       HEX: 2B ; inline
-: DIK_Z               HEX: 2C ; inline
-: DIK_X               HEX: 2D ; inline
-: DIK_C               HEX: 2E ; inline
-: DIK_V               HEX: 2F ; inline
-: DIK_B               HEX: 30 ; inline
-: DIK_N               HEX: 31 ; inline
-: DIK_M               HEX: 32 ; inline
-: DIK_COMMA           HEX: 33 ; inline
-: DIK_PERIOD          HEX: 34 ; inline
-: DIK_SLASH           HEX: 35 ; inline
-: DIK_RSHIFT          HEX: 36 ; inline
-: DIK_MULTIPLY        HEX: 37 ; inline
-: DIK_LMENU           HEX: 38 ; inline
-: DIK_SPACE           HEX: 39 ; inline
-: DIK_CAPITAL         HEX: 3A ; inline
-: DIK_F1              HEX: 3B ; inline
-: DIK_F2              HEX: 3C ; inline
-: DIK_F3              HEX: 3D ; inline
-: DIK_F4              HEX: 3E ; inline
-: DIK_F5              HEX: 3F ; inline
-: DIK_F6              HEX: 40 ; inline
-: DIK_F7              HEX: 41 ; inline
-: DIK_F8              HEX: 42 ; inline
-: DIK_F9              HEX: 43 ; inline
-: DIK_F10             HEX: 44 ; inline
-: DIK_NUMLOCK         HEX: 45 ; inline
-: DIK_SCROLL          HEX: 46 ; inline
-: DIK_NUMPAD7         HEX: 47 ; inline
-: DIK_NUMPAD8         HEX: 48 ; inline
-: DIK_NUMPAD9         HEX: 49 ; inline
-: DIK_SUBTRACT        HEX: 4A ; inline
-: DIK_NUMPAD4         HEX: 4B ; inline
-: DIK_NUMPAD5         HEX: 4C ; inline
-: DIK_NUMPAD6         HEX: 4D ; inline
-: DIK_ADD             HEX: 4E ; inline
-: DIK_NUMPAD1         HEX: 4F ; inline
-: DIK_NUMPAD2         HEX: 50 ; inline
-: DIK_NUMPAD3         HEX: 51 ; inline
-: DIK_NUMPAD0         HEX: 52 ; inline
-: DIK_DECIMAL         HEX: 53 ; inline
-: DIK_OEM_102         HEX: 56 ; inline
-: DIK_F11             HEX: 57 ; inline
-: DIK_F12             HEX: 58 ; inline
-: DIK_F13             HEX: 64 ; inline
-: DIK_F14             HEX: 65 ; inline
-: DIK_F15             HEX: 66 ; inline
-: DIK_KANA            HEX: 70 ; inline
-: DIK_ABNT_C1         HEX: 73 ; inline
-: DIK_CONVERT         HEX: 79 ; inline
-: DIK_NOCONVERT       HEX: 7B ; inline
-: DIK_YEN             HEX: 7D ; inline
-: DIK_ABNT_C2         HEX: 7E ; inline
-: DIK_NUMPADEQUALS    HEX: 8D ; inline
-: DIK_PREVTRACK       HEX: 90 ; inline
-: DIK_AT              HEX: 91 ; inline
-: DIK_COLON           HEX: 92 ; inline
-: DIK_UNDERLINE       HEX: 93 ; inline
-: DIK_KANJI           HEX: 94 ; inline
-: DIK_STOP            HEX: 95 ; inline
-: DIK_AX              HEX: 96 ; inline
-: DIK_UNLABELED       HEX: 97 ; inline
-: DIK_NEXTTRACK       HEX: 99 ; inline
-: DIK_NUMPADENTER     HEX: 9C ; inline
-: DIK_RCONTROL        HEX: 9D ; inline
-: DIK_MUTE            HEX: A0 ; inline
-: DIK_CALCULATOR      HEX: A1 ; inline
-: DIK_PLAYPAUSE       HEX: A2 ; inline
-: DIK_MEDIASTOP       HEX: A4 ; inline
-: DIK_VOLUMEDOWN      HEX: AE ; inline
-: DIK_VOLUMEUP        HEX: B0 ; inline
-: DIK_WEBHOME         HEX: B2 ; inline
-: DIK_NUMPADCOMMA     HEX: B3 ; inline
-: DIK_DIVIDE          HEX: B5 ; inline
-: DIK_SYSRQ           HEX: B7 ; inline
-: DIK_RMENU           HEX: B8 ; inline
-: DIK_PAUSE           HEX: C5 ; inline
-: DIK_HOME            HEX: C7 ; inline
-: DIK_UP              HEX: C8 ; inline
-: DIK_PRIOR           HEX: C9 ; inline
-: DIK_LEFT            HEX: CB ; inline
-: DIK_RIGHT           HEX: CD ; inline
-: DIK_END             HEX: CF ; inline
-: DIK_DOWN            HEX: D0 ; inline
-: DIK_NEXT            HEX: D1 ; inline
-: DIK_INSERT          HEX: D2 ; inline
-: DIK_DELETE          HEX: D3 ; inline
-: DIK_LWIN            HEX: DB ; inline
-: DIK_RWIN            HEX: DC ; inline
-: DIK_APPS            HEX: DD ; inline
-: DIK_POWER           HEX: DE ; inline
-: DIK_SLEEP           HEX: DF ; inline
-: DIK_WAKE            HEX: E3 ; inline
-: DIK_WEBSEARCH       HEX: E5 ; inline
-: DIK_WEBFAVORITES    HEX: E6 ; inline
-: DIK_WEBREFRESH      HEX: E7 ; inline
-: DIK_WEBSTOP         HEX: E8 ; inline
-: DIK_WEBFORWARD      HEX: E9 ; inline
-: DIK_WEBBACK         HEX: EA ; inline
-: DIK_MYCOMPUTER      HEX: EB ; inline
-: DIK_MAIL            HEX: EC ; inline
-: DIK_MEDIASELECT     HEX: ED ; inline
-
-: DIK_BACKSPACE       DIK_BACK ; inline
-: DIK_NUMPADSTAR      DIK_MULTIPLY ; inline
-: DIK_LALT            DIK_LMENU ; inline
-: DIK_CAPSLOCK        DIK_CAPITAL ; inline
-: DIK_NUMPADMINUS     DIK_SUBTRACT ; inline
-: DIK_NUMPADPLUS      DIK_ADD ; inline
-: DIK_NUMPADPERIOD    DIK_DECIMAL ; inline
-: DIK_NUMPADSLASH     DIK_DIVIDE ; inline
-: DIK_RALT            DIK_RMENU ; inline
-: DIK_UPARROW         DIK_UP ; inline
-: DIK_PGUP            DIK_PRIOR ; inline
-: DIK_LEFTARROW       DIK_LEFT ; inline
-: DIK_RIGHTARROW      DIK_RIGHT ; inline
-: DIK_DOWNARROW       DIK_DOWN ; inline
-: DIK_PGDN            DIK_NEXT ; inline
-
-: DIK_CIRCUMFLEX      DIK_PREVTRACK ; inline
-
-: DI8DEVTYPE_DEVICE           HEX: 11 ; inline
-: DI8DEVTYPE_MOUSE            HEX: 12 ; inline
-: DI8DEVTYPE_KEYBOARD         HEX: 13 ; inline
-: DI8DEVTYPE_JOYSTICK         HEX: 14 ; inline
-: DI8DEVTYPE_GAMEPAD          HEX: 15 ; inline
-: DI8DEVTYPE_DRIVING          HEX: 16 ; inline
-: DI8DEVTYPE_FLIGHT           HEX: 17 ; inline
-: DI8DEVTYPE_1STPERSON        HEX: 18 ; inline
-: DI8DEVTYPE_DEVICECTRL       HEX: 19 ; inline
-: DI8DEVTYPE_SCREENPOINTER    HEX: 1A ; inline
-: DI8DEVTYPE_REMOTE           HEX: 1B ; inline
-: DI8DEVTYPE_SUPPLEMENTAL     HEX: 1C ; inline
+CONSTANT: DIDFT_NOCOLLECTION      HEX: 00FFFF00
+
+CONSTANT: DIDOI_FFACTUATOR        HEX: 00000001
+CONSTANT: DIDOI_FFEFFECTTRIGGER   HEX: 00000002
+CONSTANT: DIDOI_POLLED            HEX: 00008000
+CONSTANT: DIDOI_ASPECTPOSITION    HEX: 00000100
+CONSTANT: DIDOI_ASPECTVELOCITY    HEX: 00000200
+CONSTANT: DIDOI_ASPECTACCEL       HEX: 00000300
+CONSTANT: DIDOI_ASPECTFORCE       HEX: 00000400
+CONSTANT: DIDOI_ASPECTMASK        HEX: 00000F00
+CONSTANT: DIDOI_GUIDISUSAGE       HEX: 00010000
+
+CONSTANT: DISCL_EXCLUSIVE     HEX: 00000001
+CONSTANT: DISCL_NONEXCLUSIVE  HEX: 00000002
+CONSTANT: DISCL_FOREGROUND    HEX: 00000004
+CONSTANT: DISCL_BACKGROUND    HEX: 00000008
+CONSTANT: DISCL_NOWINKEY      HEX: 00000010
+
+CONSTANT: DIK_ESCAPE          HEX: 01
+CONSTANT: DIK_1               HEX: 02
+CONSTANT: DIK_2               HEX: 03
+CONSTANT: DIK_3               HEX: 04
+CONSTANT: DIK_4               HEX: 05
+CONSTANT: DIK_5               HEX: 06
+CONSTANT: DIK_6               HEX: 07
+CONSTANT: DIK_7               HEX: 08
+CONSTANT: DIK_8               HEX: 09
+CONSTANT: DIK_9               HEX: 0A
+CONSTANT: DIK_0               HEX: 0B
+CONSTANT: DIK_MINUS           HEX: 0C
+CONSTANT: DIK_EQUALS          HEX: 0D
+CONSTANT: DIK_BACK            HEX: 0E
+CONSTANT: DIK_TAB             HEX: 0F
+CONSTANT: DIK_Q               HEX: 10
+CONSTANT: DIK_W               HEX: 11
+CONSTANT: DIK_E               HEX: 12
+CONSTANT: DIK_R               HEX: 13
+CONSTANT: DIK_T               HEX: 14
+CONSTANT: DIK_Y               HEX: 15
+CONSTANT: DIK_U               HEX: 16
+CONSTANT: DIK_I               HEX: 17
+CONSTANT: DIK_O               HEX: 18
+CONSTANT: DIK_P               HEX: 19
+CONSTANT: DIK_LBRACKET        HEX: 1A
+CONSTANT: DIK_RBRACKET        HEX: 1B
+CONSTANT: DIK_RETURN          HEX: 1C
+CONSTANT: DIK_LCONTROL        HEX: 1D
+CONSTANT: DIK_A               HEX: 1E
+CONSTANT: DIK_S               HEX: 1F
+CONSTANT: DIK_D               HEX: 20
+CONSTANT: DIK_F               HEX: 21
+CONSTANT: DIK_G               HEX: 22
+CONSTANT: DIK_H               HEX: 23
+CONSTANT: DIK_J               HEX: 24
+CONSTANT: DIK_K               HEX: 25
+CONSTANT: DIK_L               HEX: 26
+CONSTANT: DIK_SEMICOLON       HEX: 27
+CONSTANT: DIK_APOSTROPHE      HEX: 28
+CONSTANT: DIK_GRAVE           HEX: 29
+CONSTANT: DIK_LSHIFT          HEX: 2A
+CONSTANT: DIK_BACKSLASH       HEX: 2B
+CONSTANT: DIK_Z               HEX: 2C
+CONSTANT: DIK_X               HEX: 2D
+CONSTANT: DIK_C               HEX: 2E
+CONSTANT: DIK_V               HEX: 2F
+CONSTANT: DIK_B               HEX: 30
+CONSTANT: DIK_N               HEX: 31
+CONSTANT: DIK_M               HEX: 32
+CONSTANT: DIK_COMMA           HEX: 33
+CONSTANT: DIK_PERIOD          HEX: 34
+CONSTANT: DIK_SLASH           HEX: 35
+CONSTANT: DIK_RSHIFT          HEX: 36
+CONSTANT: DIK_MULTIPLY        HEX: 37
+CONSTANT: DIK_LMENU           HEX: 38
+CONSTANT: DIK_SPACE           HEX: 39
+CONSTANT: DIK_CAPITAL         HEX: 3A
+CONSTANT: DIK_F1              HEX: 3B
+CONSTANT: DIK_F2              HEX: 3C
+CONSTANT: DIK_F3              HEX: 3D
+CONSTANT: DIK_F4              HEX: 3E
+CONSTANT: DIK_F5              HEX: 3F
+CONSTANT: DIK_F6              HEX: 40
+CONSTANT: DIK_F7              HEX: 41
+CONSTANT: DIK_F8              HEX: 42
+CONSTANT: DIK_F9              HEX: 43
+CONSTANT: DIK_F10             HEX: 44
+CONSTANT: DIK_NUMLOCK         HEX: 45
+CONSTANT: DIK_SCROLL          HEX: 46
+CONSTANT: DIK_NUMPAD7         HEX: 47
+CONSTANT: DIK_NUMPAD8         HEX: 48
+CONSTANT: DIK_NUMPAD9         HEX: 49
+CONSTANT: DIK_SUBTRACT        HEX: 4A
+CONSTANT: DIK_NUMPAD4         HEX: 4B
+CONSTANT: DIK_NUMPAD5         HEX: 4C
+CONSTANT: DIK_NUMPAD6         HEX: 4D
+CONSTANT: DIK_ADD             HEX: 4E
+CONSTANT: DIK_NUMPAD1         HEX: 4F
+CONSTANT: DIK_NUMPAD2         HEX: 50
+CONSTANT: DIK_NUMPAD3         HEX: 51
+CONSTANT: DIK_NUMPAD0         HEX: 52
+CONSTANT: DIK_DECIMAL         HEX: 53
+CONSTANT: DIK_OEM_102         HEX: 56
+CONSTANT: DIK_F11             HEX: 57
+CONSTANT: DIK_F12             HEX: 58
+CONSTANT: DIK_F13             HEX: 64
+CONSTANT: DIK_F14             HEX: 65
+CONSTANT: DIK_F15             HEX: 66
+CONSTANT: DIK_KANA            HEX: 70
+CONSTANT: DIK_ABNT_C1         HEX: 73
+CONSTANT: DIK_CONVERT         HEX: 79
+CONSTANT: DIK_NOCONVERT       HEX: 7B
+CONSTANT: DIK_YEN             HEX: 7D
+CONSTANT: DIK_ABNT_C2         HEX: 7E
+CONSTANT: DIK_NUMPADEQUALS    HEX: 8D
+CONSTANT: DIK_PREVTRACK       HEX: 90
+CONSTANT: DIK_AT              HEX: 91
+CONSTANT: DIK_COLON           HEX: 92
+CONSTANT: DIK_UNDERLINE       HEX: 93
+CONSTANT: DIK_KANJI           HEX: 94
+CONSTANT: DIK_STOP            HEX: 95
+CONSTANT: DIK_AX              HEX: 96
+CONSTANT: DIK_UNLABELED       HEX: 97
+CONSTANT: DIK_NEXTTRACK       HEX: 99
+CONSTANT: DIK_NUMPADENTER     HEX: 9C
+CONSTANT: DIK_RCONTROL        HEX: 9D
+CONSTANT: DIK_MUTE            HEX: A0
+CONSTANT: DIK_CALCULATOR      HEX: A1
+CONSTANT: DIK_PLAYPAUSE       HEX: A2
+CONSTANT: DIK_MEDIASTOP       HEX: A4
+CONSTANT: DIK_VOLUMEDOWN      HEX: AE
+CONSTANT: DIK_VOLUMEUP        HEX: B0
+CONSTANT: DIK_WEBHOME         HEX: B2
+CONSTANT: DIK_NUMPADCOMMA     HEX: B3
+CONSTANT: DIK_DIVIDE          HEX: B5
+CONSTANT: DIK_SYSRQ           HEX: B7
+CONSTANT: DIK_RMENU           HEX: B8
+CONSTANT: DIK_PAUSE           HEX: C5
+CONSTANT: DIK_HOME            HEX: C7
+CONSTANT: DIK_UP              HEX: C8
+CONSTANT: DIK_PRIOR           HEX: C9
+CONSTANT: DIK_LEFT            HEX: CB
+CONSTANT: DIK_RIGHT           HEX: CD
+CONSTANT: DIK_END             HEX: CF
+CONSTANT: DIK_DOWN            HEX: D0
+CONSTANT: DIK_NEXT            HEX: D1
+CONSTANT: DIK_INSERT          HEX: D2
+CONSTANT: DIK_DELETE          HEX: D3
+CONSTANT: DIK_LWIN            HEX: DB
+CONSTANT: DIK_RWIN            HEX: DC
+CONSTANT: DIK_APPS            HEX: DD
+CONSTANT: DIK_POWER           HEX: DE
+CONSTANT: DIK_SLEEP           HEX: DF
+CONSTANT: DIK_WAKE            HEX: E3
+CONSTANT: DIK_WEBSEARCH       HEX: E5
+CONSTANT: DIK_WEBFAVORITES    HEX: E6
+CONSTANT: DIK_WEBREFRESH      HEX: E7
+CONSTANT: DIK_WEBSTOP         HEX: E8
+CONSTANT: DIK_WEBFORWARD      HEX: E9
+CONSTANT: DIK_WEBBACK         HEX: EA
+CONSTANT: DIK_MYCOMPUTER      HEX: EB
+CONSTANT: DIK_MAIL            HEX: EC
+CONSTANT: DIK_MEDIASELECT     HEX: ED
+
+ALIAS: DIK_BACKSPACE       DIK_BACK
+ALIAS: DIK_NUMPADSTAR      DIK_MULTIPLY
+ALIAS: DIK_LALT            DIK_LMENU
+ALIAS: DIK_CAPSLOCK        DIK_CAPITAL
+ALIAS: DIK_NUMPADMINUS     DIK_SUBTRACT
+ALIAS: DIK_NUMPADPLUS      DIK_ADD
+ALIAS: DIK_NUMPADPERIOD    DIK_DECIMAL
+ALIAS: DIK_NUMPADSLASH     DIK_DIVIDE
+ALIAS: DIK_RALT            DIK_RMENU
+ALIAS: DIK_UPARROW         DIK_UP
+ALIAS: DIK_PGUP            DIK_PRIOR
+ALIAS: DIK_LEFTARROW       DIK_LEFT
+ALIAS: DIK_RIGHTARROW      DIK_RIGHT
+ALIAS: DIK_DOWNARROW       DIK_DOWN
+ALIAS: DIK_PGDN            DIK_NEXT
+
+ALIAS: DIK_CIRCUMFLEX      DIK_PREVTRACK
+
+CONSTANT: DI8DEVTYPE_DEVICE           HEX: 11
+CONSTANT: DI8DEVTYPE_MOUSE            HEX: 12
+CONSTANT: DI8DEVTYPE_KEYBOARD         HEX: 13
+CONSTANT: DI8DEVTYPE_JOYSTICK         HEX: 14
+CONSTANT: DI8DEVTYPE_GAMEPAD          HEX: 15
+CONSTANT: DI8DEVTYPE_DRIVING          HEX: 16
+CONSTANT: DI8DEVTYPE_FLIGHT           HEX: 17
+CONSTANT: DI8DEVTYPE_1STPERSON        HEX: 18
+CONSTANT: DI8DEVTYPE_DEVICECTRL       HEX: 19
+CONSTANT: DI8DEVTYPE_SCREENPOINTER    HEX: 1A
+CONSTANT: DI8DEVTYPE_REMOTE           HEX: 1B
+CONSTANT: DI8DEVTYPE_SUPPLEMENTAL     HEX: 1C
 
 : GET_DIDEVICE_TYPE ( dwType -- type ) HEX: FF bitand ; inline
 
-: DIPROPRANGE_NOMIN       HEX: 80000000 ; inline
-: DIPROPRANGE_NOMAX       HEX: 7FFFFFFF ; inline
-: MAXCPOINTSNUM           8 ; inline
-
-: DIPH_DEVICE             0 ; inline
-: DIPH_BYOFFSET           1 ; inline
-: DIPH_BYID               2 ; inline
-: DIPH_BYUSAGE            3 ; inline
+CONSTANT: DIPROPRANGE_NOMIN       HEX: 80000000
+CONSTANT: DIPROPRANGE_NOMAX       HEX: 7FFFFFFF
+CONSTANT: MAXCPOINTSNUM           8
 
+CONSTANT: DIPH_DEVICE             0
+CONSTANT: DIPH_BYOFFSET           1
+CONSTANT: DIPH_BYID               2
+CONSTANT: DIPH_BYUSAGE            3
+                                   
 : DIMAKEUSAGEDWORD ( UsagePage Usage -- DWORD ) 16 shift bitor ; inline
 
-: DIPROP_BUFFERSIZE           1 <alien> ; inline
-: DIPROP_AXISMODE             2 <alien> ; inline
-
-: DIPROPAXISMODE_ABS      0 ; inline
-: DIPROPAXISMODE_REL      1 ; inline
-
-: DIPROP_GRANULARITY          3 <alien> ; inline
-: DIPROP_RANGE                4 <alien> ; inline
-: DIPROP_DEADZONE             5 <alien> ; inline
-: DIPROP_SATURATION           6 <alien> ; inline
-: DIPROP_FFGAIN               7 <alien> ; inline
-: DIPROP_FFLOAD               8 <alien> ; inline
-: DIPROP_AUTOCENTER           9 <alien> ; inline
-
-: DIPROPAUTOCENTER_OFF    0 ; inline
-: DIPROPAUTOCENTER_ON     1 ; inline
-
-: DIPROP_CALIBRATIONMODE     10 <alien> ; inline
-
-: DIPROPCALIBRATIONMODE_COOKED    0 ; inline
-: DIPROPCALIBRATIONMODE_RAW       1 ; inline
-
-: DIPROP_CALIBRATION         11 <alien> ; inline
-: DIPROP_GUIDANDPATH         12 <alien> ; inline
-: DIPROP_INSTANCENAME        13 <alien> ; inline
-: DIPROP_PRODUCTNAME         14 <alien> ; inline
-: DIPROP_JOYSTICKID          15 <alien> ; inline
-: DIPROP_GETPORTDISPLAYNAME  16 <alien> ; inline
-: DIPROP_PHYSICALRANGE       18 <alien> ; inline
-: DIPROP_LOGICALRANGE        19 <alien> ; inline
-: DIPROP_KEYNAME             20 <alien> ; inline
-: DIPROP_CPOINTS             21 <alien> ; inline
-: DIPROP_APPDATA             22 <alien> ; inline
-: DIPROP_SCANCODE            23 <alien> ; inline
-: DIPROP_VIDPID              24 <alien> ; inline
-: DIPROP_USERNAME            25 <alien> ; inline
-: DIPROP_TYPENAME            26 <alien> ; inline
-
-: GUID_XAxis          GUID: {A36D02E0-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_YAxis          GUID: {A36D02E1-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_ZAxis          GUID: {A36D02E2-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_RxAxis         GUID: {A36D02F4-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_RyAxis         GUID: {A36D02F5-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_RzAxis         GUID: {A36D02E3-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_Slider         GUID: {A36D02E4-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_Button         GUID: {A36D02F0-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_Key            GUID: {55728220-D33C-11CF-BFC7-444553540000} ; inline
-: GUID_POV            GUID: {A36D02F2-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_Unknown        GUID: {A36D02F3-C9F3-11CF-BFC7-444553540000} ; inline
-: GUID_SysMouse       GUID: {6F1D2B60-D5A0-11CF-BFC7-444553540000} ; inline
-: GUID_SysKeyboard    GUID: {6F1D2B61-D5A0-11CF-BFC7-444553540000} ; inline
-: GUID_Joystick       GUID: {6F1D2B70-D5A0-11CF-BFC7-444553540000} ; inline
-: GUID_SysMouseEm     GUID: {6F1D2B80-D5A0-11CF-BFC7-444553540000} ; inline
-: GUID_SysMouseEm2    GUID: {6F1D2B81-D5A0-11CF-BFC7-444553540000} ; inline
-: GUID_SysKeyboardEm  GUID: {6F1D2B82-D5A0-11CF-BFC7-444553540000} ; inline
-: GUID_SysKeyboardEm2 GUID: {6F1D2B83-D5A0-11CF-BFC7-444553540000} ; inline
+: DIPROP_BUFFERSIZE ( -- alien ) 1 <alien> ; inline
+: DIPROP_AXISMODE   ( -- alien ) 2 <alien> ; inline
+
+CONSTANT: DIPROPAXISMODE_ABS      0
+CONSTANT: DIPROPAXISMODE_REL      1
+                                   
+: DIPROP_GRANULARITY ( -- alien ) 3 <alien> ; inline
+: DIPROP_RANGE       ( -- alien ) 4 <alien> ; inline
+: DIPROP_DEADZONE    ( -- alien ) 5 <alien> ; inline
+: DIPROP_SATURATION  ( -- alien ) 6 <alien> ; inline
+: DIPROP_FFGAIN      ( -- alien ) 7 <alien> ; inline
+: DIPROP_FFLOAD      ( -- alien ) 8 <alien> ; inline
+: DIPROP_AUTOCENTER  ( -- alien ) 9 <alien> ; inline
+
+CONSTANT: DIPROPAUTOCENTER_OFF    0
+CONSTANT: DIPROPAUTOCENTER_ON     1
+
+: DIPROP_CALIBRATIONMODE ( -- alien ) 10 <alien> ; inline
+
+CONSTANT: DIPROPCALIBRATIONMODE_COOKED    0
+CONSTANT: DIPROPCALIBRATIONMODE_RAW       1
+
+: DIPROP_CALIBRATION ( -- alien )        11 <alien> ; inline
+: DIPROP_GUIDANDPATH ( -- alien )        12 <alien> ; inline
+: DIPROP_INSTANCENAME ( -- alien )       13 <alien> ; inline
+: DIPROP_PRODUCTNAME ( -- alien )        14 <alien> ; inline
+: DIPROP_JOYSTICKID ( -- alien )         15 <alien> ; inline
+: DIPROP_GETPORTDISPLAYNAME ( -- alien ) 16 <alien> ; inline
+: DIPROP_PHYSICALRANGE ( -- alien )      18 <alien> ; inline
+: DIPROP_LOGICALRANGE ( -- alien )       19 <alien> ; inline
+: DIPROP_KEYNAME ( -- alien )            20 <alien> ; inline
+: DIPROP_CPOINTS ( -- alien )            21 <alien> ; inline
+: DIPROP_APPDATA ( -- alien )            22 <alien> ; inline
+: DIPROP_SCANCODE ( -- alien )           23 <alien> ; inline
+: DIPROP_VIDPID ( -- alien )             24 <alien> ; inline
+: DIPROP_USERNAME ( -- alien )           25 <alien> ; inline
+: DIPROP_TYPENAME ( -- alien )           26 <alien> ; inline
+
+CONSTANT: GUID_XAxis          GUID: {A36D02E0-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_YAxis          GUID: {A36D02E1-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_ZAxis          GUID: {A36D02E2-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_RxAxis         GUID: {A36D02F4-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_RyAxis         GUID: {A36D02F5-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_RzAxis         GUID: {A36D02E3-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_Slider         GUID: {A36D02E4-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_Button         GUID: {A36D02F0-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_Key            GUID: {55728220-D33C-11CF-BFC7-444553540000}
+CONSTANT: GUID_POV            GUID: {A36D02F2-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_Unknown        GUID: {A36D02F3-C9F3-11CF-BFC7-444553540000}
+CONSTANT: GUID_SysMouse       GUID: {6F1D2B60-D5A0-11CF-BFC7-444553540000}
+CONSTANT: GUID_SysKeyboard    GUID: {6F1D2B61-D5A0-11CF-BFC7-444553540000}
+CONSTANT: GUID_Joystick       GUID: {6F1D2B70-D5A0-11CF-BFC7-444553540000}
+CONSTANT: GUID_SysMouseEm     GUID: {6F1D2B80-D5A0-11CF-BFC7-444553540000}
+CONSTANT: GUID_SysMouseEm2    GUID: {6F1D2B81-D5A0-11CF-BFC7-444553540000}
+CONSTANT: GUID_SysKeyboardEm  GUID: {6F1D2B82-D5A0-11CF-BFC7-444553540000}
+CONSTANT: GUID_SysKeyboardEm2 GUID: {6F1D2B83-D5A0-11CF-BFC7-444553540000}
index 8384bb1acc18b4f4550f834b3be1ade6655bcbd6..4543aa703a0188db1a0bde7bdfb4ca19ffcb9656 100644 (file)
@@ -36,26 +36,30 @@ SYMBOL: +listener-dragdrop-wrapper+
 {\r
     { "IDropTarget" {\r
         [ ! DragEnter\r
-            >r 2drop\r
-            filenames-from-data-object\r
-            length 1 = [ DROPEFFECT_COPY ] [ DROPEFFECT_NONE ] if\r
-            dup 0 r> set-ulong-nth\r
+            [\r
+                2drop\r
+                filenames-from-data-object\r
+                length 1 = [ DROPEFFECT_COPY ] [ DROPEFFECT_NONE ] if\r
+                dup 0\r
+            ] dip set-ulong-nth\r
             >>last-drop-effect drop\r
             S_OK\r
         ] [ ! DragOver\r
-            >r 2drop last-drop-effect>> 0 r> set-ulong-nth\r
+            [ 2drop last-drop-effect>> 0 ] dip set-ulong-nth\r
             S_OK\r
         ] [ ! DragLeave\r
             drop S_OK\r
         ] [ ! Drop\r
-            >r 2drop nip\r
-            filenames-from-data-object\r
-            dup length 1 = [\r
-                first unparse [ "USE: parser " % % " run-file" % ] "" make\r
-                eval-listener\r
-                DROPEFFECT_COPY\r
-            ] [ 2drop DROPEFFECT_NONE ] if\r
-            0 r> set-ulong-nth\r
+            [\r
+                2drop nip\r
+                filenames-from-data-object\r
+                dup length 1 = [\r
+                    first unparse [ "USE: parser " % % " run-file" % ] "" make\r
+                    eval-listener\r
+                    DROPEFFECT_COPY\r
+                ] [ 2drop DROPEFFECT_NONE ] if\r
+                0\r
+            ] dip set-ulong-nth\r
             S_OK\r
         ]\r
     } }\r
index bd938fdbad9a12ecca185a69237d61f02d38bab7..56bba768de9e39c8d65f223e7a0722e0148c2f48 100644 (file)
@@ -1,10 +1,9 @@
-USING: kernel ;
 IN: windows.errors 
 
-: ERROR_SUCCESS 0 ; inline
-: ERROR_NO_MORE_FILES 18 ; inline
-: ERROR_HANDLE_EOF 38 ; inline
-: ERROR_BROKEN_PIPE 109 ; inline
-: ERROR_ENVVAR_NOT_FOUND 203 ; inline
-: ERROR_IO_INCOMPLETE 996 ; inline
-: ERROR_IO_PENDING 997 ; inline
+CONSTANT: ERROR_SUCCESS 0
+CONSTANT: ERROR_NO_MORE_FILES 18
+CONSTANT: ERROR_HANDLE_EOF 38
+CONSTANT: ERROR_BROKEN_PIPE 109
+CONSTANT: ERROR_ENVVAR_NOT_FOUND 203
+CONSTANT: ERROR_IO_INCOMPLETE 996
+CONSTANT: ERROR_IO_PENDING 997
index 32e4f3cd8a66232a9b88502f98819a56ab6b64db..077adf1961bc75eb4731cf5d78c0777b4737925f 100755 (executable)
@@ -1,38 +1,38 @@
 ! FUNCTION: AbortDoc
 ! Copyright (C) 2005, 2006 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.syntax kernel windows.types alias ;
+USING: alien alien.syntax kernel windows.types ;
 IN: windows.gdi32
 
 ! Stock Logical Objects
-: WHITE_BRUSH         0 ; inline
-: LTGRAY_BRUSH        1 ; inline
-: GRAY_BRUSH          2 ; inline
-: DKGRAY_BRUSH        3 ; inline
-: BLACK_BRUSH         4 ; inline
-: NULL_BRUSH          5 ; inline
-: HOLLOW_BRUSH        NULL_BRUSH ; inline
-: WHITE_PEN           6 ; inline
-: BLACK_PEN           7 ; inline
-: NULL_PEN            8 ; inline
-: OEM_FIXED_FONT      10 ; inline
-: ANSI_FIXED_FONT     11 ; inline
-: ANSI_VAR_FONT       12 ; inline
-: SYSTEM_FONT         13 ; inline
-: DEVICE_DEFAULT_FONT 14 ; inline
-: DEFAULT_PALETTE     15 ; inline
-: SYSTEM_FIXED_FONT   16 ; inline
-: DEFAULT_GUI_FONT    17 ; inline
-: DC_BRUSH            18 ; inline
-: DC_PEN              19 ; inline
+CONSTANT: WHITE_BRUSH         0
+CONSTANT: LTGRAY_BRUSH        1
+CONSTANT: GRAY_BRUSH          2
+CONSTANT: DKGRAY_BRUSH        3
+CONSTANT: BLACK_BRUSH         4
+CONSTANT: NULL_BRUSH          5
+ALIAS: HOLLOW_BRUSH        NULL_BRUSH
+CONSTANT: WHITE_PEN           6
+CONSTANT: BLACK_PEN           7
+CONSTANT: NULL_PEN            8
+CONSTANT: OEM_FIXED_FONT      10
+CONSTANT: ANSI_FIXED_FONT     11
+CONSTANT: ANSI_VAR_FONT       12
+CONSTANT: SYSTEM_FONT         13
+CONSTANT: DEVICE_DEFAULT_FONT 14
+CONSTANT: DEFAULT_PALETTE     15
+CONSTANT: SYSTEM_FIXED_FONT   16
+CONSTANT: DEFAULT_GUI_FONT    17
+CONSTANT: DC_BRUSH            18
+CONSTANT: DC_PEN              19
+                  
+CONSTANT: BI_RGB        0
+CONSTANT: BI_RLE8       1
+CONSTANT: BI_RLE4       2
+CONSTANT: BI_BITFIELDS  3
 
-: BI_RGB        0 ; inline
-: BI_RLE8       1 ; inline
-: BI_RLE4       2 ; inline
-: BI_BITFIELDS  3 ; inline
-
-: DIB_RGB_COLORS 0 ; inline
-: DIB_PAL_COLORS 1 ; inline
+CONSTANT: DIB_RGB_COLORS 0
+CONSTANT: DIB_PAL_COLORS 1
 
 LIBRARY: gdi32
 
old mode 100644 (file)
new mode 100755 (executable)
index 7d6f0ab..c38b5f9
@@ -1,93 +1,93 @@
 ! Copyright (C) 2005, 2006 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.syntax kernel windows.types alias ;
+USING: alien alien.syntax kernel windows.types ;
 IN: windows.kernel32
 
-: MAX_PATH 260 ; inline
+CONSTANT: MAX_PATH 260
 
-: GHND          HEX: 40 ; inline
-: GMEM_FIXED          0 ; inline
-: GMEM_MOVEABLE       2 ; inline
-: GMEM_ZEROINIT HEX: 40 ; inline
-: GPTR          HEX: 40 ; inline
+CONSTANT: GHND          HEX: 40
+CONSTANT: GMEM_FIXED          0
+CONSTANT: GMEM_MOVEABLE       2
+CONSTANT: GMEM_ZEROINIT HEX: 40
+CONSTANT: GPTR          HEX: 40
 
-: GENERIC_READ    HEX: 80000000 ; inline
-: GENERIC_WRITE   HEX: 40000000 ; inline
-: GENERIC_EXECUTE HEX: 20000000 ; inline
-: GENERIC_ALL     HEX: 10000000 ; inline
+CONSTANT: GENERIC_READ    HEX: 80000000
+CONSTANT: GENERIC_WRITE   HEX: 40000000
+CONSTANT: GENERIC_EXECUTE HEX: 20000000
+CONSTANT: GENERIC_ALL     HEX: 10000000
 
-: CREATE_NEW        1 ; inline
-: CREATE_ALWAYS     2 ; inline
-: OPEN_EXISTING     3 ; inline
-: OPEN_ALWAYS       4 ; inline
-: TRUNCATE_EXISTING 5 ; inline
+CONSTANT: CREATE_NEW        1
+CONSTANT: CREATE_ALWAYS     2
+CONSTANT: OPEN_EXISTING     3
+CONSTANT: OPEN_ALWAYS       4
+CONSTANT: TRUNCATE_EXISTING 5
               
-: FILE_LIST_DIRECTORY       HEX: 00000001 ; inline
-: FILE_READ_DAT             HEX: 00000001 ; inline
-: FILE_ADD_FILE             HEX: 00000002 ; inline
-: FILE_WRITE_DATA           HEX: 00000002 ; inline
-: FILE_ADD_SUBDIRECTORY     HEX: 00000004 ; inline
-: FILE_APPEND_DATA          HEX: 00000004 ; inline
-: FILE_CREATE_PIPE_INSTANCE HEX: 00000004 ; inline
-: FILE_READ_EA              HEX: 00000008 ; inline
-: FILE_READ_PROPERTIES      HEX: 00000008 ; inline
-: FILE_WRITE_EA             HEX: 00000010 ; inline
-: FILE_WRITE_PROPERTIES     HEX: 00000010 ; inline
-: FILE_EXECUTE              HEX: 00000020 ; inline
-: FILE_TRAVERSE             HEX: 00000020 ; inline
-: FILE_DELETE_CHILD         HEX: 00000040 ; inline
-: FILE_READ_ATTRIBUTES      HEX: 00000080 ; inline
-: FILE_WRITE_ATTRIBUTES     HEX: 00000100 ; inline
-
-: FILE_SHARE_READ        1 ; inline
-: FILE_SHARE_WRITE       2 ; inline
-: FILE_SHARE_DELETE      4 ; inline
-: FILE_SHARE_VALID_FLAGS 7 ; inline
-
-: FILE_FLAG_WRITE_THROUGH       HEX: 80000000 ; inline
-: FILE_FLAG_OVERLAPPED          HEX: 40000000 ; inline
-: FILE_FLAG_NO_BUFFERING        HEX: 20000000 ; inline
-: FILE_FLAG_RANDOM_ACCESS       HEX: 10000000 ; inline
-: FILE_FLAG_SEQUENTIAL_SCAN     HEX: 08000000 ; inline
-: FILE_FLAG_DELETE_ON_CLOSE     HEX: 04000000 ; inline
-: FILE_FLAG_BACKUP_SEMANTICS    HEX: 02000000 ; inline
-: FILE_FLAG_POSIX_SEMANTICS     HEX: 01000000 ; inline
-: FILE_FLAG_OPEN_REPARSE_POINT  HEX: 00200000 ; inline
-: FILE_FLAG_OPEN_NO_RECALL      HEX: 00100000 ; inline
-: FILE_FLAG_FIRST_PIPE_INSTANCE HEX: 00080000 ; inline
-
-: FILE_ATTRIBUTE_READONLY            HEX: 00000001 ; inline
-: FILE_ATTRIBUTE_HIDDEN              HEX: 00000002 ; inline
-: FILE_ATTRIBUTE_SYSTEM              HEX: 00000004 ; inline
-: FILE_ATTRIBUTE_DIRECTORY           HEX: 00000010 ; inline
-: FILE_ATTRIBUTE_ARCHIVE             HEX: 00000020 ; inline
-: FILE_ATTRIBUTE_DEVICE              HEX: 00000040 ; inline
-: FILE_ATTRIBUTE_NORMAL              HEX: 00000080 ; inline
-: FILE_ATTRIBUTE_TEMPORARY           HEX: 00000100 ; inline
-: FILE_ATTRIBUTE_SPARSE_FILE         HEX: 00000200 ; inline
-: FILE_ATTRIBUTE_REPARSE_POINT       HEX: 00000400 ; inline
-: FILE_ATTRIBUTE_COMPRESSED          HEX: 00000800 ; inline
-: FILE_ATTRIBUTE_OFFLINE             HEX: 00001000 ; inline
-: FILE_ATTRIBUTE_NOT_CONTENT_INDEXED HEX: 00002000 ; inline
-: FILE_ATTRIBUTE_ENCRYPTED           HEX: 00004000 ; inline
-
-: FILE_NOTIFY_CHANGE_FILE        HEX: 001 ; inline
-: FILE_NOTIFY_CHANGE_DIR_NAME    HEX: 002 ; inline
-: FILE_NOTIFY_CHANGE_ATTRIBUTES  HEX: 004 ; inline
-: FILE_NOTIFY_CHANGE_SIZE        HEX: 008 ; inline
-: FILE_NOTIFY_CHANGE_LAST_WRITE  HEX: 010 ; inline
-: FILE_NOTIFY_CHANGE_LAST_ACCESS HEX: 020 ; inline
-: FILE_NOTIFY_CHANGE_CREATION    HEX: 040 ; inline
-: FILE_NOTIFY_CHANGE_EA          HEX: 080 ; inline
-: FILE_NOTIFY_CHANGE_SECURITY    HEX: 100 ; inline
-: FILE_NOTIFY_CHANGE_FILE_NAME   HEX: 200 ; inline
-: FILE_NOTIFY_CHANGE_ALL         HEX: 3ff ; inline
-
-: FILE_ACTION_ADDED 1 ; inline
-: FILE_ACTION_REMOVED 2 ; inline
-: FILE_ACTION_MODIFIED 3 ; inline
-: FILE_ACTION_RENAMED_OLD_NAME 4 ; inline
-: FILE_ACTION_RENAMED_NEW_NAME 5 ; inline
+CONSTANT: FILE_LIST_DIRECTORY       HEX: 00000001
+CONSTANT: FILE_READ_DAT             HEX: 00000001
+CONSTANT: FILE_ADD_FILE             HEX: 00000002
+CONSTANT: FILE_WRITE_DATA           HEX: 00000002
+CONSTANT: FILE_ADD_SUBDIRECTORY     HEX: 00000004
+CONSTANT: FILE_APPEND_DATA          HEX: 00000004
+CONSTANT: FILE_CREATE_PIPE_INSTANCE HEX: 00000004
+CONSTANT: FILE_READ_EA              HEX: 00000008
+CONSTANT: FILE_READ_PROPERTIES      HEX: 00000008
+CONSTANT: FILE_WRITE_EA             HEX: 00000010
+CONSTANT: FILE_WRITE_PROPERTIES     HEX: 00000010
+CONSTANT: FILE_EXECUTE              HEX: 00000020
+CONSTANT: FILE_TRAVERSE             HEX: 00000020
+CONSTANT: FILE_DELETE_CHILD         HEX: 00000040
+CONSTANT: FILE_READ_ATTRIBUTES      HEX: 00000080
+CONSTANT: FILE_WRITE_ATTRIBUTES     HEX: 00000100
+
+CONSTANT: FILE_SHARE_READ        1
+CONSTANT: FILE_SHARE_WRITE       2
+CONSTANT: FILE_SHARE_DELETE      4
+CONSTANT: FILE_SHARE_VALID_FLAGS 7
+
+CONSTANT: FILE_FLAG_WRITE_THROUGH       HEX: 80000000
+CONSTANT: FILE_FLAG_OVERLAPPED          HEX: 40000000
+CONSTANT: FILE_FLAG_NO_BUFFERING        HEX: 20000000
+CONSTANT: FILE_FLAG_RANDOM_ACCESS       HEX: 10000000
+CONSTANT: FILE_FLAG_SEQUENTIAL_SCAN     HEX: 08000000
+CONSTANT: FILE_FLAG_DELETE_ON_CLOSE     HEX: 04000000
+CONSTANT: FILE_FLAG_BACKUP_SEMANTICS    HEX: 02000000
+CONSTANT: FILE_FLAG_POSIX_SEMANTICS     HEX: 01000000
+CONSTANT: FILE_FLAG_OPEN_REPARSE_POINT  HEX: 00200000
+CONSTANT: FILE_FLAG_OPEN_NO_RECALL      HEX: 00100000
+CONSTANT: FILE_FLAG_FIRST_PIPE_INSTANCE HEX: 00080000
+
+CONSTANT: FILE_ATTRIBUTE_READONLY            HEX: 00000001
+CONSTANT: FILE_ATTRIBUTE_HIDDEN              HEX: 00000002
+CONSTANT: FILE_ATTRIBUTE_SYSTEM              HEX: 00000004
+CONSTANT: FILE_ATTRIBUTE_DIRECTORY           HEX: 00000010
+CONSTANT: FILE_ATTRIBUTE_ARCHIVE             HEX: 00000020
+CONSTANT: FILE_ATTRIBUTE_DEVICE              HEX: 00000040
+CONSTANT: FILE_ATTRIBUTE_NORMAL              HEX: 00000080
+CONSTANT: FILE_ATTRIBUTE_TEMPORARY           HEX: 00000100
+CONSTANT: FILE_ATTRIBUTE_SPARSE_FILE         HEX: 00000200
+CONSTANT: FILE_ATTRIBUTE_REPARSE_POINT       HEX: 00000400
+CONSTANT: FILE_ATTRIBUTE_COMPRESSED          HEX: 00000800
+CONSTANT: FILE_ATTRIBUTE_OFFLINE             HEX: 00001000
+CONSTANT: FILE_ATTRIBUTE_NOT_CONTENT_INDEXED HEX: 00002000
+CONSTANT: FILE_ATTRIBUTE_ENCRYPTED           HEX: 00004000
+
+CONSTANT: FILE_NOTIFY_CHANGE_FILE        HEX: 001
+CONSTANT: FILE_NOTIFY_CHANGE_DIR_NAME    HEX: 002
+CONSTANT: FILE_NOTIFY_CHANGE_ATTRIBUTES  HEX: 004
+CONSTANT: FILE_NOTIFY_CHANGE_SIZE        HEX: 008
+CONSTANT: FILE_NOTIFY_CHANGE_LAST_WRITE  HEX: 010
+CONSTANT: FILE_NOTIFY_CHANGE_LAST_ACCESS HEX: 020
+CONSTANT: FILE_NOTIFY_CHANGE_CREATION    HEX: 040
+CONSTANT: FILE_NOTIFY_CHANGE_EA          HEX: 080
+CONSTANT: FILE_NOTIFY_CHANGE_SECURITY    HEX: 100
+CONSTANT: FILE_NOTIFY_CHANGE_FILE_NAME   HEX: 200
+CONSTANT: FILE_NOTIFY_CHANGE_ALL         HEX: 3ff
+
+CONSTANT: FILE_ACTION_ADDED 1
+CONSTANT: FILE_ACTION_REMOVED 2
+CONSTANT: FILE_ACTION_MODIFIED 3
+CONSTANT: FILE_ACTION_RENAMED_OLD_NAME 4
+CONSTANT: FILE_ACTION_RENAMED_NEW_NAME 5
 
 C-STRUCT: FILE_NOTIFY_INFORMATION
     { "DWORD" "NextEntryOffset" }
@@ -96,107 +96,106 @@ C-STRUCT: FILE_NOTIFY_INFORMATION
     { "WCHAR[1]" "FileName" } ;
 TYPEDEF: FILE_NOTIFY_INFORMATION* PFILE_NOTIFY_INFORMATION
 
-: STD_INPUT_HANDLE  -10 ; inline
-: STD_OUTPUT_HANDLE -11 ; inline
-: STD_ERROR_HANDLE  -12 ; inline
-
-: INVALID_HANDLE_VALUE -1 <alien> ; inline
-: INVALID_FILE_SIZE HEX: FFFFFFFF ; inline
-: INVALID_SET_FILE_POINTER HEX: ffffffff ; inline
-
-: FILE_BEGIN 0 ; inline
-: FILE_CURRENT 1 ; inline
-: FILE_END 2 ; inline
-
-: OF_READ 0 ;
-: OF_READWRITE    2 ;
-: OF_WRITE    1 ;
-: OF_SHARE_COMPAT    0 ;
-: OF_SHARE_DENY_NONE    64 ;
-: OF_SHARE_DENY_READ    48 ;
-: OF_SHARE_DENY_WRITE    32 ;
-: OF_SHARE_EXCLUSIVE    16 ;
-: OF_CANCEL    2048 ;
-: OF_CREATE    4096 ;
-: OF_DELETE    512 ;
-: OF_EXIST    16384 ;
-: OF_PARSE    256 ;
-: OF_PROMPT    8192 ;
-: OF_REOPEN    32768 ;
-: OF_VERIFY    1024 ;
-
-: INFINITE HEX: FFFFFFFF ; inline
+CONSTANT: STD_INPUT_HANDLE  -10
+CONSTANT: STD_OUTPUT_HANDLE -11
+CONSTANT: STD_ERROR_HANDLE  -12
+
+: INVALID_HANDLE_VALUE ( -- alien ) -1 <alien> ; inline
+CONSTANT: INVALID_FILE_SIZE HEX: FFFFFFFF
+CONSTANT: INVALID_SET_FILE_POINTER HEX: ffffffff
+
+CONSTANT: FILE_BEGIN 0
+CONSTANT: FILE_CURRENT 1
+CONSTANT: FILE_END 2
+
+CONSTANT: OF_READ 0
+CONSTANT: OF_READWRITE    2
+CONSTANT: OF_WRITE    1
+CONSTANT: OF_SHARE_COMPAT    0
+CONSTANT: OF_SHARE_DENY_NONE    64
+CONSTANT: OF_SHARE_DENY_READ    48
+CONSTANT: OF_SHARE_DENY_WRITE    32
+CONSTANT: OF_SHARE_EXCLUSIVE    16
+CONSTANT: OF_CANCEL    2048
+CONSTANT: OF_CREATE    4096
+CONSTANT: OF_DELETE    512
+CONSTANT: OF_EXIST    16384
+CONSTANT: OF_PARSE    256
+CONSTANT: OF_PROMPT    8192
+CONSTANT: OF_REOPEN    32768
+CONSTANT: OF_VERIFY    1024
+
+CONSTANT: INFINITE HEX: FFFFFFFF
 
 ! From C:\cygwin\usr\include\w32api\winbase.h
-: FILE_TYPE_UNKNOWN 0 ;
-: FILE_TYPE_DISK 1 ;
-: FILE_TYPE_CHAR 2 ;
-: FILE_TYPE_PIPE 3 ;
-: FILE_TYPE_REMOTE HEX: 8000 ;
-
-: TIME_ZONE_ID_UNKNOWN 0 ; inline
-: TIME_ZONE_ID_STANDARD 1 ; inline
-: TIME_ZONE_ID_DAYLIGHT 2 ; inline
-: TIME_ZONE_ID_INVALID HEX: FFFFFFFF ; inline
-
-
-: PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 ; inline
-: PF_SSE3_INSTRUCTIONS_AVAILABLE 13 ; inline
-
-: MAX_COMPUTERNAME_LENGTH 15 ; inline
-: UNLEN 256 ; inline
-
-: PROCESS_TERMINATE ( -- n ) HEX: 1 ; inline
-: PROCESS_CREATE_THREAD ( -- n ) HEX: 2 ; inline
-: PROCESS_VM_OPERATION ( -- n ) HEX: 8 ; inline
-: PROCESS_VM_READ ( -- n ) HEX: 10 ; inline
-: PROCESS_VM_WRITE ( -- n ) HEX: 20 ; inline
-: PROCESS_DUP_HANDLE ( -- n ) HEX: 40 ; inline
-: PROCESS_CREATE_PROCESS ( -- n ) HEX: 80 ; inline
-: PROCESS_SET_QUOTA ( -- n ) HEX: 100 ; inline
-: PROCESS_SET_INFORMATION ( -- n ) HEX: 200 ; inline
-: PROCESS_QUERY_INFORMATION ( -- n ) HEX: 400 ; inline
-
-: MEM_COMMIT ( -- n ) HEX: 1000 ; inline
-: MEM_RELEASE ( -- n ) HEX: 8000 ; inline
-
-: PAGE_NOACCESS    1 ; inline
-: PAGE_READONLY    2 ; inline
-: PAGE_READWRITE 4 ; inline
-: PAGE_WRITECOPY 8 ; inline
-: PAGE_EXECUTE HEX: 10 ; inline
-: PAGE_EXECUTE_READ HEX: 20 ; inline
-: PAGE_EXECUTE_READWRITE HEX: 40 ; inline
-: PAGE_EXECUTE_WRITECOPY HEX: 80 ; inline
-: PAGE_GUARD HEX: 100 ; inline
-: PAGE_NOCACHE HEX: 200 ; inline
-
-: SEC_BASED HEX: 00200000 ; inline
-: SEC_NO_CHANGE HEX: 00400000 ; inline
-: SEC_FILE HEX: 00800000 ; inline
-: SEC_IMAGE HEX: 01000000 ; inline
-: SEC_VLM HEX: 02000000 ; inline
-: SEC_RESERVE HEX: 04000000 ; inline
-: SEC_COMMIT HEX: 08000000 ; inline
-: SEC_NOCACHE HEX: 10000000 ; inline
-: MEM_IMAGE SEC_IMAGE ; inline
-
-: ERROR_ALREADY_EXISTS 183 ; inline
-
-: FILE_MAP_ALL_ACCESS HEX: f001f ;
-: FILE_MAP_READ   4 ;
-: FILE_MAP_WRITE  2 ;
-: FILE_MAP_COPY   1 ;
-
-: THREAD_MODE_BACKGROUND_BEGIN HEX: 10000 ; inline
-: THREAD_MODE_BACKGROUND_END   HEX: 20000 ; inline
-: THREAD_PRIORITY_ABOVE_NORMAL 1 ; inline
-: THREAD_PRIORITY_BELOW_NORMAL -1 ; inline
-: THREAD_PRIORITY_HIGHEST 2 ; inline
-: THREAD_PRIORITY_IDLE -15 ; inline
-: THREAD_PRIORITY_LOWEST -2 ; inline
-: THREAD_PRIORITY_NORMAL 0 ; inline
-: THREAD_PRIORITY_TIME_CRITICAL 15 ; inline
+CONSTANT: FILE_TYPE_UNKNOWN 0
+CONSTANT: FILE_TYPE_DISK 1
+CONSTANT: FILE_TYPE_CHAR 2
+CONSTANT: FILE_TYPE_PIPE 3
+CONSTANT: FILE_TYPE_REMOTE HEX: 8000
+
+CONSTANT: TIME_ZONE_ID_UNKNOWN 0
+CONSTANT: TIME_ZONE_ID_STANDARD 1
+CONSTANT: TIME_ZONE_ID_DAYLIGHT 2
+CONSTANT: TIME_ZONE_ID_INVALID HEX: FFFFFFFF
+
+CONSTANT: PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
+CONSTANT: PF_SSE3_INSTRUCTIONS_AVAILABLE 13
+
+CONSTANT: MAX_COMPUTERNAME_LENGTH 15
+CONSTANT: UNLEN 256
+
+CONSTANT: PROCESS_TERMINATE HEX: 1
+CONSTANT: PROCESS_CREATE_THREAD HEX: 2
+CONSTANT: PROCESS_VM_OPERATION HEX: 8
+CONSTANT: PROCESS_VM_READ HEX: 10
+CONSTANT: PROCESS_VM_WRITE HEX: 20
+CONSTANT: PROCESS_DUP_HANDLE HEX: 40
+CONSTANT: PROCESS_CREATE_PROCESS HEX: 80
+CONSTANT: PROCESS_SET_QUOTA HEX: 100
+CONSTANT: PROCESS_SET_INFORMATION HEX: 200
+CONSTANT: PROCESS_QUERY_INFORMATION HEX: 400
+
+CONSTANT: MEM_COMMIT HEX: 1000
+CONSTANT: MEM_RELEASE  HEX: 8000
+
+CONSTANT: PAGE_NOACCESS    1
+CONSTANT: PAGE_READONLY    2
+CONSTANT: PAGE_READWRITE 4
+CONSTANT: PAGE_WRITECOPY 8
+CONSTANT: PAGE_EXECUTE HEX: 10
+CONSTANT: PAGE_EXECUTE_READ HEX: 20
+CONSTANT: PAGE_EXECUTE_READWRITE HEX: 40
+CONSTANT: PAGE_EXECUTE_WRITECOPY HEX: 80
+CONSTANT: PAGE_GUARD HEX: 100
+CONSTANT: PAGE_NOCACHE HEX: 200
+
+CONSTANT: SEC_BASED HEX: 00200000
+CONSTANT: SEC_NO_CHANGE HEX: 00400000
+CONSTANT: SEC_FILE HEX: 00800000
+CONSTANT: SEC_IMAGE HEX: 01000000
+CONSTANT: SEC_VLM HEX: 02000000
+CONSTANT: SEC_RESERVE HEX: 04000000
+CONSTANT: SEC_COMMIT HEX: 08000000
+CONSTANT: SEC_NOCACHE HEX: 10000000
+ALIAS: MEM_IMAGE SEC_IMAGE
+
+CONSTANT: ERROR_ALREADY_EXISTS 183
+
+CONSTANT: FILE_MAP_ALL_ACCESS HEX: f001f
+CONSTANT: FILE_MAP_READ   4
+CONSTANT: FILE_MAP_WRITE  2
+CONSTANT: FILE_MAP_COPY   1
+
+CONSTANT: THREAD_MODE_BACKGROUND_BEGIN HEX: 10000
+CONSTANT: THREAD_MODE_BACKGROUND_END   HEX: 20000
+CONSTANT: THREAD_PRIORITY_ABOVE_NORMAL 1
+CONSTANT: THREAD_PRIORITY_BELOW_NORMAL -1
+CONSTANT: THREAD_PRIORITY_HIGHEST 2
+CONSTANT: THREAD_PRIORITY_IDLE -15
+CONSTANT: THREAD_PRIORITY_LOWEST -2
+CONSTANT: THREAD_PRIORITY_NORMAL 0
+CONSTANT: THREAD_PRIORITY_TIME_CRITICAL 15
 
 C-STRUCT: OVERLAPPED
     { "UINT_PTR" "internal" }
@@ -321,74 +320,74 @@ C-STRUCT: GUID
     { { "UCHAR" 8 } "Data4" } ;
 
 
-: SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege" ;
-: SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege" ;
-: SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege" ;
-: SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege" ;
-: SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege" ;
-: SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege" ;
-: SE_TCB_NAME "SeTcbPrivilege" ;
-: SE_SECURITY_NAME "SeSecurityPrivilege" ;
-: SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege" ;
-: SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege" ;
-: SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege" ;
-: SE_SYSTEMTIME_NAME "SeSystemtimePrivilege" ;
-: SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege" ;
-: SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege" ;
-: SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege" ;
-: SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege" ;
-: SE_BACKUP_NAME "SeBackupPrivilege" ;
-: SE_RESTORE_NAME "SeRestorePrivilege" ;
-: SE_SHUTDOWN_NAME "SeShutdownPrivilege" ;
-: SE_DEBUG_NAME "SeDebugPrivilege" ;
-: SE_AUDIT_NAME "SeAuditPrivilege" ;
-: SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege" ;
-: SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege" ;
-: SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege" ;
-: SE_UNDOCK_NAME "SeUndockPrivilege" ;
-: SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege" ;
-: SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege" ;
-: SE_IMPERSONATE_NAME "SeImpersonatePrivilege" ;
-: SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege" ;
-
-: SE_GROUP_MANDATORY HEX: 00000001 ;
-: SE_GROUP_ENABLED_BY_DEFAULT HEX: 00000002 ;
-: SE_GROUP_ENABLED HEX: 00000004 ;
-: SE_GROUP_OWNER HEX: 00000008 ;
-: SE_GROUP_USE_FOR_DENY_ONLY HEX: 00000010 ;
-: SE_GROUP_LOGON_ID HEX: C0000000 ;
-: SE_GROUP_RESOURCE HEX: 20000000 ;
-
-: SE_PRIVILEGE_ENABLED_BY_DEFAULT HEX: 00000001 ;
-: SE_PRIVILEGE_ENABLED HEX: 00000002 ;
-: SE_PRIVILEGE_REMOVE HEX: 00000004 ;
-: SE_PRIVILEGE_USED_FOR_ACCESS HEX: 80000000 ;
-
-: PRIVILEGE_SET_ALL_NECESSARY 1 ;
-
-: SE_OWNER_DEFAULTED HEX: 00000001 ;
-: SE_GROUP_DEFAULTED HEX: 00000002 ;
-: SE_DACL_PRESENT HEX: 00000004 ;
-: SE_DACL_DEFAULTED HEX: 00000008 ;
-: SE_SACL_PRESENT HEX: 00000010 ;
-: SE_SACL_DEFAULTED HEX: 00000020 ;
-: SE_DACL_AUTO_INHERIT_REQ HEX: 00000100 ;
-: SE_SACL_AUTO_INHERIT_REQ HEX: 00000200 ;
-: SE_DACL_AUTO_INHERITED HEX: 00000400 ;
-: SE_SACL_AUTO_INHERITED HEX: 00000800 ;
-: SE_DACL_PROTECTED  HEX: 00001000 ;
-: SE_SACL_PROTECTED  HEX: 00002000 ;
-: SE_SELF_RELATIVE HEX: 00008000 ;
-
-: ANYSIZE_ARRAY 1 ; inline
-
-: MAXIMUM_WAIT_OBJECTS 64 ; inline
-: MAXIMUM_SUSPEND_COUNT HEX: 7f ; inline
-: WAIT_OBJECT_0 0 ; inline
-: WAIT_ABANDONED_0 128 ; inline
-: WAIT_TIMEOUT 258 ; inline
-: WAIT_IO_COMPLETION HEX: c0 ; inline
-: WAIT_FAILED HEX: ffffffff ; inline
+CONSTANT: SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege"
+CONSTANT: SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege"
+CONSTANT: SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege"
+CONSTANT: SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege"
+CONSTANT: SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege"
+CONSTANT: SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege"
+CONSTANT: SE_TCB_NAME "SeTcbPrivilege"
+CONSTANT: SE_SECURITY_NAME "SeSecurityPrivilege"
+CONSTANT: SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege"
+CONSTANT: SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege"
+CONSTANT: SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege"
+CONSTANT: SE_SYSTEMTIME_NAME "SeSystemtimePrivilege"
+CONSTANT: SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege"
+CONSTANT: SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege"
+CONSTANT: SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege"
+CONSTANT: SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege"
+CONSTANT: SE_BACKUP_NAME "SeBackupPrivilege"
+CONSTANT: SE_RESTORE_NAME "SeRestorePrivilege"
+CONSTANT: SE_SHUTDOWN_NAME "SeShutdownPrivilege"
+CONSTANT: SE_DEBUG_NAME "SeDebugPrivilege"
+CONSTANT: SE_AUDIT_NAME "SeAuditPrivilege"
+CONSTANT: SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege"
+CONSTANT: SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege"
+CONSTANT: SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege"
+CONSTANT: SE_UNDOCK_NAME "SeUndockPrivilege"
+CONSTANT: SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege"
+CONSTANT: SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege"
+CONSTANT: SE_IMPERSONATE_NAME "SeImpersonatePrivilege"
+CONSTANT: SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege"
+
+CONSTANT: SE_GROUP_MANDATORY HEX: 00000001
+CONSTANT: SE_GROUP_ENABLED_BY_DEFAULT HEX: 00000002
+CONSTANT: SE_GROUP_ENABLED HEX: 00000004
+CONSTANT: SE_GROUP_OWNER HEX: 00000008
+CONSTANT: SE_GROUP_USE_FOR_DENY_ONLY HEX: 00000010
+CONSTANT: SE_GROUP_LOGON_ID HEX: C0000000
+CONSTANT: SE_GROUP_RESOURCE HEX: 20000000
+
+CONSTANT: SE_PRIVILEGE_ENABLED_BY_DEFAULT HEX: 00000001
+CONSTANT: SE_PRIVILEGE_ENABLED HEX: 00000002
+CONSTANT: SE_PRIVILEGE_REMOVE HEX: 00000004
+CONSTANT: SE_PRIVILEGE_USED_FOR_ACCESS HEX: 80000000
+
+CONSTANT: PRIVILEGE_SET_ALL_NECESSARY 1
+
+CONSTANT: SE_OWNER_DEFAULTED HEX: 00000001
+CONSTANT: SE_GROUP_DEFAULTED HEX: 00000002
+CONSTANT: SE_DACL_PRESENT HEX: 00000004
+CONSTANT: SE_DACL_DEFAULTED HEX: 00000008
+CONSTANT: SE_SACL_PRESENT HEX: 00000010
+CONSTANT: SE_SACL_DEFAULTED HEX: 00000020
+CONSTANT: SE_DACL_AUTO_INHERIT_REQ HEX: 00000100
+CONSTANT: SE_SACL_AUTO_INHERIT_REQ HEX: 00000200
+CONSTANT: SE_DACL_AUTO_INHERITED HEX: 00000400
+CONSTANT: SE_SACL_AUTO_INHERITED HEX: 00000800
+CONSTANT: SE_DACL_PROTECTED  HEX: 00001000
+CONSTANT: SE_SACL_PROTECTED  HEX: 00002000
+CONSTANT: SE_SELF_RELATIVE HEX: 00008000
+
+CONSTANT: ANYSIZE_ARRAY 1
+
+CONSTANT: MAXIMUM_WAIT_OBJECTS 64
+CONSTANT: MAXIMUM_SUSPEND_COUNT HEX: 7f
+CONSTANT: WAIT_OBJECT_0 0
+CONSTANT: WAIT_ABANDONED_0 128
+CONSTANT: WAIT_TIMEOUT 258
+CONSTANT: WAIT_IO_COMPLETION HEX: c0
+CONSTANT: WAIT_FAILED HEX: ffffffff
 
 C-STRUCT: LUID
     { "DWORD" "LowPart" }
@@ -427,7 +426,7 @@ C-STRUCT: BY_HANDLE_FILE_INFORMATION
   { "DWORD" "nFileIndexLow" } ;
 TYPEDEF: BY_HANDLE_FILE_INFORMATION* LPBY_HANDLE_FILE_INFORMATION
 
-: OFS_MAXPATHNAME 128 ;
+CONSTANT: OFS_MAXPATHNAME 128
 
 C-STRUCT: OFSTRUCT
     { "BYTE" "cBytes" }
@@ -489,34 +488,34 @@ C-STRUCT: SECURITY_ATTRIBUTES
     { "LPVOID" "lpSecurityDescriptor" }
     { "BOOL" "bInheritHandle" } ;
 
-: HANDLE_FLAG_INHERIT 1 ; inline
-: HANDLE_FLAG_PROTECT_FROM_CLOSE 2 ; inline
+CONSTANT: HANDLE_FLAG_INHERIT 1
+CONSTANT: HANDLE_FLAG_PROTECT_FROM_CLOSE 2
 
-: STARTF_USESHOWWINDOW    HEX: 00000001 ; inline
-: STARTF_USESIZE          HEX: 00000002 ; inline
-: STARTF_USEPOSITION      HEX: 00000004 ; inline
-: STARTF_USECOUNTCHARS    HEX: 00000008 ; inline
-: STARTF_USEFILLATTRIBUTE HEX: 00000010 ; inline
-: STARTF_RUNFULLSCREEN    HEX: 00000020 ; inline
-: STARTF_FORCEONFEEDBACK  HEX: 00000040 ; inline
-: STARTF_FORCEOFFFEEDBACK HEX: 00000080 ; inline
-: STARTF_USESTDHANDLES    HEX: 00000100 ; inline
-: STARTF_USEHOTKEY        HEX: 00000200 ; inline
+CONSTANT: STARTF_USESHOWWINDOW    HEX: 00000001
+CONSTANT: STARTF_USESIZE          HEX: 00000002
+CONSTANT: STARTF_USEPOSITION      HEX: 00000004
+CONSTANT: STARTF_USECOUNTCHARS    HEX: 00000008
+CONSTANT: STARTF_USEFILLATTRIBUTE HEX: 00000010
+CONSTANT: STARTF_RUNFULLSCREEN    HEX: 00000020
+CONSTANT: STARTF_FORCEONFEEDBACK  HEX: 00000040
+CONSTANT: STARTF_FORCEOFFFEEDBACK HEX: 00000080
+CONSTANT: STARTF_USESTDHANDLES    HEX: 00000100
+CONSTANT: STARTF_USEHOTKEY        HEX: 00000200
 
-: PIPE_ACCESS_INBOUND  1 ; inline
-: PIPE_ACCESS_OUTBOUND 2 ; inline
-: PIPE_ACCESS_DUPLEX   3 ; inline
+CONSTANT: PIPE_ACCESS_INBOUND  1
+CONSTANT: PIPE_ACCESS_OUTBOUND 2
+CONSTANT: PIPE_ACCESS_DUPLEX   3
 
-: PIPE_TYPE_BYTE    0 ; inline
-: PIPE_TYPE_MESSAGE 4 ; inline
+CONSTANT: PIPE_TYPE_BYTE    0
+CONSTANT: PIPE_TYPE_MESSAGE 4
 
-: PIPE_READMODE_BYTE    0 ; inline
-: PIPE_READMODE_MESSAGE 2 ; inline
+CONSTANT: PIPE_READMODE_BYTE    0
+CONSTANT: PIPE_READMODE_MESSAGE 2
 
-: PIPE_WAIT   0 ; inline
-: PIPE_NOWAIT 1 ; inline
+CONSTANT: PIPE_WAIT   0
+CONSTANT: PIPE_NOWAIT 1
 
-: PIPE_UNLIMITED_INSTANCES 255 ; inline
+CONSTANT: PIPE_UNLIMITED_INSTANCES 255
 
 LIBRARY: kernel32
 ! FUNCTION: _hread
@@ -641,29 +640,29 @@ ALIAS: CreateNamedPipe CreateNamedPipeW
 ! FUNCTION: CreateNlsSecurityDescriptor
 FUNCTION: BOOL CreatePipe ( PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize ) ;
 
-: DEBUG_PROCESS                   HEX: 00000001 ;
-: DEBUG_ONLY_THIS_PROCESS         HEX: 00000002 ;
-: CREATE_SUSPENDED                HEX: 00000004 ;
-: DETACHED_PROCESS                HEX: 00000008 ;
-: CREATE_NEW_CONSOLE              HEX: 00000010 ;
-: NORMAL_PRIORITY_CLASS           HEX: 00000020 ;
-: IDLE_PRIORITY_CLASS             HEX: 00000040 ;
-: HIGH_PRIORITY_CLASS             HEX: 00000080 ;
-: REALTIME_PRIORITY_CLASS         HEX: 00000100 ;
-: CREATE_NEW_PROCESS_GROUP        HEX: 00000200 ;
-: CREATE_UNICODE_ENVIRONMENT      HEX: 00000400 ;
-: CREATE_SEPARATE_WOW_VDM         HEX: 00000800 ;
-: CREATE_SHARED_WOW_VDM           HEX: 00001000 ;
-: CREATE_FORCEDOS                 HEX: 00002000 ;
-: BELOW_NORMAL_PRIORITY_CLASS     HEX: 00004000 ;
-: ABOVE_NORMAL_PRIORITY_CLASS     HEX: 00008000 ;
-: CREATE_BREAKAWAY_FROM_JOB       HEX: 01000000 ;
-: CREATE_WITH_USERPROFILE         HEX: 02000000 ;
-: CREATE_DEFAULT_ERROR_MODE       HEX: 04000000 ;
-: CREATE_NO_WINDOW                HEX: 08000000 ;
-: PROFILE_USER                    HEX: 10000000 ;
-: PROFILE_KERNEL                  HEX: 20000000 ;
-: PROFILE_SERVER                  HEX: 40000000 ;
+CONSTANT: DEBUG_PROCESS                   HEX: 00000001
+CONSTANT: DEBUG_ONLY_THIS_PROCESS         HEX: 00000002
+CONSTANT: CREATE_SUSPENDED                HEX: 00000004
+CONSTANT: DETACHED_PROCESS                HEX: 00000008
+CONSTANT: CREATE_NEW_CONSOLE              HEX: 00000010
+CONSTANT: NORMAL_PRIORITY_CLASS           HEX: 00000020
+CONSTANT: IDLE_PRIORITY_CLASS             HEX: 00000040
+CONSTANT: HIGH_PRIORITY_CLASS             HEX: 00000080
+CONSTANT: REALTIME_PRIORITY_CLASS         HEX: 00000100
+CONSTANT: CREATE_NEW_PROCESS_GROUP        HEX: 00000200
+CONSTANT: CREATE_UNICODE_ENVIRONMENT      HEX: 00000400
+CONSTANT: CREATE_SEPARATE_WOW_VDM         HEX: 00000800
+CONSTANT: CREATE_SHARED_WOW_VDM           HEX: 00001000
+CONSTANT: CREATE_FORCEDOS                 HEX: 00002000
+CONSTANT: BELOW_NORMAL_PRIORITY_CLASS     HEX: 00004000
+CONSTANT: ABOVE_NORMAL_PRIORITY_CLASS     HEX: 00008000
+CONSTANT: CREATE_BREAKAWAY_FROM_JOB       HEX: 01000000
+CONSTANT: CREATE_WITH_USERPROFILE         HEX: 02000000
+CONSTANT: CREATE_DEFAULT_ERROR_MODE       HEX: 04000000
+CONSTANT: CREATE_NO_WINDOW                HEX: 08000000
+CONSTANT: PROFILE_USER                    HEX: 10000000
+CONSTANT: PROFILE_KERNEL                  HEX: 20000000
+CONSTANT: PROFILE_SERVER                  HEX: 40000000
 
 FUNCTION: BOOL CreateProcessW ( LPCTSTR lpApplicationname,
                                 LPTSTR lpCommandLine,
@@ -988,8 +987,6 @@ FUNCTION: DWORD GetFileType ( HANDLE hFile ) ;
 FUNCTION: DWORD GetFullPathNameW ( LPCTSTR lpFileName, DWORD nBufferLength, LPTSTR lpBuffer, LPTSTR* lpFilePart ) ;
 ALIAS: GetFullPathName GetFullPathNameW
 
-!  clear "license.txt" 32768 "char[32768]" <c-object> f over >r GetFullPathName r> swap 2 * head >string .
-
 ! FUNCTION: GetGeoInfoA
 ! FUNCTION: GetGeoInfoW
 ! FUNCTION: GetHandleContext
old mode 100644 (file)
new mode 100755 (executable)
index 0f271b4..10e6cd4
@@ -14,1012 +14,1013 @@ windows-messages set-global
 : windows-message-name ( n -- name )
     windows-messages get at "unknown message" or ;
 
-: WM_NULL HEX: 0000 ; inline
-: WM_CREATE HEX: 0001 ; inline
-: WM_DESTROY HEX: 0002 ; inline
-: WM_MOVE HEX: 0003 ; inline
-: WM_SIZE HEX: 0005 ; inline
-: WM_ACTIVATE HEX: 0006 ; inline
-: WM_SETFOCUS HEX: 0007 ; inline
-: WM_KILLFOCUS HEX: 0008 ; inline
-: WM_ENABLE HEX: 000A ; inline
-: WM_SETREDRAW HEX: 000B ; inline
-: WM_SETTEXT HEX: 000C ; inline
-: WM_GETTEXT HEX: 000D ; inline
-: WM_GETTEXTLENGTH HEX: 000E ; inline
-: WM_PAINT HEX: 000F ; inline
-: WM_CLOSE HEX: 0010 ; inline
-: WM_QUERYENDSESSION HEX: 0011 ; inline
-: WM_QUERYOPEN HEX: 0013 ; inline
-: WM_ENDSESSION HEX: 0016 ; inline
-: WM_QUIT HEX: 0012 ; inline
-: WM_ERASEBKGND HEX: 0014 ; inline
-: WM_SYSCOLORCHANGE HEX: 0015 ; inline
-: WM_SHOWWINDOW HEX: 0018 ; inline
-: WM_WININICHANGE HEX: 001A ; inline
-: WM_SETTINGCHANGE HEX: 001A ; inline
-: WM_DEVMODECHANGE HEX: 001B ; inline
-: WM_ACTIVATEAPP HEX: 001C ; inline
-: WM_FONTCHANGE HEX: 001D ; inline
-: WM_TIMECHANGE HEX: 001E ; inline
-: WM_CANCELMODE HEX: 001F ; inline
-: WM_SETCURSOR HEX: 0020 ; inline
-: WM_MOUSEACTIVATE HEX: 0021 ; inline
-: WM_CHILDACTIVATE HEX: 0022 ; inline
-: WM_QUEUESYNC HEX: 0023 ; inline
-: WM_GETMINMAXINFO HEX: 0024 ; inline
-: WM_PAINTICON HEX: 0026 ; inline
-: WM_ICONERASEBKGND HEX: 0027 ; inline
-: WM_NEXTDLGCTL HEX: 0028 ; inline
-: WM_SPOOLERSTATUS HEX: 002A ; inline
-: WM_DRAWITEM HEX: 002B ; inline
-: WM_MEASUREITEM HEX: 002C ; inline
-: WM_DELETEITEM HEX: 002D ; inline
-: WM_VKEYTOITEM HEX: 002E ; inline
-: WM_CHARTOITEM HEX: 002F ; inline
-: WM_SETFONT HEX: 0030 ; inline
-: WM_GETFONT HEX: 0031 ; inline
-: WM_SETHOTKEY HEX: 0032 ; inline
-: WM_GETHOTKEY HEX: 0033 ; inline
-: WM_QUERYDRAGICON HEX: 0037 ; inline
-: WM_COMPAREITEM HEX: 0039 ; inline
-: WM_GETOBJECT HEX: 003D ; inline
-: WM_COMPACTING HEX: 0041 ; inline
-: WM_COMMNOTIFY HEX: 0044 ; inline
-: WM_WINDOWPOSCHANGING HEX: 0046 ; inline
-: WM_WINDOWPOSCHANGED HEX: 0047 ; inline
-: WM_POWER HEX: 0048 ; inline
-: WM_COPYDATA HEX: 004A ; inline
-: WM_CANCELJOURNAL HEX: 004B ; inline
-: WM_NOTIFY HEX: 004E ; inline
-: WM_INPUTLANGCHANGEREQUEST HEX: 0050 ; inline
-: WM_INPUTLANGCHANGE HEX: 0051 ; inline
-: WM_TCARD HEX: 0052 ; inline
-: WM_HELP HEX: 0053 ; inline
-: WM_USERCHANGED HEX: 0054 ; inline
-: WM_NOTIFYFORMAT HEX: 0055 ; inline
-: WM_CONTEXTMENU HEX: 007B ; inline
-: WM_STYLECHANGING HEX: 007C ; inline
-: WM_STYLECHANGED HEX: 007D ; inline
-: WM_DISPLAYCHANGE HEX: 007E ; inline
-: WM_GETICON HEX: 007F ; inline
-: WM_SETICON HEX: 0080 ; inline
-: WM_NCCREATE HEX: 0081 ; inline
-: WM_NCDESTROY HEX: 0082 ; inline
-: WM_NCCALCSIZE HEX: 0083 ; inline
-: WM_NCHITTEST HEX: 0084 ; inline
-: WM_NCPAINT HEX: 0085 ; inline
-: WM_NCACTIVATE HEX: 0086 ; inline
-: WM_GETDLGCODE HEX: 0087 ; inline
-: WM_SYNCPAINT HEX: 0088 ; inline
-: WM_NCMOUSEMOVE HEX: 00A0 ; inline
-: WM_NCLBUTTONDOWN HEX: 00A1 ; inline
-: WM_NCLBUTTONUP HEX: 00A2 ; inline
-: WM_NCLBUTTONDBLCLK HEX: 00A3 ; inline
-: WM_NCRBUTTONDOWN HEX: 00A4 ; inline
-: WM_NCRBUTTONUP HEX: 00A5 ; inline
-: WM_NCRBUTTONDBLCLK HEX: 00A6 ; inline
-: WM_NCMBUTTONDOWN HEX: 00A7 ; inline
-: WM_NCMBUTTONUP HEX: 00A8 ; inline
-: WM_NCMBUTTONDBLCLK HEX: 00A9 ; inline
-: WM_NCXBUTTONDOWN HEX: 00AB ; inline
-: WM_NCXBUTTONUP HEX: 00AC ; inline
-: WM_NCXBUTTONDBLCLK HEX: 00AD ; inline
-: WM_NCUAHDRAWCAPTION HEX: 00AE ; inline ! undocumented
-: WM_NCUAHDRAWFRAME HEX: 00AF ; inline   ! undocumented
-: WM_INPUT HEX: 00FF ; inline
-: WM_KEYFIRST HEX: 0100 ; inline
-: WM_KEYDOWN HEX: 0100 ; inline
-: WM_KEYUP HEX: 0101 ; inline
-: WM_CHAR HEX: 0102 ; inline
-: WM_DEADCHAR HEX: 0103 ; inline
-: WM_SYSKEYDOWN HEX: 0104 ; inline
-: WM_SYSKEYUP HEX: 0105 ; inline
-: WM_SYSCHAR HEX: 0106 ; inline
-: WM_SYSDEADCHAR HEX: 0107 ; inline
-: WM_UNICHAR HEX: 0109 ; inline
-: WM_KEYLAST_NT501 HEX: 0109 ; inline
-: UNICODE_NOCHAR HEX: FFFF ; inline
-: WM_KEYLAST_PRE501 HEX: 0108 ; inline
-: WM_IME_STARTCOMPOSITION HEX: 010D ; inline
-: WM_IME_ENDCOMPOSITION HEX: 010E ; inline
-: WM_IME_COMPOSITION HEX: 010F ; inline
-: WM_IME_KEYLAST HEX: 010F ; inline
-: WM_INITDIALOG HEX: 0110 ; inline
-: WM_COMMAND HEX: 0111 ; inline
-: WM_SYSCOMMAND HEX: 0112 ; inline
-: WM_TIMER HEX: 0113 ; inline
-: WM_HSCROLL HEX: 0114 ; inline
-: WM_VSCROLL HEX: 0115 ; inline
-: WM_INITMENU HEX: 0116 ; inline
-: WM_INITMENUPOPUP HEX: 0117 ; inline
-: WM_MENUSELECT HEX: 011F ; inline
-: WM_MENUCHAR HEX: 0120 ; inline
-: WM_ENTERIDLE HEX: 0121 ; inline
-: WM_MENURBUTTONUP HEX: 0122 ; inline
-: WM_MENUDRAG HEX: 0123 ; inline
-: WM_MENUGETOBJECT HEX: 0124 ; inline
-: WM_UNINITMENUPOPUP HEX: 0125 ; inline
-: WM_MENUCOMMAND HEX: 0126 ; inline
-: WM_CHANGEUISTATE HEX: 0127 ; inline
-: WM_UPDATEUISTATE HEX: 0128 ; inline
-: WM_QUERYUISTATE HEX: 0129 ; inline
-: WM_CTLCOLORMSGBOX HEX: 0132 ; inline
-: WM_CTLCOLOREDIT HEX: 0133 ; inline
-: WM_CTLCOLORLISTBOX HEX: 0134 ; inline
-: WM_CTLCOLORBTN HEX: 0135 ; inline
-: WM_CTLCOLORDLG HEX: 0136 ; inline
-: WM_CTLCOLORSCROLLBAR HEX: 0137 ; inline
-: WM_CTLCOLORSTATIC HEX: 0138 ; inline
-: WM_MOUSEFIRST HEX: 0200 ; inline
-: WM_MOUSEMOVE HEX: 0200 ; inline
-: WM_LBUTTONDOWN HEX: 0201 ; inline
-: WM_LBUTTONUP HEX: 0202 ; inline
-: WM_LBUTTONDBLCLK HEX: 0203 ; inline
-: WM_RBUTTONDOWN HEX: 0204 ; inline
-: WM_RBUTTONUP HEX: 0205 ; inline
-: WM_RBUTTONDBLCLK HEX: 0206 ; inline
-: WM_MBUTTONDOWN HEX: 0207 ; inline
-: WM_MBUTTONUP HEX: 0208 ; inline
-: WM_MBUTTONDBLCLK HEX: 0209 ; inline
-: WM_MOUSEWHEEL HEX: 020A ; inline
-: WM_XBUTTONDOWN HEX: 020B ; inline
-: WM_XBUTTONUP HEX: 020C ; inline
-: WM_XBUTTONDBLCLK HEX: 020D ; inline
-: WM_MOUSELAST_5 HEX: 020D ; inline
-: WM_MOUSELAST_4 HEX: 020A ; inline
-: WM_MOUSELAST_PRE_4 HEX: 0209 ; inline
-: WM_PARENTNOTIFY HEX: 0210 ; inline
-: WM_ENTERMENULOOP HEX: 0211 ; inline
-: WM_EXITMENULOOP HEX: 0212 ; inline
-: WM_NEXTMENU HEX: 0213 ; inline
-: WM_SIZING HEX: 0214 ; inline
-: WM_CAPTURECHANGED HEX: 0215 ; inline
-: WM_MOVING HEX: 0216 ; inline
-: WM_POWERBROADCAST HEX: 0218 ; inline
-: WM_DEVICECHANGE HEX: 0219 ; inline
-: WM_MDICREATE HEX: 0220 ; inline
-: WM_MDIDESTROY HEX: 0221 ; inline
-: WM_MDIACTIVATE HEX: 0222 ; inline
-: WM_MDIRESTORE HEX: 0223 ; inline
-: WM_MDINEXT HEX: 0224 ; inline
-: WM_MDIMAXIMIZE HEX: 0225 ; inline
-: WM_MDITILE HEX: 0226 ; inline
-: WM_MDICASCADE HEX: 0227 ; inline
-: WM_MDIICONARRANGE HEX: 0228 ; inline
-: WM_MDIGETACTIVE HEX: 0229 ; inline
-: WM_MDISETMENU HEX: 0230 ; inline
-: WM_ENTERSIZEMOVE HEX: 0231 ; inline
-: WM_EXITSIZEMOVE HEX: 0232 ; inline
-: WM_DROPFILES HEX: 0233 ; inline
-: WM_MDIREFRESHMENU HEX: 0234 ; inline
-: WM_IME_SETCONTEXT HEX: 0281 ; inline
-: WM_IME_NOTIFY HEX: 0282 ; inline
-: WM_IME_CONTROL HEX: 0283 ; inline
-: WM_IME_COMPOSITIONFULL HEX: 0284 ; inline
-: WM_IME_SELECT HEX: 0285 ; inline
-: WM_IME_CHAR HEX: 0286 ; inline
-: WM_IME_REQUEST HEX: 0288 ; inline
-: WM_IME_KEYDOWN HEX: 0290 ; inline
-: WM_IME_KEYUP HEX: 0291 ; inline
-: WM_MOUSEHOVER HEX: 02A1 ; inline
-: WM_MOUSELEAVE HEX: 02A3 ; inline
-: WM_NCMOUSEHOVER HEX: 02A0 ; inline
-: WM_NCMOUSELEAVE HEX: 02A2 ; inline
-: WM_WTSSESSION_CHANGE HEX: 02B1 ; inline
-: WM_TABLET_FIRST HEX: 02c0 ; inline
-: WM_TABLET_LAST HEX: 02df ; inline
-: WM_CUT HEX: 0300 ; inline
-: WM_COPY HEX: 0301 ; inline
-: WM_PASTE HEX: 0302 ; inline
-: WM_CLEAR HEX: 0303 ; inline
-: WM_UNDO HEX: 0304 ; inline
-: WM_RENDERFORMAT HEX: 0305 ; inline
-: WM_RENDERALLFORMATS HEX: 0306 ; inline
-: WM_DESTROYCLIPBOARD HEX: 0307 ; inline
-: WM_DRAWCLIPBOARD HEX: 0308 ; inline
-: WM_PAINTCLIPBOARD HEX: 0309 ; inline
-: WM_VSCROLLCLIPBOARD HEX: 030A ; inline
-: WM_SIZECLIPBOARD HEX: 030B ; inline
-: WM_ASKCBFORMATNAME HEX: 030C ; inline
-: WM_CHANGECBCHAIN HEX: 030D ; inline
-: WM_HSCROLLCLIPBOARD HEX: 030E ; inline
-: WM_QUERYNEWPALETTE HEX: 030F ; inline
-: WM_PALETTEISCHANGING HEX: 0310 ; inline
-: WM_PALETTECHANGED HEX: 0311 ; inline
-: WM_HOTKEY HEX: 0312 ; inline
-: WM_PRINT HEX: 0317 ; inline
-: WM_PRINTCLIENT HEX: 0318 ; inline
-: WM_APPCOMMAND HEX: 0319 ; inline
-: WM_THEMECHANGED HEX: 031A ; inline
-: WM_HANDHELDFIRST HEX: 0358 ; inline
-: WM_HANDHELDLAST HEX: 035F ; inline
-: WM_AFXFIRST HEX: 0360 ; inline
-: WM_AFXLAST HEX: 037F ; inline
-: WM_PENWINFIRST HEX: 0380 ; inline
-: WM_PENWINLAST HEX: 038F ; inline
-: WM_APP HEX: 8000 ; inline
-: WM_USER HEX: 0400 ; inline
-: EM_GETSEL HEX: 00B0 ; inline
-: EM_SETSEL HEX: 00B1 ; inline
-: EM_GETRECT HEX: 00B2 ; inline
-: EM_SETRECT HEX: 00B3 ; inline
-: EM_SETRECTNP HEX: 00B4 ; inline
-: EM_SCROLL HEX: 00B5 ; inline
-: EM_LINESCROLL HEX: 00B6 ; inline
-: EM_SCROLLCARET HEX: 00B7 ; inline
-: EM_GETMODIFY HEX: 00B8 ; inline
-: EM_SETMODIFY HEX: 00B9 ; inline
-: EM_GETLINECOUNT HEX: 00BA ; inline
-: EM_LINEINDEX HEX: 00BB ; inline
-: EM_SETHANDLE HEX: 00BC ; inline
-: EM_GETHANDLE HEX: 00BD ; inline
-: EM_GETTHUMB HEX: 00BE ; inline
-: EM_LINELENGTH HEX: 00C1 ; inline
-: EM_REPLACESEL HEX: 00C2 ; inline
-: EM_GETLINE HEX: 00C4 ; inline
-: EM_LIMITTEXT HEX: 00C5 ; inline
-: EM_CANUNDO HEX: 00C6 ; inline
-: EM_UNDO HEX: 00C7 ; inline
-: EM_FMTLINES HEX: 00C8 ; inline
-: EM_LINEFROMCHAR HEX: 00C9 ; inline
-: EM_SETTABSTOPS HEX: 00CB ; inline
-: EM_SETPASSWORDCHAR HEX: 00CC ; inline
-: EM_EMPTYUNDOBUFFER HEX: 00CD ; inline
-: EM_GETFIRSTVISIBLELINE HEX: 00CE ; inline
-: EM_SETREADONLY HEX: 00CF ; inline
-: EM_SETWORDBREAKPROC HEX: 00D0 ; inline
-: EM_GETWORDBREAKPROC HEX: 00D1 ; inline
-: EM_GETPASSWORDCHAR HEX: 00D2 ; inline
-: EM_SETMARGINS HEX: 00D3 ; inline
-: EM_GETMARGINS HEX: 00D4 ; inline
-: EM_SETLIMITTEXT EM_LIMITTEXT ; inline
-: EM_GETLIMITTEXT HEX: 00D5 ; inline
-: EM_POSFROMCHAR HEX: 00D6 ; inline
-: EM_CHARFROMPOS HEX: 00D7 ; inline
-: EM_SETIMESTATUS HEX: 00D8 ; inline
-: EM_GETIMESTATUS HEX: 00D9 ; inline
-: BM_GETCHECK HEX: 00F0 ; inline
-: BM_SETCHECK HEX: 00F1 ; inline
-: BM_GETSTATE HEX: 00F2 ; inline
-: BM_SETSTATE HEX: 00F3 ; inline
-: BM_SETSTYLE HEX: 00F4 ; inline
-: BM_CLICK HEX: 00F5 ; inline
-: BM_GETIMAGE HEX: 00F6 ; inline
-: BM_SETIMAGE HEX: 00F7 ; inline
-: STM_SETICON HEX: 0170 ; inline
-: STM_GETICON HEX: 0171 ; inline
-: STM_SETIMAGE HEX: 0172 ; inline
-: STM_GETIMAGE HEX: 0173 ; inline
-: STM_MSGMAX HEX: 0174 ; inline
-: DM_GETDEFID WM_USER ; inline
-: DM_SETDEFID  WM_USER 1 + ; inline
-: DM_REPOSITION WM_USER 2 + ; inline
-: LB_ADDSTRING HEX: 0180 ; inline
-: LB_INSERTSTRING HEX: 0181 ; inline
-: LB_DELETESTRING HEX: 0182 ; inline
-: LB_SELITEMRANGEEX HEX: 0183 ; inline
-: LB_RESETCONTENT HEX: 0184 ; inline
-: LB_SETSEL HEX: 0185 ; inline
-: LB_SETCURSEL HEX: 0186 ; inline
-: LB_GETSEL HEX: 0187 ; inline
-: LB_GETCURSEL HEX: 0188 ; inline
-: LB_GETTEXT HEX: 0189 ; inline
-: LB_GETTEXTLEN HEX: 018A ; inline
-: LB_GETCOUNT HEX: 018B ; inline
-: LB_SELECTSTRING HEX: 018C ; inline
-: LB_DIR HEX: 018D ; inline
-: LB_GETTOPINDEX HEX: 018E ; inline
-: LB_FINDSTRING HEX: 018F ; inline
-: LB_GETSELCOUNT HEX: 0190 ; inline
-: LB_GETSELITEMS HEX: 0191 ; inline
-: LB_SETTABSTOPS HEX: 0192 ; inline
-: LB_GETHORIZONTALEXTENT HEX: 0193 ; inline
-: LB_SETHORIZONTALEXTENT HEX: 0194 ; inline
-: LB_SETCOLUMNWIDTH HEX: 0195 ; inline
-: LB_ADDFILE HEX: 0196 ; inline
-: LB_SETTOPINDEX HEX: 0197 ; inline
-: LB_GETITEMRECT HEX: 0198 ; inline
-: LB_GETITEMDATA HEX: 0199 ; inline
-: LB_SETITEMDATA HEX: 019A ; inline
-: LB_SELITEMRANGE HEX: 019B ; inline
-: LB_SETANCHORINDEX HEX: 019C ; inline
-: LB_GETANCHORINDEX HEX: 019D ; inline
-: LB_SETCARETINDEX HEX: 019E ; inline
-: LB_GETCARETINDEX HEX: 019F ; inline
-: LB_SETITEMHEIGHT HEX: 01A0 ; inline
-: LB_GETITEMHEIGHT HEX: 01A1 ; inline
-: LB_FINDSTRINGEXACT HEX: 01A2 ; inline
-: LB_SETLOCALE HEX: 01A5 ; inline
-: LB_GETLOCALE HEX: 01A6 ; inline
-: LB_SETCOUNT HEX: 01A7 ; inline
-: LB_INITSTORAGE HEX: 01A8 ; inline
-: LB_ITEMFROMPOINT HEX: 01A9 ; inline
-: LB_MULTIPLEADDSTRING HEX: 01B1 ; inline
-: LB_GETLISTBOXINFO HEX: 01B2 ; inline
-: LB_MSGMAX_501 HEX: 01B3 ; inline
-: LB_MSGMAX_WCE4 HEX: 01B1 ; inline
-: LB_MSGMAX_4 HEX: 01B0 ; inline
-: LB_MSGMAX_PRE4 HEX: 01A8 ; inline
-: CB_GETEDITSEL HEX: 0140 ; inline
-: CB_LIMITTEXT HEX: 0141 ; inline
-: CB_SETEDITSEL HEX: 0142 ; inline
-: CB_ADDSTRING HEX: 0143 ; inline
-: CB_DELETESTRING HEX: 0144 ; inline
-: CB_DIR HEX: 0145 ; inline
-: CB_GETCOUNT HEX: 0146 ; inline
-: CB_GETCURSEL HEX: 0147 ; inline
-: CB_GETLBTEXT HEX: 0148 ; inline
-: CB_GETLBTEXTLEN HEX: 0149 ; inline
-: CB_INSERTSTRING HEX: 014A ; inline
-: CB_RESETCONTENT HEX: 014B ; inline
-: CB_FINDSTRING HEX: 014C ; inline
-: CB_SELECTSTRING HEX: 014D ; inline
-: CB_SETCURSEL HEX: 014E ; inline
-: CB_SHOWDROPDOWN HEX: 014F ; inline
-: CB_GETITEMDATA HEX: 0150 ; inline
-: CB_SETITEMDATA HEX: 0151 ; inline
-: CB_GETDROPPEDCONTROLRECT HEX: 0152 ; inline
-: CB_SETITEMHEIGHT HEX: 0153 ; inline
-: CB_GETITEMHEIGHT HEX: 0154 ; inline
-: CB_SETEXTENDEDUI HEX: 0155 ; inline
-: CB_GETEXTENDEDUI HEX: 0156 ; inline
-: CB_GETDROPPEDSTATE HEX: 0157 ; inline
-: CB_FINDSTRINGEXACT HEX: 0158 ; inline
-: CB_SETLOCALE HEX: 0159 ; inline
-: CB_GETLOCALE HEX: 015A ; inline
-: CB_GETTOPINDEX HEX: 015B ; inline
-: CB_SETTOPINDEX HEX: 015C ; inline
-: CB_GETHORIZONTALEXTENT HEX: 015d ; inline
-: CB_SETHORIZONTALEXTENT HEX: 015e ; inline
-: CB_GETDROPPEDWIDTH HEX: 015f ; inline
-: CB_SETDROPPEDWIDTH HEX: 0160 ; inline
-: CB_INITSTORAGE HEX: 0161 ; inline
-: CB_MULTIPLEADDSTRING HEX: 0163 ; inline
-: CB_GETCOMBOBOXINFO HEX: 0164 ; inline
-: CB_MSGMAX_501 HEX: 0165 ; inline
-: CB_MSGMAX_WCE400 HEX: 0163 ; inline
-: CB_MSGMAX_400 HEX: 0162 ; inline
-: CB_MSGMAX_PRE400 HEX: 015B ; inline
-: SBM_SETPOS HEX: 00E0 ; inline
-: SBM_GETPOS HEX: 00E1 ; inline
-: SBM_SETRANGE HEX: 00E2 ; inline
-: SBM_SETRANGEREDRAW HEX: 00E6 ; inline
-: SBM_GETRANGE HEX: 00E3 ; inline
-: SBM_ENABLE_ARROWS HEX: 00E4 ; inline
-: SBM_SETSCROLLINFO HEX: 00E9 ; inline
-: SBM_GETSCROLLINFO HEX: 00EA ; inline
-: SBM_GETSCROLLBARINFO HEX: 00EB ; inline
-: LVM_FIRST HEX: 1000 ; inline ! ListView messages
-: TV_FIRST HEX: 1100 ; inline ! TreeView messages
-: HDM_FIRST HEX: 1200 ; inline ! Header messages
-: TCM_FIRST HEX: 1300 ; inline ! Tab control messages
-: PGM_FIRST HEX: 1400 ; inline ! Pager control messages
-: ECM_FIRST HEX: 1500 ; inline ! Edit control messages
-: BCM_FIRST HEX: 1600 ; inline ! Button control messages
-: CBM_FIRST HEX: 1700 ; inline ! Combobox control messages
-: CCM_FIRST HEX: 2000 ; inline ! Common control shared messages
-: CCM_LAST CCM_FIRST HEX: 0200 + ; inline
-: CCM_SETBKCOLOR CCM_FIRST  1 +  ; inline
-: CCM_SETCOLORSCHEME CCM_FIRST  2 +  ; inline
-: CCM_GETCOLORSCHEME CCM_FIRST  3 +  ; inline
-: CCM_GETDROPTARGET CCM_FIRST  4 +  ; inline
-: CCM_SETUNICODEFORMAT CCM_FIRST  5 +  ; inline
-: CCM_GETUNICODEFORMAT CCM_FIRST  6 +  ; inline
-: CCM_SETVERSION CCM_FIRST  7 +  ; inline
-: CCM_GETVERSION CCM_FIRST  8 +  ; inline
-: CCM_SETNOTIFYWINDOW CCM_FIRST  9 +  ; inline
-: CCM_SETWINDOWTHEME CCM_FIRST  HEX: b +  ; inline
-: CCM_DPISCALE CCM_FIRST  HEX: c +  ; inline
-: HDM_GETITEMCOUNT HDM_FIRST  0 +  ; inline
-: HDM_INSERTITEMA HDM_FIRST  1 +  ; inline
-: HDM_INSERTITEMW HDM_FIRST  10 +  ; inline
-: HDM_DELETEITEM HDM_FIRST  2 +  ; inline
-: HDM_GETITEMA HDM_FIRST  3 +  ; inline
-: HDM_GETITEMW HDM_FIRST  11 +  ; inline
-: HDM_SETITEMA HDM_FIRST  4 +  ; inline
-: HDM_SETITEMW HDM_FIRST  12 +  ; inline
-: HDM_LAYOUT HDM_FIRST  5 +  ; inline
-: HDM_HITTEST HDM_FIRST  6 +  ; inline
-: HDM_GETITEMRECT HDM_FIRST  7 +  ; inline
-: HDM_SETIMAGELIST HDM_FIRST  8 +  ; inline
-: HDM_GETIMAGELIST HDM_FIRST  9 +  ; inline
-: HDM_ORDERTOINDEX HDM_FIRST  15 +  ; inline
-: HDM_CREATEDRAGIMAGE HDM_FIRST  16 +  ; inline
-: HDM_GETORDERARRAY HDM_FIRST  17 +  ; inline
-: HDM_SETORDERARRAY HDM_FIRST  18 +  ; inline
-: HDM_SETHOTDIVIDER HDM_FIRST  19 +  ; inline
-: HDM_SETBITMAPMARGIN HDM_FIRST  20 +  ; inline
-: HDM_GETBITMAPMARGIN HDM_FIRST  21 +  ; inline
-: HDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: HDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: HDM_SETFILTERCHANGETIMEOUT HDM_FIRST 22 + ; inline
-: HDM_EDITFILTER HDM_FIRST 23 + ; inline
-: HDM_CLEARFILTER HDM_FIRST 24 + ; inline
-: TB_ENABLEBUTTON WM_USER 1 + ; inline
-: TB_CHECKBUTTON WM_USER 2 + ; inline
-: TB_PRESSBUTTON WM_USER 3 + ; inline
-: TB_HIDEBUTTON WM_USER  4 +  ; inline
-: TB_INDETERMINATE WM_USER  5 +  ; inline
-: TB_MARKBUTTON WM_USER  6 +  ; inline
-: TB_ISBUTTONENABLED WM_USER  9 +  ; inline
-: TB_ISBUTTONCHECKED WM_USER  10 +  ; inline
-: TB_ISBUTTONPRESSED WM_USER  11 +  ; inline
-: TB_ISBUTTONHIDDEN WM_USER  12 +  ; inline
-: TB_ISBUTTONINDETERMINATE WM_USER  13 +  ; inline
-: TB_ISBUTTONHIGHLIGHTED WM_USER  14 +  ; inline
-: TB_SETSTATE WM_USER  17 +  ; inline
-: TB_GETSTATE WM_USER  18 +  ; inline
-: TB_ADDBITMAP WM_USER  19 +  ; inline
-: TB_ADDBUTTONSA WM_USER  20 +  ; inline
-: TB_INSERTBUTTONA WM_USER  21 +  ; inline
-: TB_ADDBUTTONS WM_USER  20 +  ; inline
-: TB_INSERTBUTTON WM_USER  21 +  ; inline
-: TB_DELETEBUTTON WM_USER  22 +  ; inline
-: TB_GETBUTTON WM_USER  23 +  ; inline
-: TB_BUTTONCOUNT WM_USER  24 +  ; inline
-: TB_COMMANDTOINDEX WM_USER  25 +  ; inline
-: TB_SAVERESTOREA WM_USER  26 +  ; inline
-: TB_SAVERESTOREW WM_USER  76 +  ; inline
-: TB_CUSTOMIZE WM_USER  27 +  ; inline
-: TB_ADDSTRINGA WM_USER  28 +  ; inline
-: TB_ADDSTRINGW WM_USER  77 +  ; inline
-: TB_GETITEMRECT WM_USER  29 +  ; inline
-: TB_BUTTONSTRUCTSIZE WM_USER  30 +  ; inline
-: TB_SETBUTTONSIZE WM_USER  31 +  ; inline
-: TB_SETBITMAPSIZE WM_USER  32 +  ; inline
-: TB_AUTOSIZE WM_USER  33 +  ; inline
-: TB_GETTOOLTIPS WM_USER  35 +  ; inline
-: TB_SETTOOLTIPS WM_USER  36 +  ; inline
-: TB_SETPARENT WM_USER  37 +  ; inline
-: TB_SETROWS WM_USER  39 +  ; inline
-: TB_GETROWS WM_USER  40 +  ; inline
-: TB_SETCMDID WM_USER  42 +  ; inline
-: TB_CHANGEBITMAP WM_USER  43 +  ; inline
-: TB_GETBITMAP WM_USER  44 +  ; inline
-: TB_GETBUTTONTEXTA WM_USER  45 +  ; inline
-: TB_GETBUTTONTEXTW WM_USER  75 +  ; inline
-: TB_REPLACEBITMAP WM_USER  46 +  ; inline
-: TB_SETINDENT WM_USER  47 +  ; inline
-: TB_SETIMAGELIST WM_USER  48 +  ; inline
-: TB_GETIMAGELIST WM_USER  49 +  ; inline
-: TB_LOADIMAGES WM_USER  50 +  ; inline
-: TB_GETRECT WM_USER  51 +  ; inline
-: TB_SETHOTIMAGELIST WM_USER  52 +  ; inline
-: TB_GETHOTIMAGELIST WM_USER  53 +  ; inline
-: TB_SETDISABLEDIMAGELIST WM_USER  54 +  ; inline
-: TB_GETDISABLEDIMAGELIST WM_USER  55 +  ; inline
-: TB_SETSTYLE WM_USER  56 +  ; inline
-: TB_GETSTYLE WM_USER  57 +  ; inline
-: TB_GETBUTTONSIZE WM_USER  58 +  ; inline
-: TB_SETBUTTONWIDTH WM_USER  59 +  ; inline
-: TB_SETMAXTEXTROWS WM_USER  60 +  ; inline
-: TB_GETTEXTROWS WM_USER  61 +  ; inline
-: TB_GETOBJECT WM_USER  62 +  ; inline
-: TB_GETHOTITEM WM_USER  71 +  ; inline
-: TB_SETHOTITEM WM_USER  72 +  ; inline
-: TB_SETANCHORHIGHLIGHT WM_USER  73 +  ; inline
-: TB_GETANCHORHIGHLIGHT WM_USER  74 +  ; inline
-: TB_MAPACCELERATORA WM_USER  78 +  ; inline
-: TB_GETINSERTMARK WM_USER  79 +  ; inline
-: TB_SETINSERTMARK WM_USER  80 +  ; inline
-: TB_INSERTMARKHITTEST WM_USER  81 +  ; inline
-: TB_MOVEBUTTON WM_USER  82 +  ; inline
-: TB_GETMAXSIZE WM_USER  83 +  ; inline
-: TB_SETEXTENDEDSTYLE WM_USER  84 +  ; inline
-: TB_GETEXTENDEDSTYLE WM_USER  85 +  ; inline
-: TB_GETPADDING WM_USER  86 +  ; inline
-: TB_SETPADDING WM_USER  87 +  ; inline
-: TB_SETINSERTMARKCOLOR WM_USER  88 +  ; inline
-: TB_GETINSERTMARKCOLOR WM_USER  89 +  ; inline
-: TB_SETCOLORSCHEME CCM_SETCOLORSCHEME ; inline
-: TB_GETCOLORSCHEME CCM_GETCOLORSCHEME ; inline
-: TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: TB_MAPACCELERATORW WM_USER  90 +  ; inline
-: TB_GETBITMAPFLAGS WM_USER  41 +  ; inline
-: TB_GETBUTTONINFOW WM_USER  63 +  ; inline
-: TB_SETBUTTONINFOW WM_USER  64 +  ; inline
-: TB_GETBUTTONINFOA WM_USER  65 +  ; inline
-: TB_SETBUTTONINFOA WM_USER  66 +  ; inline
-: TB_INSERTBUTTONW WM_USER  67 +  ; inline
-: TB_ADDBUTTONSW WM_USER  68 +  ; inline
-: TB_HITTEST WM_USER  69 +  ; inline
-: TB_SETDRAWTEXTFLAGS WM_USER  70 +  ; inline
-: TB_GETSTRINGW WM_USER  91 +  ; inline
-: TB_GETSTRINGA WM_USER  92 +  ; inline
-: TB_GETMETRICS WM_USER  101 +  ; inline
-: TB_SETMETRICS WM_USER  102 +  ; inline
-: TB_SETWINDOWTHEME CCM_SETWINDOWTHEME ; inline
-: RB_INSERTBANDA WM_USER  1 +  ; inline
-: RB_DELETEBAND WM_USER  2 +  ; inline
-: RB_GETBARINFO WM_USER  3 +  ; inline
-: RB_SETBARINFO WM_USER  4 +  ; inline
-: RB_GETBANDINFO WM_USER  5 +  ; inline
-: RB_SETBANDINFOA WM_USER  6 +  ; inline
-: RB_SETPARENT WM_USER  7 +  ; inline
-: RB_HITTEST WM_USER  8 +  ; inline
-: RB_GETRECT WM_USER  9 +  ; inline
-: RB_INSERTBANDW WM_USER  10 +  ; inline
-: RB_SETBANDINFOW WM_USER  11 +  ; inline
-: RB_GETBANDCOUNT WM_USER  12 +  ; inline
-: RB_GETROWCOUNT WM_USER  13 +  ; inline
-: RB_GETROWHEIGHT WM_USER  14 +  ; inline
-: RB_IDTOINDEX WM_USER  16 +  ; inline
-: RB_GETTOOLTIPS WM_USER  17 +  ; inline
-: RB_SETTOOLTIPS WM_USER  18 +  ; inline
-: RB_SETBKCOLOR WM_USER  19 +  ; inline
-: RB_GETBKCOLOR WM_USER  20 +  ; inline
-: RB_SETTEXTCOLOR WM_USER  21 +  ; inline
-: RB_GETTEXTCOLOR WM_USER  22 +  ; inline
-: RB_SIZETORECT WM_USER  23 +  ; inline
-: RB_SETCOLORSCHEME CCM_SETCOLORSCHEME ; inline
-: RB_GETCOLORSCHEME CCM_GETCOLORSCHEME ; inline
-: RB_BEGINDRAG WM_USER  24 +  ; inline
-: RB_ENDDRAG WM_USER  25 +  ; inline
-: RB_DRAGMOVE WM_USER  26 +  ; inline
-: RB_GETBARHEIGHT WM_USER  27 +  ; inline
-: RB_GETBANDINFOW WM_USER  28 +  ; inline
-: RB_GETBANDINFOA WM_USER  29 +  ; inline
-: RB_MINIMIZEBAND WM_USER  30 +  ; inline
-: RB_MAXIMIZEBAND WM_USER  31 +  ; inline
-: RB_GETDROPTARGET CCM_GETDROPTARGET ; inline
-: RB_GETBANDBORDERS WM_USER  34 +  ; inline
-: RB_SHOWBAND WM_USER  35 +  ; inline
-: RB_SETPALETTE WM_USER  37 +  ; inline
-: RB_GETPALETTE WM_USER  38 +  ; inline
-: RB_MOVEBAND WM_USER  39 +  ; inline
-: RB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: RB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: RB_GETBANDMARGINS WM_USER  40 +  ; inline
-: RB_SETWINDOWTHEME CCM_SETWINDOWTHEME ; inline
-: RB_PUSHCHEVRON WM_USER  43 +  ; inline
-: TTM_ACTIVATE WM_USER  1 +  ; inline
-: TTM_SETDELAYTIME WM_USER  3 +  ; inline
-: TTM_ADDTOOLA WM_USER  4 +  ; inline
-: TTM_ADDTOOLW WM_USER  50 +  ; inline
-: TTM_DELTOOLA WM_USER  5 +  ; inline
-: TTM_DELTOOLW WM_USER  51 +  ; inline
-: TTM_NEWTOOLRECTA WM_USER  6 +  ; inline
-: TTM_NEWTOOLRECTW WM_USER  52 +  ; inline
-: TTM_RELAYEVENT WM_USER  7 +  ; inline
-: TTM_GETTOOLINFOA WM_USER  8 +  ; inline
-: TTM_GETTOOLINFOW WM_USER  53 +  ; inline
-: TTM_SETTOOLINFOA WM_USER  9 +  ; inline
-: TTM_SETTOOLINFOW WM_USER  54 +  ; inline
-: TTM_HITTESTA WM_USER 10 + ; inline
-: TTM_HITTESTW WM_USER 55 + ; inline
-: TTM_GETTEXTA WM_USER 11 + ; inline
-: TTM_GETTEXTW WM_USER 56 + ; inline
-: TTM_UPDATETIPTEXTA WM_USER 12 + ; inline
-: TTM_UPDATETIPTEXTW WM_USER 57 + ; inline
-: TTM_GETTOOLCOUNT WM_USER 13 + ; inline
-: TTM_ENUMTOOLSA WM_USER 14 + ; inline
-: TTM_ENUMTOOLSW WM_USER 58 + ; inline
-: TTM_GETCURRENTTOOLA WM_USER  15 +  ; inline
-: TTM_GETCURRENTTOOLW WM_USER  59 +  ; inline
-: TTM_WINDOWFROMPOINT WM_USER  16 +  ; inline
-: TTM_TRACKACTIVATE WM_USER  17 +  ; inline
-: TTM_TRACKPOSITION WM_USER  18 +  ; inline
-: TTM_SETTIPBKCOLOR WM_USER  19 +  ; inline
-: TTM_SETTIPTEXTCOLOR WM_USER  20 +  ; inline
-: TTM_GETDELAYTIME WM_USER  21 +  ; inline
-: TTM_GETTIPBKCOLOR WM_USER  22 +  ; inline
-: TTM_GETTIPTEXTCOLOR WM_USER  23 +  ; inline
-: TTM_SETMAXTIPWIDTH WM_USER  24 +  ; inline
-: TTM_GETMAXTIPWIDTH WM_USER  25 +  ; inline
-: TTM_SETMARGIN WM_USER  26 +  ; inline
-: TTM_GETMARGIN WM_USER  27 +  ; inline
-: TTM_POP WM_USER  28 +  ; inline
-: TTM_UPDATE WM_USER  29 +  ; inline
-: TTM_GETBUBBLESIZE WM_USER  30 +  ; inline
-: TTM_ADJUSTRECT WM_USER  31 +  ; inline
-: TTM_SETTITLEA WM_USER  32 +  ; inline
-: TTM_SETTITLEW WM_USER  33 +  ; inline
-: TTM_POPUP WM_USER  34 +  ; inline
-: TTM_GETTITLE WM_USER  35 +  ; inline
-: TTM_SETWINDOWTHEME CCM_SETWINDOWTHEME ; inline
-: SB_SETTEXTA WM_USER 1+  ; inline
-: SB_SETTEXTW WM_USER 11 +  ; inline
-: SB_GETTEXTA WM_USER 2 +  ; inline
-: SB_GETTEXTW WM_USER 13 +  ; inline
-: SB_GETTEXTLENGTHA WM_USER 3 +  ; inline
-: SB_GETTEXTLENGTHW WM_USER 12 +  ; inline
-: SB_SETPARTS WM_USER 4 +  ; inline
-: SB_GETPARTS WM_USER 6 +  ; inline
-: SB_GETBORDERS WM_USER 7 +  ; inline
-: SB_SETMINHEIGHT WM_USER 8 +  ; inline
-: SB_SIMPLE WM_USER 9 +  ; inline
-: SB_GETRECT WM_USER 10 +  ; inline
-: SB_ISSIMPLE WM_USER 14 +  ; inline
-: SB_SETICON WM_USER 15 +  ; inline
-: SB_SETTIPTEXTA WM_USER 16 +  ; inline
-: SB_SETTIPTEXTW WM_USER 17 +  ; inline
-: SB_GETTIPTEXTA WM_USER 18 +  ; inline
-: SB_GETTIPTEXTW WM_USER 19 +  ; inline
-: SB_GETICON WM_USER 20 +  ; inline
-: SB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: SB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: SB_SETBKCOLOR CCM_SETBKCOLOR ; inline
-: SB_SIMPLEID HEX: 00ff ; inline
-: TBM_GETPOS WM_USER ; inline
-: TBM_GETRANGEMIN WM_USER 1 +  ; inline
-: TBM_GETRANGEMAX WM_USER 2 +  ; inline
-: TBM_GETTIC WM_USER 3 +  ; inline
-: TBM_SETTIC WM_USER 4 +  ; inline
-: TBM_SETPOS WM_USER 5 +  ; inline
-: TBM_SETRANGE WM_USER 6 +  ; inline
-: TBM_SETRANGEMIN WM_USER 7 +  ; inline
-: TBM_SETRANGEMAX WM_USER 8 +  ; inline
-: TBM_CLEARTICS WM_USER 9 +  ; inline
-: TBM_SETSEL WM_USER 10 +  ; inline
-: TBM_SETSELSTART WM_USER 11 +  ; inline
-: TBM_SETSELEND WM_USER 12 +  ; inline
-: TBM_GETPTICS WM_USER 14 +  ; inline
-: TBM_GETTICPOS WM_USER 15 +  ; inline
-: TBM_GETNUMTICS WM_USER 16 +  ; inline
-: TBM_GETSELSTART WM_USER 17 +  ; inline
-: TBM_GETSELEND WM_USER 18 +  ; inline
-: TBM_CLEARSEL WM_USER 19 +  ; inline
-: TBM_SETTICFREQ WM_USER 20 +  ; inline
-: TBM_SETPAGESIZE WM_USER 21 +  ; inline
-: TBM_GETPAGESIZE WM_USER 22 +  ; inline
-: TBM_SETLINESIZE WM_USER 23 +  ; inline
-: TBM_GETLINESIZE WM_USER 24 +  ; inline
-: TBM_GETTHUMBRECT WM_USER 25 +  ; inline
-: TBM_GETCHANNELRECT WM_USER 26 +  ; inline
-: TBM_SETTHUMBLENGTH WM_USER 27 +  ; inline
-: TBM_GETTHUMBLENGTH WM_USER 28 +  ; inline
-: TBM_SETTOOLTIPS WM_USER 29 +  ; inline
-: TBM_GETTOOLTIPS WM_USER 30 +  ; inline
-: TBM_SETTIPSIDE WM_USER 31 +  ; inline
-: TBM_SETBUDDY WM_USER 32 +  ; inline
-: TBM_GETBUDDY WM_USER 33 +  ; inline
-: TBM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: TBM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: DL_BEGINDRAG WM_USER 133 +  ; inline
-: DL_DRAGGING WM_USER 134 +  ; inline
-: DL_DROPPED WM_USER 135 +  ; inline
-: DL_CANCELDRAG WM_USER 136 +  ; inline
-: UDM_SETRANGE WM_USER 101 +  ; inline
-: UDM_GETRANGE WM_USER 102 +  ; inline
-: UDM_SETPOS WM_USER 103 +  ; inline
-: UDM_GETPOS WM_USER 104 +  ; inline
-: UDM_SETBUDDY WM_USER 105 +  ; inline
-: UDM_GETBUDDY WM_USER 106 +  ; inline
-: UDM_SETACCEL WM_USER 107 +  ; inline
-: UDM_GETACCEL WM_USER 108 +  ; inline
-: UDM_SETBASE WM_USER 109 +  ; inline
-: UDM_GETBASE WM_USER 110 +  ; inline
-: UDM_SETRANGE32 WM_USER 111 +  ; inline
-: UDM_GETRANGE32 WM_USER 112 +  ; inline
-: UDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: UDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: UDM_SETPOS32 WM_USER 113 +  ; inline
-: UDM_GETPOS32 WM_USER 114 +  ; inline
-: PBM_SETRANGE WM_USER 1 +  ; inline
-: PBM_SETPOS WM_USER 2 +  ; inline
-: PBM_DELTAPOS WM_USER 3 +  ; inline
-: PBM_SETSTEP WM_USER 4 +  ; inline
-: PBM_STEPIT WM_USER 5 +  ; inline
-: PBM_SETRANGE32 WM_USER 6 +  ; inline
-: PBM_GETRANGE WM_USER 7 +  ; inline
-: PBM_GETPOS WM_USER 8 +  ; inline
-: PBM_SETBARCOLOR WM_USER 9 +  ; inline
-: PBM_SETBKCOLOR CCM_SETBKCOLOR ; inline
-: HKM_SETHOTKEY WM_USER 1 +  ; inline
-: HKM_GETHOTKEY WM_USER 2 +  ; inline
-: HKM_SETRULES WM_USER 3 +  ; inline
-: LVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: LVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: LVM_GETBKCOLOR LVM_FIRST  0 +  ; inline
-: LVM_SETBKCOLOR LVM_FIRST  1 +  ; inline
-: LVM_GETIMAGELIST LVM_FIRST  2 +  ; inline
-: LVM_SETIMAGELIST LVM_FIRST  3 +  ; inline
-: LVM_GETITEMCOUNT LVM_FIRST  4 +  ; inline
-: LVM_GETITEMA LVM_FIRST  5 +  ; inline
-: LVM_GETITEMW LVM_FIRST  75 +  ; inline
-: LVM_SETITEMA LVM_FIRST  6 +  ; inline
-: LVM_SETITEMW LVM_FIRST  76 +  ; inline
-: LVM_INSERTITEMA LVM_FIRST  7 +  ; inline
-: LVM_INSERTITEMW LVM_FIRST  77 +  ; inline
-: LVM_DELETEITEM LVM_FIRST  8 +  ; inline
-: LVM_DELETEALLITEMS LVM_FIRST  9 +  ; inline
-: LVM_GETCALLBACKMASK LVM_FIRST  10 +  ; inline
-: LVM_SETCALLBACKMASK LVM_FIRST  11 +  ; inline
-: LVM_FINDITEMA LVM_FIRST  13 +  ; inline
-: LVM_FINDITEMW LVM_FIRST  83 +  ; inline
-: LVM_GETITEMRECT LVM_FIRST  14 +  ; inline
-: LVM_SETITEMPOSITION LVM_FIRST  15 +  ; inline
-: LVM_GETITEMPOSITION LVM_FIRST  16 +  ; inline
-: LVM_GETSTRINGWIDTHA LVM_FIRST  17 +  ; inline
-: LVM_GETSTRINGWIDTHW LVM_FIRST  87 +  ; inline
-: LVM_HITTEST LVM_FIRST  18 +  ; inline
-: LVM_ENSUREVISIBLE LVM_FIRST  19 +  ; inline
-: LVM_SCROLL LVM_FIRST  20 +  ; inline
-: LVM_REDRAWITEMS LVM_FIRST  21 +  ; inline
-: LVM_ARRANGE LVM_FIRST  22 +  ; inline
-: LVM_EDITLABELA LVM_FIRST  23 +  ; inline
-: LVM_EDITLABELW LVM_FIRST  118 +  ; inline
-: LVM_GETEDITCONTROL LVM_FIRST  24 +  ; inline
-: LVM_GETCOLUMNA LVM_FIRST  25 +  ; inline
-: LVM_GETCOLUMNW LVM_FIRST  95 +  ; inline
-: LVM_SETCOLUMNA LVM_FIRST  26 +  ; inline
-: LVM_SETCOLUMNW LVM_FIRST  96 +  ; inline
-: LVM_INSERTCOLUMNA LVM_FIRST  27 +  ; inline
-: LVM_INSERTCOLUMNW LVM_FIRST  97 +  ; inline
-: LVM_DELETECOLUMN LVM_FIRST  28 +  ; inline
-: LVM_GETCOLUMNWIDTH LVM_FIRST  29 +  ; inline
-: LVM_SETCOLUMNWIDTH LVM_FIRST  30 +  ; inline
-: LVM_CREATEDRAGIMAGE LVM_FIRST  33 +  ; inline
-: LVM_GETVIEWRECT LVM_FIRST  34 +  ; inline
-: LVM_GETTEXTCOLOR LVM_FIRST  35 +  ; inline
-: LVM_SETTEXTCOLOR LVM_FIRST  36 +  ; inline
-: LVM_GETTEXTBKCOLOR LVM_FIRST  37 +  ; inline
-: LVM_SETTEXTBKCOLOR LVM_FIRST  38 +  ; inline
-: LVM_GETTOPINDEX LVM_FIRST  39 +  ; inline
-: LVM_GETCOUNTPERPAGE LVM_FIRST  40 +  ; inline
-: LVM_GETORIGIN LVM_FIRST  41 +  ; inline
-: LVM_UPDATE LVM_FIRST  42 +  ; inline
-: LVM_SETITEMSTATE LVM_FIRST  43 +  ; inline
-: LVM_GETITEMSTATE LVM_FIRST  44 +  ; inline
-: LVM_GETITEMTEXTA LVM_FIRST  45 +  ; inline
-: LVM_GETITEMTEXTW LVM_FIRST  115 +  ; inline
-: LVM_SETITEMTEXTA LVM_FIRST  46 +  ; inline
-: LVM_SETITEMTEXTW LVM_FIRST  116 +  ; inline
-: LVM_SETITEMCOUNT LVM_FIRST  47 +  ; inline
-: LVM_SORTITEMS LVM_FIRST  48 +  ; inline
-: LVM_SETITEMPOSITION32 LVM_FIRST  49 +  ; inline
-: LVM_GETSELECTEDCOUNT LVM_FIRST  50 +  ; inline
-: LVM_GETITEMSPACING LVM_FIRST  51 +  ; inline
-: LVM_GETISEARCHSTRINGA LVM_FIRST  52 +  ; inline
-: LVM_GETISEARCHSTRINGW LVM_FIRST  117 +  ; inline
-: LVM_SETICONSPACING LVM_FIRST  53 +  ; inline
-: LVM_SETEXTENDEDLISTVIEWSTYLE LVM_FIRST  54 +  ; inline
-: LVM_GETEXTENDEDLISTVIEWSTYLE LVM_FIRST  55 +  ; inline
-: LVM_GETSUBITEMRECT LVM_FIRST  56 +  ; inline
-: LVM_SUBITEMHITTEST LVM_FIRST  57 +  ; inline
-: LVM_SETCOLUMNORDERARRAY LVM_FIRST  58 +  ; inline
-: LVM_GETCOLUMNORDERARRAY LVM_FIRST  59 +  ; inline
-: LVM_SETHOTITEM LVM_FIRST  60 +  ; inline
-: LVM_GETHOTITEM LVM_FIRST  61 +  ; inline
-: LVM_SETHOTCURSOR LVM_FIRST  62 +  ; inline
-: LVM_GETHOTCURSOR LVM_FIRST  63 +  ; inline
-: LVM_APPROXIMATEVIEWRECT LVM_FIRST  64 +  ; inline
-: LVM_SETWORKAREAS LVM_FIRST  65 +  ; inline
-: LVM_GETWORKAREAS LVM_FIRST  70 +  ; inline
-: LVM_GETNUMBEROFWORKAREAS LVM_FIRST  73 +  ; inline
-: LVM_GETSELECTIONMARK LVM_FIRST  66 +  ; inline
-: LVM_SETSELECTIONMARK LVM_FIRST  67 +  ; inline
-: LVM_SETHOVERTIME LVM_FIRST  71 +  ; inline
-: LVM_GETHOVERTIME LVM_FIRST  72 +  ; inline
-: LVM_SETTOOLTIPS LVM_FIRST  74 +  ; inline
-: LVM_GETTOOLTIPS LVM_FIRST  78 +  ; inline
-: LVM_SORTITEMSEX LVM_FIRST  81 +  ; inline
-: LVM_SETBKIMAGEA LVM_FIRST  68 +  ; inline
-: LVM_SETBKIMAGEW LVM_FIRST  138 +  ; inline
-: LVM_GETBKIMAGEA LVM_FIRST  69 +  ; inline
-: LVM_GETBKIMAGEW LVM_FIRST  139 +  ; inline
-: LVM_SETSELECTEDCOLUMN LVM_FIRST  140 +  ; inline
-: LVM_SETTILEWIDTH LVM_FIRST  141 +  ; inline
-: LVM_SETVIEW LVM_FIRST  142 +  ; inline
-: LVM_GETVIEW LVM_FIRST  143 +  ; inline
-: LVM_INSERTGROUP LVM_FIRST  145 +  ; inline
-: LVM_SETGROUPINFO LVM_FIRST  147 +  ; inline
-: LVM_GETGROUPINFO LVM_FIRST  149 +  ; inline
-: LVM_REMOVEGROUP LVM_FIRST  150 +  ; inline
-: LVM_MOVEGROUP LVM_FIRST  151 +  ; inline
-: LVM_MOVEITEMTOGROUP LVM_FIRST  154 +  ; inline
-: LVM_SETGROUPMETRICS LVM_FIRST  155 +  ; inline
-: LVM_GETGROUPMETRICS LVM_FIRST  156 +  ; inline
-: LVM_ENABLEGROUPVIEW LVM_FIRST  157 +  ; inline
-: LVM_SORTGROUPS LVM_FIRST  158 +  ; inline
-: LVM_INSERTGROUPSORTED LVM_FIRST  159 +  ; inline
-: LVM_REMOVEALLGROUPS LVM_FIRST  160 +  ; inline
-: LVM_HASGROUP LVM_FIRST  161 +  ; inline
-: LVM_SETTILEVIEWINFO LVM_FIRST  162 +  ; inline
-: LVM_GETTILEVIEWINFO LVM_FIRST  163 +  ; inline
-: LVM_SETTILEINFO LVM_FIRST  164 +  ; inline
-: LVM_GETTILEINFO LVM_FIRST  165 +  ; inline
-: LVM_SETINSERTMARK LVM_FIRST  166 +  ; inline
-: LVM_GETINSERTMARK LVM_FIRST  167 +  ; inline
-: LVM_INSERTMARKHITTEST LVM_FIRST  168 +  ; inline
-: LVM_GETINSERTMARKRECT LVM_FIRST  169 +  ; inline
-: LVM_SETINSERTMARKCOLOR LVM_FIRST  170 +  ; inline
-: LVM_GETINSERTMARKCOLOR LVM_FIRST  171 +  ; inline
-: LVM_SETINFOTIP LVM_FIRST  173 +  ; inline
-: LVM_GETSELECTEDCOLUMN LVM_FIRST  174 +  ; inline
-: LVM_ISGROUPVIEWENABLED LVM_FIRST  175 +  ; inline
-: LVM_GETOUTLINECOLOR LVM_FIRST  176 +  ; inline
-: LVM_SETOUTLINECOLOR LVM_FIRST  177 +  ; inline
-: LVM_CANCELEDITLABEL LVM_FIRST  179 +  ; inline
-: LVM_MAPINDEXTOID LVM_FIRST  180 +  ; inline
-: LVM_MAPIDTOINDEX LVM_FIRST  181 +  ; inline
-: TVM_INSERTITEMA TV_FIRST  0 +  ; inline
-: TVM_INSERTITEMW TV_FIRST  50 +  ; inline
-: TVM_DELETEITEM TV_FIRST  1 +  ; inline
-: TVM_EXPAND TV_FIRST  2 +  ; inline
-: TVM_GETITEMRECT TV_FIRST  4 +  ; inline
-: TVM_GETCOUNT TV_FIRST  5 +  ; inline
-: TVM_GETINDENT TV_FIRST  6 +  ; inline
-: TVM_SETINDENT TV_FIRST  7 +  ; inline
-: TVM_GETIMAGELIST TV_FIRST  8 +  ; inline
-: TVM_SETIMAGELIST TV_FIRST  9 +  ; inline
-: TVM_GETNEXTITEM TV_FIRST  10 +  ; inline
-: TVM_SELECTITEM TV_FIRST  11 +  ; inline
-: TVM_GETITEMA TV_FIRST  12 +  ; inline
-: TVM_GETITEMW TV_FIRST  62 +  ; inline
-: TVM_SETITEMA TV_FIRST  13 +  ; inline
-: TVM_SETITEMW TV_FIRST  63 +  ; inline
-: TVM_EDITLABELA TV_FIRST  14 +  ; inline
-: TVM_EDITLABELW TV_FIRST  65 +  ; inline
-: TVM_GETEDITCONTROL TV_FIRST  15 +  ; inline
-: TVM_GETVISIBLECOUNT TV_FIRST  16 +  ; inline
-: TVM_HITTEST TV_FIRST  17 +  ; inline
-: TVM_CREATEDRAGIMAGE TV_FIRST  18 +  ; inline
-: TVM_SORTCHILDREN TV_FIRST  19 +  ; inline
-: TVM_ENSUREVISIBLE TV_FIRST  20 +  ; inline
-: TVM_SORTCHILDRENCB TV_FIRST  21 +  ; inline
-: TVM_ENDEDITLABELNOW TV_FIRST  22 +  ; inline
-: TVM_GETISEARCHSTRINGA TV_FIRST  23 +  ; inline
-: TVM_GETISEARCHSTRINGW TV_FIRST  64 +  ; inline
-: TVM_SETTOOLTIPS TV_FIRST  24 +  ; inline
-: TVM_GETTOOLTIPS TV_FIRST  25 +  ; inline
-: TVM_SETINSERTMARK TV_FIRST  26 +  ; inline
-: TVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: TVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: TVM_SETITEMHEIGHT TV_FIRST  27 +  ; inline
-: TVM_GETITEMHEIGHT TV_FIRST  28 +  ; inline
-: TVM_SETBKCOLOR TV_FIRST  29 +  ; inline
-: TVM_SETTEXTCOLOR TV_FIRST  30 +  ; inline
-: TVM_GETBKCOLOR TV_FIRST  31 +  ; inline
-: TVM_GETTEXTCOLOR TV_FIRST  32 +  ; inline
-: TVM_SETSCROLLTIME TV_FIRST  33 +  ; inline
-: TVM_GETSCROLLTIME TV_FIRST  34 +  ; inline
-: TVM_SETINSERTMARKCOLOR TV_FIRST  37 +  ; inline
-: TVM_GETINSERTMARKCOLOR TV_FIRST  38 +  ; inline
-: TVM_GETITEMSTATE TV_FIRST  39 +  ; inline
-: TVM_SETLINECOLOR TV_FIRST  40 +  ; inline
-: TVM_GETLINECOLOR TV_FIRST  41 +  ; inline
-: TVM_MAPACCIDTOHTREEITEM TV_FIRST  42 +  ; inline
-: TVM_MAPHTREEITEMTOACCID TV_FIRST  43 +  ; inline
-: CBEM_INSERTITEMA WM_USER  1 +  ; inline
-: CBEM_SETIMAGELIST WM_USER  2 +  ; inline
-: CBEM_GETIMAGELIST WM_USER  3 +  ; inline
-: CBEM_GETITEMA WM_USER  4 +  ; inline
-: CBEM_SETITEMA WM_USER  5 +  ; inline
-: CBEM_DELETEITEM CB_DELETESTRING ; inline
-: CBEM_GETCOMBOCONTROL WM_USER  6 +  ; inline
-: CBEM_GETEDITCONTROL WM_USER  7 +  ; inline
-: CBEM_SETEXTENDEDSTYLE WM_USER  14 +  ; inline
-: CBEM_GETEXTENDEDSTYLE WM_USER  9 +  ; inline
-: CBEM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: CBEM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: CBEM_SETEXSTYLE WM_USER  8 +  ; inline
-: CBEM_GETEXSTYLE WM_USER  9 +  ; inline
-: CBEM_HASEDITCHANGED WM_USER  10 +  ; inline
-: CBEM_INSERTITEMW WM_USER  11 +  ; inline
-: CBEM_SETITEMW WM_USER  12 +  ; inline
-: CBEM_GETITEMW WM_USER  13 +  ; inline
-: TCM_GETIMAGELIST TCM_FIRST  2 +  ; inline
-: TCM_SETIMAGELIST TCM_FIRST  3 +  ; inline
-: TCM_GETITEMCOUNT TCM_FIRST  4 +  ; inline
-: TCM_GETITEMA TCM_FIRST  5 +  ; inline
-: TCM_GETITEMW TCM_FIRST  60 +  ; inline
-: TCM_SETITEMA TCM_FIRST  6 +  ; inline
-: TCM_SETITEMW TCM_FIRST  61 +  ; inline
-: TCM_INSERTITEMA TCM_FIRST  7 +  ; inline
-: TCM_INSERTITEMW TCM_FIRST  62 +  ; inline
-: TCM_DELETEITEM TCM_FIRST  8 +  ; inline
-: TCM_DELETEALLITEMS TCM_FIRST  9 +  ; inline
-: TCM_GETITEMRECT TCM_FIRST  10 +  ; inline
-: TCM_GETCURSEL TCM_FIRST  11 +  ; inline
-: TCM_SETCURSEL TCM_FIRST  12 +  ; inline
-: TCM_HITTEST TCM_FIRST  13 +  ; inline
-: TCM_SETITEMEXTRA TCM_FIRST  14 +  ; inline
-: TCM_ADJUSTRECT TCM_FIRST  40 +  ; inline
-: TCM_SETITEMSIZE TCM_FIRST  41 +  ; inline
-: TCM_REMOVEIMAGE TCM_FIRST  42 +  ; inline
-: TCM_SETPADDING TCM_FIRST  43 +  ; inline
-: TCM_GETROWCOUNT TCM_FIRST  44 +  ; inline
-: TCM_GETTOOLTIPS TCM_FIRST  45 +  ; inline
-: TCM_SETTOOLTIPS TCM_FIRST  46 +  ; inline
-: TCM_GETCURFOCUS TCM_FIRST  47 +  ; inline
-: TCM_SETCURFOCUS TCM_FIRST  48 +  ; inline
-: TCM_SETMINTABWIDTH TCM_FIRST  49 +  ; inline
-: TCM_DESELECTALL TCM_FIRST  50 +  ; inline
-: TCM_HIGHLIGHTITEM TCM_FIRST  51 +  ; inline
-: TCM_SETEXTENDEDSTYLE TCM_FIRST  52 +  ; inline
-: TCM_GETEXTENDEDSTYLE TCM_FIRST  53 +  ; inline
-: TCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: TCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: ACM_OPENA WM_USER 100 +  ; inline
-: ACM_OPENW WM_USER 103 +  ; inline
-: ACM_PLAY WM_USER 101 +  ; inline
-: ACM_STOP WM_USER 102 +  ; inline
-: MCM_FIRST HEX: 1000 ; inline
-: MCM_GETCURSEL MCM_FIRST  1 +  ; inline
-: MCM_SETCURSEL MCM_FIRST  2 +  ; inline
-: MCM_GETMAXSELCOUNT MCM_FIRST  3 +  ; inline
-: MCM_SETMAXSELCOUNT MCM_FIRST  4 +  ; inline
-: MCM_GETSELRANGE MCM_FIRST  5 +  ; inline
-: MCM_SETSELRANGE MCM_FIRST  6 +  ; inline
-: MCM_GETMONTHRANGE MCM_FIRST  7 +  ; inline
-: MCM_SETDAYSTATE MCM_FIRST  8 +  ; inline
-: MCM_GETMINREQRECT MCM_FIRST  9 +  ; inline
-: MCM_SETCOLOR MCM_FIRST  10 +  ; inline
-: MCM_GETCOLOR MCM_FIRST  11 +  ; inline
-: MCM_SETTODAY MCM_FIRST  12 +  ; inline
-: MCM_GETTODAY MCM_FIRST  13 +  ; inline
-: MCM_HITTEST MCM_FIRST  14 +  ; inline
-: MCM_SETFIRSTDAYOFWEEK MCM_FIRST  15 +  ; inline
-: MCM_GETFIRSTDAYOFWEEK MCM_FIRST  16 +  ; inline
-: MCM_GETRANGE MCM_FIRST  17 +  ; inline
-: MCM_SETRANGE MCM_FIRST  18 +  ; inline
-: MCM_GETMONTHDELTA MCM_FIRST  19 +  ; inline
-: MCM_SETMONTHDELTA MCM_FIRST  20 +  ; inline
-: MCM_GETMAXTODAYWIDTH MCM_FIRST  21 +  ; inline
-: MCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline
-: MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline
-: DTM_FIRST HEX: 1000 ; inline
-: DTM_GETSYSTEMTIME DTM_FIRST  1 +  ; inline
-: DTM_SETSYSTEMTIME DTM_FIRST  2 +  ; inline
-: DTM_GETRANGE DTM_FIRST  3 +  ; inline
-: DTM_SETRANGE DTM_FIRST  4 +  ; inline
-: DTM_SETFORMATA DTM_FIRST  5 +  ; inline
-: DTM_SETFORMATW DTM_FIRST  50 +  ; inline
-: DTM_SETMCCOLOR DTM_FIRST  6 +  ; inline
-: DTM_GETMCCOLOR DTM_FIRST  7 +  ; inline
-: DTM_GETMONTHCAL DTM_FIRST  8 +  ; inline
-: DTM_SETMCFONT DTM_FIRST  9 +  ; inline
-: DTM_GETMCFONT DTM_FIRST  10 +  ; inline
-: PGM_SETCHILD PGM_FIRST  1 +  ; inline
-: PGM_RECALCSIZE PGM_FIRST  2 +  ; inline
-: PGM_FORWARDMOUSE PGM_FIRST  3 +  ; inline
-: PGM_SETBKCOLOR PGM_FIRST  4 +  ; inline
-: PGM_GETBKCOLOR PGM_FIRST  5 +  ; inline
-: PGM_SETBORDER PGM_FIRST  6 +  ; inline
-: PGM_GETBORDER PGM_FIRST  7 +  ; inline
-: PGM_SETPOS PGM_FIRST  8 +  ; inline
-: PGM_GETPOS PGM_FIRST  9 +  ; inline
-: PGM_SETBUTTONSIZE PGM_FIRST  10 +  ; inline
-: PGM_GETBUTTONSIZE PGM_FIRST  11 +  ; inline
-: PGM_GETBUTTONSTATE PGM_FIRST  12 +  ; inline
-: PGM_GETDROPTARGET CCM_GETDROPTARGET ; inline
-: BCM_GETIDEALSIZE BCM_FIRST  1 +  ; inline
-: BCM_SETIMAGELIST BCM_FIRST  2 +  ; inline
-: BCM_GETIMAGELIST BCM_FIRST  3 +  ; inline
-: BCM_SETTEXTMARGIN BCM_FIRST 4 +  ; inline
-: BCM_GETTEXTMARGIN BCM_FIRST 5 +  ; inline
-: EM_SETCUEBANNER       ECM_FIRST  1 +  ; inline
-: EM_GETCUEBANNER       ECM_FIRST  2 +  ; inline
-: EM_SHOWBALLOONTIP ECM_FIRST  3 +  ; inline
-: EM_HIDEBALLOONTIP ECM_FIRST  4 +  ; inline
-: CB_SETMINVISIBLE CBM_FIRST  1 +  ; inline
-: CB_GETMINVISIBLE CBM_FIRST  2 +  ; inline
-: LM_HITTEST WM_USER  HEX: 0300 +  ; inline
-: LM_GETIDEALHEIGHT WM_USER  HEX: 0301 +  ; inline
-: LM_SETITEM WM_USER  HEX: 0302 + ; inline
-: LM_GETITEM WM_USER  HEX: 0303 + ; inline
+CONSTANT: WM_NULL HEX: 0000
+CONSTANT: WM_CREATE HEX: 0001
+CONSTANT: WM_DESTROY HEX: 0002
+CONSTANT: WM_MOVE HEX: 0003
+CONSTANT: WM_SIZE HEX: 0005
+CONSTANT: WM_ACTIVATE HEX: 0006
+CONSTANT: WM_SETFOCUS HEX: 0007
+CONSTANT: WM_KILLFOCUS HEX: 0008
+CONSTANT: WM_ENABLE HEX: 000A
+CONSTANT: WM_SETREDRAW HEX: 000B
+CONSTANT: WM_SETTEXT HEX: 000C
+CONSTANT: WM_GETTEXT HEX: 000D
+CONSTANT: WM_GETTEXTLENGTH HEX: 000E
+CONSTANT: WM_PAINT HEX: 000F
+CONSTANT: WM_CLOSE HEX: 0010
+CONSTANT: WM_QUERYENDSESSION HEX: 0011
+CONSTANT: WM_QUERYOPEN HEX: 0013
+CONSTANT: WM_ENDSESSION HEX: 0016
+CONSTANT: WM_QUIT HEX: 0012
+CONSTANT: WM_ERASEBKGND HEX: 0014
+CONSTANT: WM_SYSCOLORCHANGE HEX: 0015
+CONSTANT: WM_SHOWWINDOW HEX: 0018
+CONSTANT: WM_WININICHANGE HEX: 001A
+CONSTANT: WM_SETTINGCHANGE HEX: 001A
+CONSTANT: WM_DEVMODECHANGE HEX: 001B
+CONSTANT: WM_ACTIVATEAPP HEX: 001C
+CONSTANT: WM_FONTCHANGE HEX: 001D
+CONSTANT: WM_TIMECHANGE HEX: 001E
+CONSTANT: WM_CANCELMODE HEX: 001F
+CONSTANT: WM_SETCURSOR HEX: 0020
+CONSTANT: WM_MOUSEACTIVATE HEX: 0021
+CONSTANT: WM_CHILDACTIVATE HEX: 0022
+CONSTANT: WM_QUEUESYNC HEX: 0023
+CONSTANT: WM_GETMINMAXINFO HEX: 0024
+CONSTANT: WM_PAINTICON HEX: 0026
+CONSTANT: WM_ICONERASEBKGND HEX: 0027
+CONSTANT: WM_NEXTDLGCTL HEX: 0028
+CONSTANT: WM_SPOOLERSTATUS HEX: 002A
+CONSTANT: WM_DRAWITEM HEX: 002B
+CONSTANT: WM_MEASUREITEM HEX: 002C
+CONSTANT: WM_DELETEITEM HEX: 002D
+CONSTANT: WM_VKEYTOITEM HEX: 002E
+CONSTANT: WM_CHARTOITEM HEX: 002F
+CONSTANT: WM_SETFONT HEX: 0030
+CONSTANT: WM_GETFONT HEX: 0031
+CONSTANT: WM_SETHOTKEY HEX: 0032
+CONSTANT: WM_GETHOTKEY HEX: 0033
+CONSTANT: WM_QUERYDRAGICON HEX: 0037
+CONSTANT: WM_COMPAREITEM HEX: 0039
+CONSTANT: WM_GETOBJECT HEX: 003D
+CONSTANT: WM_COMPACTING HEX: 0041
+CONSTANT: WM_COMMNOTIFY HEX: 0044
+CONSTANT: WM_WINDOWPOSCHANGING HEX: 0046
+CONSTANT: WM_WINDOWPOSCHANGED HEX: 0047
+CONSTANT: WM_POWER HEX: 0048
+CONSTANT: WM_COPYDATA HEX: 004A
+CONSTANT: WM_CANCELJOURNAL HEX: 004B
+CONSTANT: WM_NOTIFY HEX: 004E
+CONSTANT: WM_INPUTLANGCHANGEREQUEST HEX: 0050
+CONSTANT: WM_INPUTLANGCHANGE HEX: 0051
+CONSTANT: WM_TCARD HEX: 0052
+CONSTANT: WM_HELP HEX: 0053
+CONSTANT: WM_USERCHANGED HEX: 0054
+CONSTANT: WM_NOTIFYFORMAT HEX: 0055
+CONSTANT: WM_CONTEXTMENU HEX: 007B
+CONSTANT: WM_STYLECHANGING HEX: 007C
+CONSTANT: WM_STYLECHANGED HEX: 007D
+CONSTANT: WM_DISPLAYCHANGE HEX: 007E
+CONSTANT: WM_GETICON HEX: 007F
+CONSTANT: WM_SETICON HEX: 0080
+CONSTANT: WM_NCCREATE HEX: 0081
+CONSTANT: WM_NCDESTROY HEX: 0082
+CONSTANT: WM_NCCALCSIZE HEX: 0083
+CONSTANT: WM_NCHITTEST HEX: 0084
+CONSTANT: WM_NCPAINT HEX: 0085
+CONSTANT: WM_NCACTIVATE HEX: 0086
+CONSTANT: WM_GETDLGCODE HEX: 0087
+CONSTANT: WM_SYNCPAINT HEX: 0088
+CONSTANT: WM_NCMOUSEMOVE HEX: 00A0
+CONSTANT: WM_NCLBUTTONDOWN HEX: 00A1
+CONSTANT: WM_NCLBUTTONUP HEX: 00A2
+CONSTANT: WM_NCLBUTTONDBLCLK HEX: 00A3
+CONSTANT: WM_NCRBUTTONDOWN HEX: 00A4
+CONSTANT: WM_NCRBUTTONUP HEX: 00A5
+CONSTANT: WM_NCRBUTTONDBLCLK HEX: 00A6
+CONSTANT: WM_NCMBUTTONDOWN HEX: 00A7
+CONSTANT: WM_NCMBUTTONUP HEX: 00A8
+CONSTANT: WM_NCMBUTTONDBLCLK HEX: 00A9
+CONSTANT: WM_NCXBUTTONDOWN HEX: 00AB
+CONSTANT: WM_NCXBUTTONUP HEX: 00AC
+CONSTANT: WM_NCXBUTTONDBLCLK HEX: 00AD
+CONSTANT: WM_NCUAHDRAWCAPTION HEX: 00AE ! undocumented
+CONSTANT: WM_NCUAHDRAWFRAME HEX: 00AF   ! undocumented
+CONSTANT: WM_INPUT HEX: 00FF
+CONSTANT: WM_KEYFIRST HEX: 0100
+CONSTANT: WM_KEYDOWN HEX: 0100
+CONSTANT: WM_KEYUP HEX: 0101
+CONSTANT: WM_CHAR HEX: 0102
+CONSTANT: WM_DEADCHAR HEX: 0103
+CONSTANT: WM_SYSKEYDOWN HEX: 0104
+CONSTANT: WM_SYSKEYUP HEX: 0105
+CONSTANT: WM_SYSCHAR HEX: 0106
+CONSTANT: WM_SYSDEADCHAR HEX: 0107
+CONSTANT: WM_UNICHAR HEX: 0109
+CONSTANT: WM_KEYLAST_NT501 HEX: 0109
+CONSTANT: UNICODE_NOCHAR HEX: FFFF
+CONSTANT: WM_KEYLAST_PRE501 HEX: 0108
+CONSTANT: WM_IME_STARTCOMPOSITION HEX: 010D
+CONSTANT: WM_IME_ENDCOMPOSITION HEX: 010E
+CONSTANT: WM_IME_COMPOSITION HEX: 010F
+CONSTANT: WM_IME_KEYLAST HEX: 010F
+CONSTANT: WM_INITDIALOG HEX: 0110
+CONSTANT: WM_COMMAND HEX: 0111
+CONSTANT: WM_SYSCOMMAND HEX: 0112
+CONSTANT: WM_TIMER HEX: 0113
+CONSTANT: WM_HSCROLL HEX: 0114
+CONSTANT: WM_VSCROLL HEX: 0115
+CONSTANT: WM_INITMENU HEX: 0116
+CONSTANT: WM_INITMENUPOPUP HEX: 0117
+CONSTANT: WM_MENUSELECT HEX: 011F
+CONSTANT: WM_MENUCHAR HEX: 0120
+CONSTANT: WM_ENTERIDLE HEX: 0121
+CONSTANT: WM_MENURBUTTONUP HEX: 0122
+CONSTANT: WM_MENUDRAG HEX: 0123
+CONSTANT: WM_MENUGETOBJECT HEX: 0124
+CONSTANT: WM_UNINITMENUPOPUP HEX: 0125
+CONSTANT: WM_MENUCOMMAND HEX: 0126
+CONSTANT: WM_CHANGEUISTATE HEX: 0127
+CONSTANT: WM_UPDATEUISTATE HEX: 0128
+CONSTANT: WM_QUERYUISTATE HEX: 0129
+CONSTANT: WM_CTLCOLORMSGBOX HEX: 0132
+CONSTANT: WM_CTLCOLOREDIT HEX: 0133
+CONSTANT: WM_CTLCOLORLISTBOX HEX: 0134
+CONSTANT: WM_CTLCOLORBTN HEX: 0135
+CONSTANT: WM_CTLCOLORDLG HEX: 0136
+CONSTANT: WM_CTLCOLORSCROLLBAR HEX: 0137
+CONSTANT: WM_CTLCOLORSTATIC HEX: 0138
+CONSTANT: WM_MOUSEFIRST HEX: 0200
+CONSTANT: WM_MOUSEMOVE HEX: 0200
+CONSTANT: WM_LBUTTONDOWN HEX: 0201
+CONSTANT: WM_LBUTTONUP HEX: 0202
+CONSTANT: WM_LBUTTONDBLCLK HEX: 0203
+CONSTANT: WM_RBUTTONDOWN HEX: 0204
+CONSTANT: WM_RBUTTONUP HEX: 0205
+CONSTANT: WM_RBUTTONDBLCLK HEX: 0206
+CONSTANT: WM_MBUTTONDOWN HEX: 0207
+CONSTANT: WM_MBUTTONUP HEX: 0208
+CONSTANT: WM_MBUTTONDBLCLK HEX: 0209
+CONSTANT: WM_MOUSEWHEEL HEX: 020A
+CONSTANT: WM_XBUTTONDOWN HEX: 020B
+CONSTANT: WM_XBUTTONUP HEX: 020C
+CONSTANT: WM_XBUTTONDBLCLK HEX: 020D
+CONSTANT: WM_MOUSELAST_5 HEX: 020D
+CONSTANT: WM_MOUSELAST_4 HEX: 020A
+CONSTANT: WM_MOUSELAST_PRE_4 HEX: 0209
+CONSTANT: WM_PARENTNOTIFY HEX: 0210
+CONSTANT: WM_ENTERMENULOOP HEX: 0211
+CONSTANT: WM_EXITMENULOOP HEX: 0212
+CONSTANT: WM_NEXTMENU HEX: 0213
+CONSTANT: WM_SIZING HEX: 0214
+CONSTANT: WM_CAPTURECHANGED HEX: 0215
+CONSTANT: WM_MOVING HEX: 0216
+CONSTANT: WM_POWERBROADCAST HEX: 0218
+CONSTANT: WM_DEVICECHANGE HEX: 0219
+CONSTANT: WM_MDICREATE HEX: 0220
+CONSTANT: WM_MDIDESTROY HEX: 0221
+CONSTANT: WM_MDIACTIVATE HEX: 0222
+CONSTANT: WM_MDIRESTORE HEX: 0223
+CONSTANT: WM_MDINEXT HEX: 0224
+CONSTANT: WM_MDIMAXIMIZE HEX: 0225
+CONSTANT: WM_MDITILE HEX: 0226
+CONSTANT: WM_MDICASCADE HEX: 0227
+CONSTANT: WM_MDIICONARRANGE HEX: 0228
+CONSTANT: WM_MDIGETACTIVE HEX: 0229
+CONSTANT: WM_MDISETMENU HEX: 0230
+CONSTANT: WM_ENTERSIZEMOVE HEX: 0231
+CONSTANT: WM_EXITSIZEMOVE HEX: 0232
+CONSTANT: WM_DROPFILES HEX: 0233
+CONSTANT: WM_MDIREFRESHMENU HEX: 0234
+CONSTANT: WM_IME_SETCONTEXT HEX: 0281
+CONSTANT: WM_IME_NOTIFY HEX: 0282
+CONSTANT: WM_IME_CONTROL HEX: 0283
+CONSTANT: WM_IME_COMPOSITIONFULL HEX: 0284
+CONSTANT: WM_IME_SELECT HEX: 0285
+CONSTANT: WM_IME_CHAR HEX: 0286
+CONSTANT: WM_IME_REQUEST HEX: 0288
+CONSTANT: WM_IME_KEYDOWN HEX: 0290
+CONSTANT: WM_IME_KEYUP HEX: 0291
+CONSTANT: WM_MOUSEHOVER HEX: 02A1
+CONSTANT: WM_MOUSELEAVE HEX: 02A3
+CONSTANT: WM_NCMOUSEHOVER HEX: 02A0
+CONSTANT: WM_NCMOUSELEAVE HEX: 02A2
+CONSTANT: WM_WTSSESSION_CHANGE HEX: 02B1
+CONSTANT: WM_TABLET_FIRST HEX: 02c0
+CONSTANT: WM_TABLET_LAST HEX: 02df
+CONSTANT: WM_CUT HEX: 0300
+CONSTANT: WM_COPY HEX: 0301
+CONSTANT: WM_PASTE HEX: 0302
+CONSTANT: WM_CLEAR HEX: 0303
+CONSTANT: WM_UNDO HEX: 0304
+CONSTANT: WM_RENDERFORMAT HEX: 0305
+CONSTANT: WM_RENDERALLFORMATS HEX: 0306
+CONSTANT: WM_DESTROYCLIPBOARD HEX: 0307
+CONSTANT: WM_DRAWCLIPBOARD HEX: 0308
+CONSTANT: WM_PAINTCLIPBOARD HEX: 0309
+CONSTANT: WM_VSCROLLCLIPBOARD HEX: 030A
+CONSTANT: WM_SIZECLIPBOARD HEX: 030B
+CONSTANT: WM_ASKCBFORMATNAME HEX: 030C
+CONSTANT: WM_CHANGECBCHAIN HEX: 030D
+CONSTANT: WM_HSCROLLCLIPBOARD HEX: 030E
+CONSTANT: WM_QUERYNEWPALETTE HEX: 030F
+CONSTANT: WM_PALETTEISCHANGING HEX: 0310
+CONSTANT: WM_PALETTECHANGED HEX: 0311
+CONSTANT: WM_HOTKEY HEX: 0312
+CONSTANT: WM_PRINT HEX: 0317
+CONSTANT: WM_PRINTCLIENT HEX: 0318
+CONSTANT: WM_APPCOMMAND HEX: 0319
+CONSTANT: WM_THEMECHANGED HEX: 031A
+CONSTANT: WM_HANDHELDFIRST HEX: 0358
+CONSTANT: WM_HANDHELDLAST HEX: 035F
+CONSTANT: WM_AFXFIRST HEX: 0360
+CONSTANT: WM_AFXLAST HEX: 037F
+CONSTANT: WM_PENWINFIRST HEX: 0380
+CONSTANT: WM_PENWINLAST HEX: 038F
+CONSTANT: WM_APP HEX: 8000
+CONSTANT: WM_USER HEX: 0400
+CONSTANT: EM_GETSEL HEX: 00B0
+CONSTANT: EM_SETSEL HEX: 00B1
+CONSTANT: EM_GETRECT HEX: 00B2
+CONSTANT: EM_SETRECT HEX: 00B3
+CONSTANT: EM_SETRECTNP HEX: 00B4
+CONSTANT: EM_SCROLL HEX: 00B5
+CONSTANT: EM_LINESCROLL HEX: 00B6
+CONSTANT: EM_SCROLLCARET HEX: 00B7
+CONSTANT: EM_GETMODIFY HEX: 00B8
+CONSTANT: EM_SETMODIFY HEX: 00B9
+CONSTANT: EM_GETLINECOUNT HEX: 00BA
+CONSTANT: EM_LINEINDEX HEX: 00BB
+CONSTANT: EM_SETHANDLE HEX: 00BC
+CONSTANT: EM_GETHANDLE HEX: 00BD
+CONSTANT: EM_GETTHUMB HEX: 00BE
+CONSTANT: EM_LINELENGTH HEX: 00C1
+CONSTANT: EM_REPLACESEL HEX: 00C2
+CONSTANT: EM_GETLINE HEX: 00C4
+CONSTANT: EM_LIMITTEXT HEX: 00C5
+CONSTANT: EM_CANUNDO HEX: 00C6
+CONSTANT: EM_UNDO HEX: 00C7
+CONSTANT: EM_FMTLINES HEX: 00C8
+CONSTANT: EM_LINEFROMCHAR HEX: 00C9
+CONSTANT: EM_SETTABSTOPS HEX: 00CB
+CONSTANT: EM_SETPASSWORDCHAR HEX: 00CC
+CONSTANT: EM_EMPTYUNDOBUFFER HEX: 00CD
+CONSTANT: EM_GETFIRSTVISIBLELINE HEX: 00CE
+CONSTANT: EM_SETREADONLY HEX: 00CF
+CONSTANT: EM_SETWORDBREAKPROC HEX: 00D0
+CONSTANT: EM_GETWORDBREAKPROC HEX: 00D1
+CONSTANT: EM_GETPASSWORDCHAR HEX: 00D2
+CONSTANT: EM_SETMARGINS HEX: 00D3
+CONSTANT: EM_GETMARGINS HEX: 00D4
+ALIAS: EM_SETLIMITTEXT EM_LIMITTEXT
+CONSTANT: EM_GETLIMITTEXT HEX: 00D5
+CONSTANT: EM_POSFROMCHAR HEX: 00D6
+CONSTANT: EM_CHARFROMPOS HEX: 00D7
+CONSTANT: EM_SETIMESTATUS HEX: 00D8
+CONSTANT: EM_GETIMESTATUS HEX: 00D9
+CONSTANT: BM_GETCHECK HEX: 00F0
+CONSTANT: BM_SETCHECK HEX: 00F1
+CONSTANT: BM_GETSTATE HEX: 00F2
+CONSTANT: BM_SETSTATE HEX: 00F3
+CONSTANT: BM_SETSTYLE HEX: 00F4
+CONSTANT: BM_CLICK HEX: 00F5
+CONSTANT: BM_GETIMAGE HEX: 00F6
+CONSTANT: BM_SETIMAGE HEX: 00F7
+CONSTANT: STM_SETICON HEX: 0170
+CONSTANT: STM_GETICON HEX: 0171
+CONSTANT: STM_SETIMAGE HEX: 0172
+CONSTANT: STM_GETIMAGE HEX: 0173
+CONSTANT: STM_MSGMAX HEX: 0174
+CONSTANT: DM_GETDEFID WM_USER
+: DM_SETDEFID ( -- n ) ( -- n ) WM_USER 1  + ; inline
+: DM_REPOSITION ( -- n ) ( -- n ) WM_USER 2  + ; inline
+CONSTANT: LB_ADDSTRING HEX: 0180
+CONSTANT: LB_INSERTSTRING HEX: 0181
+CONSTANT: LB_DELETESTRING HEX: 0182
+CONSTANT: LB_SELITEMRANGEEX HEX: 0183
+CONSTANT: LB_RESETCONTENT HEX: 0184
+CONSTANT: LB_SETSEL HEX: 0185
+CONSTANT: LB_SETCURSEL HEX: 0186
+CONSTANT: LB_GETSEL HEX: 0187
+CONSTANT: LB_GETCURSEL HEX: 0188
+CONSTANT: LB_GETTEXT HEX: 0189
+CONSTANT: LB_GETTEXTLEN HEX: 018A
+CONSTANT: LB_GETCOUNT HEX: 018B
+CONSTANT: LB_SELECTSTRING HEX: 018C
+CONSTANT: LB_DIR HEX: 018D
+CONSTANT: LB_GETTOPINDEX HEX: 018E
+CONSTANT: LB_FINDSTRING HEX: 018F
+CONSTANT: LB_GETSELCOUNT HEX: 0190
+CONSTANT: LB_GETSELITEMS HEX: 0191
+CONSTANT: LB_SETTABSTOPS HEX: 0192
+CONSTANT: LB_GETHORIZONTALEXTENT HEX: 0193
+CONSTANT: LB_SETHORIZONTALEXTENT HEX: 0194
+CONSTANT: LB_SETCOLUMNWIDTH HEX: 0195
+CONSTANT: LB_ADDFILE HEX: 0196
+CONSTANT: LB_SETTOPINDEX HEX: 0197
+CONSTANT: LB_GETITEMRECT HEX: 0198
+CONSTANT: LB_GETITEMDATA HEX: 0199
+CONSTANT: LB_SETITEMDATA HEX: 019A
+CONSTANT: LB_SELITEMRANGE HEX: 019B
+CONSTANT: LB_SETANCHORINDEX HEX: 019C
+CONSTANT: LB_GETANCHORINDEX HEX: 019D
+CONSTANT: LB_SETCARETINDEX HEX: 019E
+CONSTANT: LB_GETCARETINDEX HEX: 019F
+CONSTANT: LB_SETITEMHEIGHT HEX: 01A0
+CONSTANT: LB_GETITEMHEIGHT HEX: 01A1
+CONSTANT: LB_FINDSTRINGEXACT HEX: 01A2
+CONSTANT: LB_SETLOCALE HEX: 01A5
+CONSTANT: LB_GETLOCALE HEX: 01A6
+CONSTANT: LB_SETCOUNT HEX: 01A7
+CONSTANT: LB_INITSTORAGE HEX: 01A8
+CONSTANT: LB_ITEMFROMPOINT HEX: 01A9
+CONSTANT: LB_MULTIPLEADDSTRING HEX: 01B1
+CONSTANT: LB_GETLISTBOXINFO HEX: 01B2
+CONSTANT: LB_MSGMAX_501 HEX: 01B3
+CONSTANT: LB_MSGMAX_WCE4 HEX: 01B1
+CONSTANT: LB_MSGMAX_4 HEX: 01B0
+CONSTANT: LB_MSGMAX_PRE4 HEX: 01A8
+CONSTANT: CB_GETEDITSEL HEX: 0140
+CONSTANT: CB_LIMITTEXT HEX: 0141
+CONSTANT: CB_SETEDITSEL HEX: 0142
+CONSTANT: CB_ADDSTRING HEX: 0143
+CONSTANT: CB_DELETESTRING HEX: 0144
+CONSTANT: CB_DIR HEX: 0145
+CONSTANT: CB_GETCOUNT HEX: 0146
+CONSTANT: CB_GETCURSEL HEX: 0147
+CONSTANT: CB_GETLBTEXT HEX: 0148
+CONSTANT: CB_GETLBTEXTLEN HEX: 0149
+CONSTANT: CB_INSERTSTRING HEX: 014A
+CONSTANT: CB_RESETCONTENT HEX: 014B
+CONSTANT: CB_FINDSTRING HEX: 014C
+CONSTANT: CB_SELECTSTRING HEX: 014D
+CONSTANT: CB_SETCURSEL HEX: 014E
+CONSTANT: CB_SHOWDROPDOWN HEX: 014F
+CONSTANT: CB_GETITEMDATA HEX: 0150
+CONSTANT: CB_SETITEMDATA HEX: 0151
+CONSTANT: CB_GETDROPPEDCONTROLRECT HEX: 0152
+CONSTANT: CB_SETITEMHEIGHT HEX: 0153
+CONSTANT: CB_GETITEMHEIGHT HEX: 0154
+CONSTANT: CB_SETEXTENDEDUI HEX: 0155
+CONSTANT: CB_GETEXTENDEDUI HEX: 0156
+CONSTANT: CB_GETDROPPEDSTATE HEX: 0157
+CONSTANT: CB_FINDSTRINGEXACT HEX: 0158
+CONSTANT: CB_SETLOCALE HEX: 0159
+CONSTANT: CB_GETLOCALE HEX: 015A
+CONSTANT: CB_GETTOPINDEX HEX: 015B
+CONSTANT: CB_SETTOPINDEX HEX: 015C
+CONSTANT: CB_GETHORIZONTALEXTENT HEX: 015d
+CONSTANT: CB_SETHORIZONTALEXTENT HEX: 015e
+CONSTANT: CB_GETDROPPEDWIDTH HEX: 015f
+CONSTANT: CB_SETDROPPEDWIDTH HEX: 0160
+CONSTANT: CB_INITSTORAGE HEX: 0161
+CONSTANT: CB_MULTIPLEADDSTRING HEX: 0163
+CONSTANT: CB_GETCOMBOBOXINFO HEX: 0164
+CONSTANT: CB_MSGMAX_501 HEX: 0165
+CONSTANT: CB_MSGMAX_WCE400 HEX: 0163
+CONSTANT: CB_MSGMAX_400 HEX: 0162
+CONSTANT: CB_MSGMAX_PRE400 HEX: 015B
+CONSTANT: SBM_SETPOS HEX: 00E0
+CONSTANT: SBM_GETPOS HEX: 00E1
+CONSTANT: SBM_SETRANGE HEX: 00E2
+CONSTANT: SBM_SETRANGEREDRAW HEX: 00E6
+CONSTANT: SBM_GETRANGE HEX: 00E3
+CONSTANT: SBM_ENABLE_ARROWS HEX: 00E4
+CONSTANT: SBM_SETSCROLLINFO HEX: 00E9
+CONSTANT: SBM_GETSCROLLINFO HEX: 00EA
+CONSTANT: SBM_GETSCROLLBARINFO HEX: 00EB
+CONSTANT: LVM_FIRST HEX: 1000 ! ListView messages
+CONSTANT: TV_FIRST HEX: 1100 ! TreeView messages
+CONSTANT: HDM_FIRST HEX: 1200 ! Header messages
+CONSTANT: TCM_FIRST HEX: 1300 ! Tab control messages
+CONSTANT: PGM_FIRST HEX: 1400 ! Pager control messages
+CONSTANT: ECM_FIRST HEX: 1500 ! Edit control messages
+CONSTANT: BCM_FIRST HEX: 1600 ! Button control messages
+CONSTANT: CBM_FIRST HEX: 1700 ! Combobox control messages
+CONSTANT: CCM_FIRST HEX: 2000 ! Common control shared messages
+: CCM_LAST ( -- n ) CCM_FIRST HEX: 0200  + ; inline
+: CCM_SETBKCOLOR ( -- n ) CCM_FIRST  1  + ; inline
+: CCM_SETCOLORSCHEME ( -- n ) CCM_FIRST  2  + ; inline
+: CCM_GETCOLORSCHEME ( -- n ) CCM_FIRST  3  + ; inline
+: CCM_GETDROPTARGET ( -- n ) CCM_FIRST  4  + ; inline
+: CCM_SETUNICODEFORMAT ( -- n ) CCM_FIRST  5  + ; inline
+: CCM_GETUNICODEFORMAT ( -- n ) CCM_FIRST  6  + ; inline
+: CCM_SETVERSION ( -- n ) CCM_FIRST  7  + ; inline
+: CCM_GETVERSION ( -- n ) CCM_FIRST  8  + ; inline
+: CCM_SETNOTIFYWINDOW ( -- n ) CCM_FIRST  9  + ; inline
+: CCM_SETWINDOWTHEME ( -- n ) CCM_FIRST  HEX: b  + ; inline
+: CCM_DPISCALE ( -- n ) CCM_FIRST  HEX: c  + ; inline
+: HDM_GETITEMCOUNT ( -- n ) HDM_FIRST  0  + ; inline
+: HDM_INSERTITEMA ( -- n ) HDM_FIRST  1  + ; inline
+: HDM_INSERTITEMW ( -- n ) HDM_FIRST  10  + ; inline
+: HDM_DELETEITEM ( -- n ) HDM_FIRST  2  + ; inline
+: HDM_GETITEMA ( -- n ) HDM_FIRST  3  + ; inline
+: HDM_GETITEMW ( -- n ) HDM_FIRST  11  + ; inline
+: HDM_SETITEMA ( -- n ) HDM_FIRST  4  + ; inline
+: HDM_SETITEMW ( -- n ) HDM_FIRST  12  + ; inline
+: HDM_LAYOUT ( -- n ) HDM_FIRST  5  + ; inline
+: HDM_HITTEST ( -- n ) HDM_FIRST  6  + ; inline
+: HDM_GETITEMRECT ( -- n ) HDM_FIRST  7  + ; inline
+: HDM_SETIMAGELIST ( -- n ) HDM_FIRST  8  + ; inline
+: HDM_GETIMAGELIST ( -- n ) HDM_FIRST  9  + ; inline
+: HDM_ORDERTOINDEX ( -- n ) HDM_FIRST  15  + ; inline
+: HDM_CREATEDRAGIMAGE ( -- n ) HDM_FIRST  16  + ; inline
+: HDM_GETORDERARRAY ( -- n ) HDM_FIRST  17  + ; inline
+: HDM_SETORDERARRAY ( -- n ) HDM_FIRST  18  + ; inline
+: HDM_SETHOTDIVIDER ( -- n ) HDM_FIRST  19  + ; inline
+: HDM_SETBITMAPMARGIN ( -- n ) HDM_FIRST  20  + ; inline
+: HDM_GETBITMAPMARGIN ( -- n ) HDM_FIRST  21  + ; inline
+CONSTANT: HDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+CONSTANT: HDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT   
+: HDM_SETFILTERCHANGETIMEOUT ( -- n ) HDM_FIRST 22  + ; inline
+: HDM_EDITFILTER ( -- n ) HDM_FIRST 23  + ; inline
+: HDM_CLEARFILTER ( -- n ) HDM_FIRST 24  + ; inline
+: TB_ENABLEBUTTON ( -- n ) WM_USER 1  + ; inline
+: TB_CHECKBUTTON ( -- n ) WM_USER 2  + ; inline
+: TB_PRESSBUTTON ( -- n ) WM_USER 3  + ; inline
+: TB_HIDEBUTTON ( -- n ) WM_USER  4  + ; inline
+: TB_INDETERMINATE ( -- n ) WM_USER  5  + ; inline
+: TB_MARKBUTTON ( -- n ) WM_USER  6  + ; inline
+: TB_ISBUTTONENABLED ( -- n ) WM_USER  9  + ; inline
+: TB_ISBUTTONCHECKED ( -- n ) WM_USER  10  + ; inline
+: TB_ISBUTTONPRESSED ( -- n ) WM_USER  11  + ; inline
+: TB_ISBUTTONHIDDEN ( -- n ) WM_USER  12  + ; inline
+: TB_ISBUTTONINDETERMINATE ( -- n ) WM_USER  13  + ; inline
+: TB_ISBUTTONHIGHLIGHTED ( -- n ) WM_USER  14  + ; inline
+: TB_SETSTATE ( -- n ) WM_USER  17  + ; inline
+: TB_GETSTATE ( -- n ) WM_USER  18  + ; inline
+: TB_ADDBITMAP ( -- n ) WM_USER  19  + ; inline
+: TB_ADDBUTTONSA ( -- n ) WM_USER  20  + ; inline
+: TB_INSERTBUTTONA ( -- n ) WM_USER  21  + ; inline
+: TB_ADDBUTTONS ( -- n ) WM_USER  20  + ; inline
+: TB_INSERTBUTTON ( -- n ) WM_USER  21  + ; inline
+: TB_DELETEBUTTON ( -- n ) WM_USER  22  + ; inline
+: TB_GETBUTTON ( -- n ) WM_USER  23  + ; inline
+: TB_BUTTONCOUNT ( -- n ) WM_USER  24  + ; inline
+: TB_COMMANDTOINDEX ( -- n ) WM_USER  25  + ; inline
+: TB_SAVERESTOREA ( -- n ) WM_USER  26  + ; inline
+: TB_SAVERESTOREW ( -- n ) WM_USER  76  + ; inline
+: TB_CUSTOMIZE ( -- n ) WM_USER  27  + ; inline
+: TB_ADDSTRINGA ( -- n ) WM_USER  28  + ; inline
+: TB_ADDSTRINGW ( -- n ) WM_USER  77  + ; inline
+: TB_GETITEMRECT ( -- n ) WM_USER  29  + ; inline
+: TB_BUTTONSTRUCTSIZE ( -- n ) WM_USER  30  + ; inline
+: TB_SETBUTTONSIZE ( -- n ) WM_USER  31  + ; inline
+: TB_SETBITMAPSIZE ( -- n ) WM_USER  32  + ; inline
+: TB_AUTOSIZE ( -- n ) WM_USER  33  + ; inline
+: TB_GETTOOLTIPS ( -- n ) WM_USER  35  + ; inline
+: TB_SETTOOLTIPS ( -- n ) WM_USER  36  + ; inline
+: TB_SETPARENT ( -- n ) WM_USER  37  + ; inline
+: TB_SETROWS ( -- n ) WM_USER  39  + ; inline
+: TB_GETROWS ( -- n ) WM_USER  40  + ; inline
+: TB_SETCMDID ( -- n ) WM_USER  42  + ; inline
+: TB_CHANGEBITMAP ( -- n ) WM_USER  43  + ; inline
+: TB_GETBITMAP ( -- n ) WM_USER  44  + ; inline
+: TB_GETBUTTONTEXTA ( -- n ) WM_USER  45  + ; inline
+: TB_GETBUTTONTEXTW ( -- n ) WM_USER  75  + ; inline
+: TB_REPLACEBITMAP ( -- n ) WM_USER  46  + ; inline
+: TB_SETINDENT ( -- n ) WM_USER  47  + ; inline
+: TB_SETIMAGELIST ( -- n ) WM_USER  48  + ; inline
+: TB_GETIMAGELIST ( -- n ) WM_USER  49  + ; inline
+: TB_LOADIMAGES ( -- n ) WM_USER  50  + ; inline
+: TB_GETRECT ( -- n ) WM_USER  51  + ; inline
+: TB_SETHOTIMAGELIST ( -- n ) WM_USER  52  + ; inline
+: TB_GETHOTIMAGELIST ( -- n ) WM_USER  53  + ; inline
+: TB_SETDISABLEDIMAGELIST ( -- n ) WM_USER  54  + ; inline
+: TB_GETDISABLEDIMAGELIST ( -- n ) WM_USER  55  + ; inline
+: TB_SETSTYLE ( -- n ) WM_USER  56  + ; inline
+: TB_GETSTYLE ( -- n ) WM_USER  57  + ; inline
+: TB_GETBUTTONSIZE ( -- n ) WM_USER  58  + ; inline
+: TB_SETBUTTONWIDTH ( -- n ) WM_USER  59  + ; inline
+: TB_SETMAXTEXTROWS ( -- n ) WM_USER  60  + ; inline
+: TB_GETTEXTROWS ( -- n ) WM_USER  61  + ; inline
+: TB_GETOBJECT ( -- n ) WM_USER  62  + ; inline
+: TB_GETHOTITEM ( -- n ) WM_USER  71  + ; inline
+: TB_SETHOTITEM ( -- n ) WM_USER  72  + ; inline
+: TB_SETANCHORHIGHLIGHT ( -- n ) WM_USER  73  + ; inline
+: TB_GETANCHORHIGHLIGHT ( -- n ) WM_USER  74  + ; inline
+: TB_MAPACCELERATORA ( -- n ) WM_USER  78  + ; inline
+: TB_GETINSERTMARK ( -- n ) WM_USER  79  + ; inline
+: TB_SETINSERTMARK ( -- n ) WM_USER  80  + ; inline
+: TB_INSERTMARKHITTEST ( -- n ) WM_USER  81  + ; inline
+: TB_MOVEBUTTON ( -- n ) WM_USER  82  + ; inline
+: TB_GETMAXSIZE ( -- n ) WM_USER  83  + ; inline
+: TB_SETEXTENDEDSTYLE ( -- n ) WM_USER  84  + ; inline
+: TB_GETEXTENDEDSTYLE ( -- n ) WM_USER  85  + ; inline
+: TB_GETPADDING ( -- n ) WM_USER  86  + ; inline
+: TB_SETPADDING ( -- n ) WM_USER  87  + ; inline
+: TB_SETINSERTMARKCOLOR ( -- n ) WM_USER  88  + ; inline
+: TB_GETINSERTMARKCOLOR ( -- n ) WM_USER  89  + ; inline
+ALIAS: TB_SETCOLORSCHEME CCM_SETCOLORSCHEME
+ALIAS: TB_GETCOLORSCHEME CCM_GETCOLORSCHEME
+ALIAS: TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+ALIAS: TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+: TB_MAPACCELERATORW ( -- n ) WM_USER  90  + ; inline
+: TB_GETBITMAPFLAGS ( -- n ) WM_USER  41  + ; inline
+: TB_GETBUTTONINFOW ( -- n ) WM_USER  63  + ; inline
+: TB_SETBUTTONINFOW ( -- n ) WM_USER  64  + ; inline
+: TB_GETBUTTONINFOA ( -- n ) WM_USER  65  + ; inline
+: TB_SETBUTTONINFOA ( -- n ) WM_USER  66  + ; inline
+: TB_INSERTBUTTONW ( -- n ) WM_USER  67  + ; inline
+: TB_ADDBUTTONSW ( -- n ) WM_USER  68  + ; inline
+: TB_HITTEST ( -- n ) WM_USER  69  + ; inline
+: TB_SETDRAWTEXTFLAGS ( -- n ) WM_USER  70  + ; inline
+: TB_GETSTRINGW ( -- n ) WM_USER  91  + ; inline
+: TB_GETSTRINGA ( -- n ) WM_USER  92  + ; inline
+: TB_GETMETRICS ( -- n ) WM_USER  101  + ; inline
+: TB_SETMETRICS ( -- n ) WM_USER  102  + ; inline
+ALIAS: TB_SETWINDOWTHEME CCM_SETWINDOWTHEME
+: RB_INSERTBANDA ( -- n ) WM_USER  1  + ; inline
+: RB_DELETEBAND ( -- n ) WM_USER  2  + ; inline
+: RB_GETBARINFO ( -- n ) WM_USER  3  + ; inline
+: RB_SETBARINFO ( -- n ) WM_USER  4  + ; inline
+: RB_GETBANDINFO ( -- n ) WM_USER  5  + ; inline
+: RB_SETBANDINFOA ( -- n ) WM_USER  6  + ; inline
+: RB_SETPARENT ( -- n ) WM_USER  7  + ; inline
+: RB_HITTEST ( -- n ) WM_USER  8  + ; inline
+: RB_GETRECT ( -- n ) WM_USER  9  + ; inline
+: RB_INSERTBANDW ( -- n ) WM_USER  10  + ; inline
+: RB_SETBANDINFOW ( -- n ) WM_USER  11  + ; inline
+: RB_GETBANDCOUNT ( -- n ) WM_USER  12  + ; inline
+: RB_GETROWCOUNT ( -- n ) WM_USER  13  + ; inline
+: RB_GETROWHEIGHT ( -- n ) WM_USER  14  + ; inline
+: RB_IDTOINDEX ( -- n ) WM_USER  16  + ; inline
+: RB_GETTOOLTIPS ( -- n ) WM_USER  17  + ; inline
+: RB_SETTOOLTIPS ( -- n ) WM_USER  18  + ; inline
+: RB_SETBKCOLOR ( -- n ) WM_USER  19  + ; inline
+: RB_GETBKCOLOR ( -- n ) WM_USER  20  + ; inline
+: RB_SETTEXTCOLOR ( -- n ) WM_USER  21  + ; inline
+: RB_GETTEXTCOLOR ( -- n ) WM_USER  22  + ; inline
+: RB_SIZETORECT ( -- n ) WM_USER  23  + ; inline
+CONSTANT: RB_SETCOLORSCHEME CCM_SETCOLORSCHEME
+CONSTANT: RB_GETCOLORSCHEME CCM_GETCOLORSCHEME
+: RB_BEGINDRAG ( -- n ) WM_USER  24  + ; inline
+: RB_ENDDRAG ( -- n ) WM_USER  25  + ; inline
+: RB_DRAGMOVE ( -- n ) WM_USER  26  + ; inline
+: RB_GETBARHEIGHT ( -- n ) WM_USER  27  + ; inline
+: RB_GETBANDINFOW ( -- n ) WM_USER  28  + ; inline
+: RB_GETBANDINFOA ( -- n ) WM_USER  29  + ; inline
+: RB_MINIMIZEBAND ( -- n ) WM_USER  30  + ; inline
+: RB_MAXIMIZEBAND ( -- n ) WM_USER  31  + ; inline
+ALIAS: RB_GETDROPTARGET CCM_GETDROPTARGET
+: RB_GETBANDBORDERS ( -- n ) WM_USER  34  + ; inline
+: RB_SHOWBAND ( -- n ) WM_USER  35  + ; inline
+: RB_SETPALETTE ( -- n ) WM_USER  37  + ; inline
+: RB_GETPALETTE ( -- n ) WM_USER  38  + ; inline
+: RB_MOVEBAND ( -- n ) WM_USER  39  + ; inline
+CONSTANT: RB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+CONSTANT: RB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+: RB_GETBANDMARGINS ( -- n ) WM_USER  40  + ; inline
+ALIAS: RB_SETWINDOWTHEME CCM_SETWINDOWTHEME
+: RB_PUSHCHEVRON ( -- n ) WM_USER  43  + ; inline
+: TTM_ACTIVATE ( -- n ) WM_USER  1  + ; inline
+: TTM_SETDELAYTIME ( -- n ) WM_USER  3  + ; inline
+: TTM_ADDTOOLA ( -- n ) WM_USER  4  + ; inline
+: TTM_ADDTOOLW ( -- n ) WM_USER  50  + ; inline
+: TTM_DELTOOLA ( -- n ) WM_USER  5  + ; inline
+: TTM_DELTOOLW ( -- n ) WM_USER  51  + ; inline
+: TTM_NEWTOOLRECTA ( -- n ) WM_USER  6  + ; inline
+: TTM_NEWTOOLRECTW ( -- n ) WM_USER  52  + ; inline
+: TTM_RELAYEVENT ( -- n ) WM_USER  7  + ; inline
+: TTM_GETTOOLINFOA ( -- n ) WM_USER  8  + ; inline
+: TTM_GETTOOLINFOW ( -- n ) WM_USER  53  + ; inline
+: TTM_SETTOOLINFOA ( -- n ) WM_USER  9  + ; inline
+: TTM_SETTOOLINFOW ( -- n ) WM_USER  54  + ; inline
+: TTM_HITTESTA ( -- n ) WM_USER 10  + ; inline
+: TTM_HITTESTW ( -- n ) WM_USER 55  + ; inline
+: TTM_GETTEXTA ( -- n ) WM_USER 11  + ; inline
+: TTM_GETTEXTW ( -- n ) WM_USER 56  + ; inline
+: TTM_UPDATETIPTEXTA ( -- n ) WM_USER 12  + ; inline
+: TTM_UPDATETIPTEXTW ( -- n ) WM_USER 57  + ; inline
+: TTM_GETTOOLCOUNT ( -- n ) WM_USER 13  + ; inline
+: TTM_ENUMTOOLSA ( -- n ) WM_USER 14  + ; inline
+: TTM_ENUMTOOLSW ( -- n ) WM_USER 58  + ; inline
+: TTM_GETCURRENTTOOLA ( -- n ) WM_USER  15  + ; inline
+: TTM_GETCURRENTTOOLW ( -- n ) WM_USER  59  + ; inline
+: TTM_WINDOWFROMPOINT ( -- n ) WM_USER  16  + ; inline
+: TTM_TRACKACTIVATE ( -- n ) WM_USER  17  + ; inline
+: TTM_TRACKPOSITION ( -- n ) WM_USER  18  + ; inline
+: TTM_SETTIPBKCOLOR ( -- n ) WM_USER  19  + ; inline
+: TTM_SETTIPTEXTCOLOR ( -- n ) WM_USER  20  + ; inline
+: TTM_GETDELAYTIME ( -- n ) WM_USER  21  + ; inline
+: TTM_GETTIPBKCOLOR ( -- n ) WM_USER  22  + ; inline
+: TTM_GETTIPTEXTCOLOR ( -- n ) WM_USER  23  + ; inline
+: TTM_SETMAXTIPWIDTH ( -- n ) WM_USER  24  + ; inline
+: TTM_GETMAXTIPWIDTH ( -- n ) WM_USER  25  + ; inline
+: TTM_SETMARGIN ( -- n ) WM_USER  26  + ; inline
+: TTM_GETMARGIN ( -- n ) WM_USER  27  + ; inline
+: TTM_POP ( -- n ) WM_USER  28  + ; inline
+: TTM_UPDATE ( -- n ) WM_USER  29  + ; inline
+: TTM_GETBUBBLESIZE ( -- n ) WM_USER  30  + ; inline
+: TTM_ADJUSTRECT ( -- n ) WM_USER  31  + ; inline
+: TTM_SETTITLEA ( -- n ) WM_USER  32  + ; inline
+: TTM_SETTITLEW ( -- n ) WM_USER  33  + ; inline
+: TTM_POPUP ( -- n ) WM_USER  34  + ; inline
+: TTM_GETTITLE ( -- n ) WM_USER  35  + ; inline
+ALIAS: TTM_SETWINDOWTHEME CCM_SETWINDOWTHEME
+: SB_SETTEXTA ( -- n ) WM_USER 1 + ; inline
+: SB_SETTEXTW ( -- n ) WM_USER 11  + ; inline
+: SB_GETTEXTA ( -- n ) WM_USER 2  + ; inline
+: SB_GETTEXTW ( -- n ) WM_USER 13  + ; inline
+: SB_GETTEXTLENGTHA ( -- n ) WM_USER 3  + ; inline
+: SB_GETTEXTLENGTHW ( -- n ) WM_USER 12  + ; inline
+: SB_SETPARTS ( -- n ) WM_USER 4  + ; inline
+: SB_GETPARTS ( -- n ) WM_USER 6  + ; inline
+: SB_GETBORDERS ( -- n ) WM_USER 7  + ; inline
+: SB_SETMINHEIGHT ( -- n ) WM_USER 8  + ; inline
+: SB_SIMPLE ( -- n ) WM_USER 9  + ; inline
+: SB_GETRECT ( -- n ) WM_USER 10  + ; inline
+: SB_ISSIMPLE ( -- n ) WM_USER 14  + ; inline
+: SB_SETICON ( -- n ) WM_USER 15  + ; inline
+: SB_SETTIPTEXTA ( -- n ) WM_USER 16  + ; inline
+: SB_SETTIPTEXTW ( -- n ) WM_USER 17  + ; inline
+: SB_GETTIPTEXTA ( -- n ) WM_USER 18  + ; inline
+: SB_GETTIPTEXTW ( -- n ) WM_USER 19  + ; inline
+: SB_GETICON ( -- n ) WM_USER 20  + ; inline
+CONSTANT: SB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+CONSTANT: SB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+ALIAS: SB_SETBKCOLOR CCM_SETBKCOLOR
+CONSTANT: SB_SIMPLEID HEX: 00ff
+ALIAS: TBM_GETPOS WM_USER
+: TBM_GETRANGEMIN ( -- n ) WM_USER 1  + ; inline
+: TBM_GETRANGEMAX ( -- n ) WM_USER 2  + ; inline
+: TBM_GETTIC ( -- n ) WM_USER 3  + ; inline
+: TBM_SETTIC ( -- n ) WM_USER 4  + ; inline
+: TBM_SETPOS ( -- n ) WM_USER 5  + ; inline
+: TBM_SETRANGE ( -- n ) WM_USER 6  + ; inline
+: TBM_SETRANGEMIN ( -- n ) WM_USER 7  + ; inline
+: TBM_SETRANGEMAX ( -- n ) WM_USER 8  + ; inline
+: TBM_CLEARTICS ( -- n ) WM_USER 9  + ; inline
+: TBM_SETSEL ( -- n ) WM_USER 10  + ; inline
+: TBM_SETSELSTART ( -- n ) WM_USER 11  + ; inline
+: TBM_SETSELEND ( -- n ) WM_USER 12  + ; inline
+: TBM_GETPTICS ( -- n ) WM_USER 14  + ; inline
+: TBM_GETTICPOS ( -- n ) WM_USER 15  + ; inline
+: TBM_GETNUMTICS ( -- n ) WM_USER 16  + ; inline
+: TBM_GETSELSTART ( -- n ) WM_USER 17  + ; inline
+: TBM_GETSELEND ( -- n ) WM_USER 18  + ; inline
+: TBM_CLEARSEL ( -- n ) WM_USER 19  + ; inline
+: TBM_SETTICFREQ ( -- n ) WM_USER 20  + ; inline
+: TBM_SETPAGESIZE ( -- n ) WM_USER 21  + ; inline
+: TBM_GETPAGESIZE ( -- n ) WM_USER 22  + ; inline
+: TBM_SETLINESIZE ( -- n ) WM_USER 23  + ; inline
+: TBM_GETLINESIZE ( -- n ) WM_USER 24  + ; inline
+: TBM_GETTHUMBRECT ( -- n ) WM_USER 25  + ; inline
+: TBM_GETCHANNELRECT ( -- n ) WM_USER 26  + ; inline
+: TBM_SETTHUMBLENGTH ( -- n ) WM_USER 27  + ; inline
+: TBM_GETTHUMBLENGTH ( -- n ) WM_USER 28  + ; inline
+: TBM_SETTOOLTIPS ( -- n ) WM_USER 29  + ; inline
+: TBM_GETTOOLTIPS ( -- n ) WM_USER 30  + ; inline
+: TBM_SETTIPSIDE ( -- n ) WM_USER 31  + ; inline
+: TBM_SETBUDDY ( -- n ) WM_USER 32  + ; inline
+: TBM_GETBUDDY ( -- n ) WM_USER 33  + ; inline
+ALIAS: TBM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+ALIAS: TBM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+: DL_BEGINDRAG ( -- n ) WM_USER 133  + ; inline
+: DL_DRAGGING ( -- n ) WM_USER 134  + ; inline
+: DL_DROPPED ( -- n ) WM_USER 135  + ; inline
+: DL_CANCELDRAG ( -- n ) WM_USER 136  + ; inline
+: UDM_SETRANGE ( -- n ) WM_USER 101  + ; inline
+: UDM_GETRANGE ( -- n ) WM_USER 102  + ; inline
+: UDM_SETPOS ( -- n ) WM_USER 103  + ; inline
+: UDM_GETPOS ( -- n ) WM_USER 104  + ; inline
+: UDM_SETBUDDY ( -- n ) WM_USER 105  + ; inline
+: UDM_GETBUDDY ( -- n ) WM_USER 106  + ; inline
+: UDM_SETACCEL ( -- n ) WM_USER 107  + ; inline
+: UDM_GETACCEL ( -- n ) WM_USER 108  + ; inline
+: UDM_SETBASE ( -- n ) WM_USER 109  + ; inline
+: UDM_GETBASE ( -- n ) WM_USER 110  + ; inline
+: UDM_SETRANGE32 ( -- n ) WM_USER 111  + ; inline
+: UDM_GETRANGE32 ( -- n ) WM_USER 112  + ; inline
+ALIAS: UDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+ALIAS: UDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+: UDM_SETPOS32 ( -- n ) WM_USER 113  + ; inline
+: UDM_GETPOS32 ( -- n ) WM_USER 114  + ; inline
+: PBM_SETRANGE ( -- n ) WM_USER 1  + ; inline
+: PBM_SETPOS ( -- n ) WM_USER 2  + ; inline
+: PBM_DELTAPOS ( -- n ) WM_USER 3  + ; inline
+: PBM_SETSTEP ( -- n ) WM_USER 4  + ; inline
+: PBM_STEPIT ( -- n ) WM_USER 5  + ; inline
+: PBM_SETRANGE32 ( -- n ) WM_USER 6  + ; inline
+: PBM_GETRANGE ( -- n ) WM_USER 7  + ; inline
+: PBM_GETPOS ( -- n ) WM_USER 8  + ; inline
+: PBM_SETBARCOLOR ( -- n ) WM_USER 9  + ; inline
+ALIAS: PBM_SETBKCOLOR CCM_SETBKCOLOR
+: HKM_SETHOTKEY ( -- n ) WM_USER 1  + ; inline
+: HKM_GETHOTKEY ( -- n ) WM_USER 2  + ; inline
+: HKM_SETRULES ( -- n ) WM_USER 3  + ; inline
+ALIAS: LVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+ALIAS: LVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+: LVM_GETBKCOLOR ( -- n ) LVM_FIRST  0  + ; inline
+: LVM_SETBKCOLOR ( -- n ) LVM_FIRST  1  + ; inline
+: LVM_GETIMAGELIST ( -- n ) LVM_FIRST  2  + ; inline
+: LVM_SETIMAGELIST ( -- n ) LVM_FIRST  3  + ; inline
+: LVM_GETITEMCOUNT ( -- n ) LVM_FIRST  4  + ; inline
+: LVM_GETITEMA ( -- n ) LVM_FIRST  5  + ; inline
+: LVM_GETITEMW ( -- n ) LVM_FIRST  75  + ; inline
+: LVM_SETITEMA ( -- n ) LVM_FIRST  6  + ; inline
+: LVM_SETITEMW ( -- n ) LVM_FIRST  76  + ; inline
+: LVM_INSERTITEMA ( -- n ) LVM_FIRST  7  + ; inline
+: LVM_INSERTITEMW ( -- n ) LVM_FIRST  77  + ; inline
+: LVM_DELETEITEM ( -- n ) LVM_FIRST  8  + ; inline
+: LVM_DELETEALLITEMS ( -- n ) LVM_FIRST  9  + ; inline
+: LVM_GETCALLBACKMASK ( -- n ) LVM_FIRST  10  + ; inline
+: LVM_SETCALLBACKMASK ( -- n ) LVM_FIRST  11  + ; inline
+: LVM_FINDITEMA ( -- n ) LVM_FIRST  13  + ; inline
+: LVM_FINDITEMW ( -- n ) LVM_FIRST  83  + ; inline
+: LVM_GETITEMRECT ( -- n ) LVM_FIRST  14  + ; inline
+: LVM_SETITEMPOSITION ( -- n ) LVM_FIRST  15  + ; inline
+: LVM_GETITEMPOSITION ( -- n ) LVM_FIRST  16  + ; inline
+: LVM_GETSTRINGWIDTHA ( -- n ) LVM_FIRST  17  + ; inline
+: LVM_GETSTRINGWIDTHW ( -- n ) LVM_FIRST  87  + ; inline
+: LVM_HITTEST ( -- n ) LVM_FIRST  18  + ; inline
+: LVM_ENSUREVISIBLE ( -- n ) LVM_FIRST  19  + ; inline
+: LVM_SCROLL ( -- n ) LVM_FIRST  20  + ; inline
+: LVM_REDRAWITEMS ( -- n ) LVM_FIRST  21  + ; inline
+: LVM_ARRANGE ( -- n ) LVM_FIRST  22  + ; inline
+: LVM_EDITLABELA ( -- n ) LVM_FIRST  23  + ; inline
+: LVM_EDITLABELW ( -- n ) LVM_FIRST  118  + ; inline
+: LVM_GETEDITCONTROL ( -- n ) LVM_FIRST  24  + ; inline
+: LVM_GETCOLUMNA ( -- n ) LVM_FIRST  25  + ; inline
+: LVM_GETCOLUMNW ( -- n ) LVM_FIRST  95  + ; inline
+: LVM_SETCOLUMNA ( -- n ) LVM_FIRST  26  + ; inline
+: LVM_SETCOLUMNW ( -- n ) LVM_FIRST  96  + ; inline
+: LVM_INSERTCOLUMNA ( -- n ) LVM_FIRST  27  + ; inline
+: LVM_INSERTCOLUMNW ( -- n ) LVM_FIRST  97  + ; inline
+: LVM_DELETECOLUMN ( -- n ) LVM_FIRST  28  + ; inline
+: LVM_GETCOLUMNWIDTH ( -- n ) LVM_FIRST  29  + ; inline
+: LVM_SETCOLUMNWIDTH ( -- n ) LVM_FIRST  30  + ; inline
+: LVM_CREATEDRAGIMAGE ( -- n ) LVM_FIRST  33  + ; inline
+: LVM_GETVIEWRECT ( -- n ) LVM_FIRST  34  + ; inline
+: LVM_GETTEXTCOLOR ( -- n ) LVM_FIRST  35  + ; inline
+: LVM_SETTEXTCOLOR ( -- n ) LVM_FIRST  36  + ; inline
+: LVM_GETTEXTBKCOLOR ( -- n ) LVM_FIRST  37  + ; inline
+: LVM_SETTEXTBKCOLOR ( -- n ) LVM_FIRST  38  + ; inline
+: LVM_GETTOPINDEX ( -- n ) LVM_FIRST  39  + ; inline
+: LVM_GETCOUNTPERPAGE ( -- n ) LVM_FIRST  40  + ; inline
+: LVM_GETORIGIN ( -- n ) LVM_FIRST  41  + ; inline
+: LVM_UPDATE ( -- n ) LVM_FIRST  42  + ; inline
+: LVM_SETITEMSTATE ( -- n ) LVM_FIRST  43  + ; inline
+: LVM_GETITEMSTATE ( -- n ) LVM_FIRST  44  + ; inline
+: LVM_GETITEMTEXTA ( -- n ) LVM_FIRST  45  + ; inline
+: LVM_GETITEMTEXTW ( -- n ) LVM_FIRST  115  + ; inline
+: LVM_SETITEMTEXTA ( -- n ) LVM_FIRST  46  + ; inline
+: LVM_SETITEMTEXTW ( -- n ) LVM_FIRST  116  + ; inline
+: LVM_SETITEMCOUNT ( -- n ) LVM_FIRST  47  + ; inline
+: LVM_SORTITEMS ( -- n ) LVM_FIRST  48  + ; inline
+: LVM_SETITEMPOSITION32 ( -- n ) LVM_FIRST  49  + ; inline
+: LVM_GETSELECTEDCOUNT ( -- n ) LVM_FIRST  50  + ; inline
+: LVM_GETITEMSPACING ( -- n ) LVM_FIRST  51  + ; inline
+: LVM_GETISEARCHSTRINGA ( -- n ) LVM_FIRST  52  + ; inline
+: LVM_GETISEARCHSTRINGW ( -- n ) LVM_FIRST  117  + ; inline
+: LVM_SETICONSPACING ( -- n ) LVM_FIRST  53  + ; inline
+: LVM_SETEXTENDEDLISTVIEWSTYLE ( -- n ) LVM_FIRST  54  + ; inline
+: LVM_GETEXTENDEDLISTVIEWSTYLE ( -- n ) LVM_FIRST  55  + ; inline
+: LVM_GETSUBITEMRECT ( -- n ) LVM_FIRST  56  + ; inline
+: LVM_SUBITEMHITTEST ( -- n ) LVM_FIRST  57  + ; inline
+: LVM_SETCOLUMNORDERARRAY ( -- n ) LVM_FIRST  58  + ; inline
+: LVM_GETCOLUMNORDERARRAY ( -- n ) LVM_FIRST  59  + ; inline
+: LVM_SETHOTITEM ( -- n ) LVM_FIRST  60  + ; inline
+: LVM_GETHOTITEM ( -- n ) LVM_FIRST  61  + ; inline
+: LVM_SETHOTCURSOR ( -- n ) LVM_FIRST  62  + ; inline
+: LVM_GETHOTCURSOR ( -- n ) LVM_FIRST  63  + ; inline
+: LVM_APPROXIMATEVIEWRECT ( -- n ) LVM_FIRST  64  + ; inline
+: LVM_SETWORKAREAS ( -- n ) LVM_FIRST  65  + ; inline
+: LVM_GETWORKAREAS ( -- n ) LVM_FIRST  70  + ; inline
+: LVM_GETNUMBEROFWORKAREAS ( -- n ) LVM_FIRST  73  + ; inline
+: LVM_GETSELECTIONMARK ( -- n ) LVM_FIRST  66  + ; inline
+: LVM_SETSELECTIONMARK ( -- n ) LVM_FIRST  67  + ; inline
+: LVM_SETHOVERTIME ( -- n ) LVM_FIRST  71  + ; inline
+: LVM_GETHOVERTIME ( -- n ) LVM_FIRST  72  + ; inline
+: LVM_SETTOOLTIPS ( -- n ) LVM_FIRST  74  + ; inline
+: LVM_GETTOOLTIPS ( -- n ) LVM_FIRST  78  + ; inline
+: LVM_SORTITEMSEX ( -- n ) LVM_FIRST  81  + ; inline
+: LVM_SETBKIMAGEA ( -- n ) LVM_FIRST  68  + ; inline
+: LVM_SETBKIMAGEW ( -- n ) LVM_FIRST  138  + ; inline
+: LVM_GETBKIMAGEA ( -- n ) LVM_FIRST  69  + ; inline
+: LVM_GETBKIMAGEW ( -- n ) LVM_FIRST  139  + ; inline
+: LVM_SETSELECTEDCOLUMN ( -- n ) LVM_FIRST  140  + ; inline
+: LVM_SETTILEWIDTH ( -- n ) LVM_FIRST  141  + ; inline
+: LVM_SETVIEW ( -- n ) LVM_FIRST  142  + ; inline
+: LVM_GETVIEW ( -- n ) LVM_FIRST  143  + ; inline
+: LVM_INSERTGROUP ( -- n ) LVM_FIRST  145  + ; inline
+: LVM_SETGROUPINFO ( -- n ) LVM_FIRST  147  + ; inline
+: LVM_GETGROUPINFO ( -- n ) LVM_FIRST  149  + ; inline
+: LVM_REMOVEGROUP ( -- n ) LVM_FIRST  150  + ; inline
+: LVM_MOVEGROUP ( -- n ) LVM_FIRST  151  + ; inline
+: LVM_MOVEITEMTOGROUP ( -- n ) LVM_FIRST  154  + ; inline
+: LVM_SETGROUPMETRICS ( -- n ) LVM_FIRST  155  + ; inline
+: LVM_GETGROUPMETRICS ( -- n ) LVM_FIRST  156  + ; inline
+: LVM_ENABLEGROUPVIEW ( -- n ) LVM_FIRST  157  + ; inline
+: LVM_SORTGROUPS ( -- n ) LVM_FIRST  158  + ; inline
+: LVM_INSERTGROUPSORTED ( -- n ) LVM_FIRST  159  + ; inline
+: LVM_REMOVEALLGROUPS ( -- n ) LVM_FIRST  160  + ; inline
+: LVM_HASGROUP ( -- n ) LVM_FIRST  161  + ; inline
+: LVM_SETTILEVIEWINFO ( -- n ) LVM_FIRST  162  + ; inline
+: LVM_GETTILEVIEWINFO ( -- n ) LVM_FIRST  163  + ; inline
+: LVM_SETTILEINFO ( -- n ) LVM_FIRST  164  + ; inline
+: LVM_GETTILEINFO ( -- n ) LVM_FIRST  165  + ; inline
+: LVM_SETINSERTMARK ( -- n ) LVM_FIRST  166  + ; inline
+: LVM_GETINSERTMARK ( -- n ) LVM_FIRST  167  + ; inline
+: LVM_INSERTMARKHITTEST ( -- n ) LVM_FIRST  168  + ; inline
+: LVM_GETINSERTMARKRECT ( -- n ) LVM_FIRST  169  + ; inline
+: LVM_SETINSERTMARKCOLOR ( -- n ) LVM_FIRST  170  + ; inline
+: LVM_GETINSERTMARKCOLOR ( -- n ) LVM_FIRST  171  + ; inline
+: LVM_SETINFOTIP ( -- n ) LVM_FIRST  173  + ; inline
+: LVM_GETSELECTEDCOLUMN ( -- n ) LVM_FIRST  174  + ; inline
+: LVM_ISGROUPVIEWENABLED ( -- n ) LVM_FIRST  175  + ; inline
+: LVM_GETOUTLINECOLOR ( -- n ) LVM_FIRST  176  + ; inline
+: LVM_SETOUTLINECOLOR ( -- n ) LVM_FIRST  177  + ; inline
+: LVM_CANCELEDITLABEL ( -- n ) LVM_FIRST  179  + ; inline
+: LVM_MAPINDEXTOID ( -- n ) LVM_FIRST  180  + ; inline
+: LVM_MAPIDTOINDEX ( -- n ) LVM_FIRST  181  + ; inline
+: TVM_INSERTITEMA ( -- n ) TV_FIRST  0  + ; inline
+: TVM_INSERTITEMW ( -- n ) TV_FIRST  50  + ; inline
+: TVM_DELETEITEM ( -- n ) TV_FIRST  1  + ; inline
+: TVM_EXPAND ( -- n ) TV_FIRST  2  + ; inline
+: TVM_GETITEMRECT ( -- n ) TV_FIRST  4  + ; inline
+: TVM_GETCOUNT ( -- n ) TV_FIRST  5  + ; inline
+: TVM_GETINDENT ( -- n ) TV_FIRST  6  + ; inline
+: TVM_SETINDENT ( -- n ) TV_FIRST  7  + ; inline
+: TVM_GETIMAGELIST ( -- n ) TV_FIRST  8  + ; inline
+: TVM_SETIMAGELIST ( -- n ) TV_FIRST  9  + ; inline
+: TVM_GETNEXTITEM ( -- n ) TV_FIRST  10  + ; inline
+: TVM_SELECTITEM ( -- n ) TV_FIRST  11  + ; inline
+: TVM_GETITEMA ( -- n ) TV_FIRST  12  + ; inline
+: TVM_GETITEMW ( -- n ) TV_FIRST  62  + ; inline
+: TVM_SETITEMA ( -- n ) TV_FIRST  13  + ; inline
+: TVM_SETITEMW ( -- n ) TV_FIRST  63  + ; inline
+: TVM_EDITLABELA ( -- n ) TV_FIRST  14  + ; inline
+: TVM_EDITLABELW ( -- n ) TV_FIRST  65  + ; inline
+: TVM_GETEDITCONTROL ( -- n ) TV_FIRST  15  + ; inline
+: TVM_GETVISIBLECOUNT ( -- n ) TV_FIRST  16  + ; inline
+: TVM_HITTEST ( -- n ) TV_FIRST  17  + ; inline
+: TVM_CREATEDRAGIMAGE ( -- n ) TV_FIRST  18  + ; inline
+: TVM_SORTCHILDREN ( -- n ) TV_FIRST  19  + ; inline
+: TVM_ENSUREVISIBLE ( -- n ) TV_FIRST  20  + ; inline
+: TVM_SORTCHILDRENCB ( -- n ) TV_FIRST  21  + ; inline
+: TVM_ENDEDITLABELNOW ( -- n ) TV_FIRST  22  + ; inline
+: TVM_GETISEARCHSTRINGA ( -- n ) TV_FIRST  23  + ; inline
+: TVM_GETISEARCHSTRINGW ( -- n ) TV_FIRST  64  + ; inline
+: TVM_SETTOOLTIPS ( -- n ) TV_FIRST  24  + ; inline
+: TVM_GETTOOLTIPS ( -- n ) TV_FIRST  25  + ; inline
+: TVM_SETINSERTMARK ( -- n ) TV_FIRST  26  + ; inline
+ALIAS: TVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+ALIAS: TVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+: TVM_SETITEMHEIGHT ( -- n ) TV_FIRST  27  + ; inline
+: TVM_GETITEMHEIGHT ( -- n ) TV_FIRST  28  + ; inline
+: TVM_SETBKCOLOR ( -- n ) TV_FIRST  29  + ; inline
+: TVM_SETTEXTCOLOR ( -- n ) TV_FIRST  30  + ; inline
+: TVM_GETBKCOLOR ( -- n ) TV_FIRST  31  + ; inline
+: TVM_GETTEXTCOLOR ( -- n ) TV_FIRST  32  + ; inline
+: TVM_SETSCROLLTIME ( -- n ) TV_FIRST  33  + ; inline
+: TVM_GETSCROLLTIME ( -- n ) TV_FIRST  34  + ; inline
+: TVM_SETINSERTMARKCOLOR ( -- n ) TV_FIRST  37  + ; inline
+: TVM_GETINSERTMARKCOLOR ( -- n ) TV_FIRST  38  + ; inline
+: TVM_GETITEMSTATE ( -- n ) TV_FIRST  39  + ; inline
+: TVM_SETLINECOLOR ( -- n ) TV_FIRST  40  + ; inline
+: TVM_GETLINECOLOR ( -- n ) TV_FIRST  41  + ; inline
+: TVM_MAPACCIDTOHTREEITEM ( -- n ) TV_FIRST  42  + ; inline
+: TVM_MAPHTREEITEMTOACCID ( -- n ) TV_FIRST  43  + ; inline
+: CBEM_INSERTITEMA ( -- n ) WM_USER  1  + ; inline
+: CBEM_SETIMAGELIST ( -- n ) WM_USER  2  + ; inline
+: CBEM_GETIMAGELIST ( -- n ) WM_USER  3  + ; inline
+: CBEM_GETITEMA ( -- n ) WM_USER  4  + ; inline
+: CBEM_SETITEMA ( -- n ) WM_USER  5  + ; inline
+ALIAS: CBEM_DELETEITEM CB_DELETESTRING
+: CBEM_GETCOMBOCONTROL ( -- n ) WM_USER  6  + ; inline
+: CBEM_GETEDITCONTROL ( -- n ) WM_USER  7  + ; inline
+: CBEM_SETEXTENDEDSTYLE ( -- n ) WM_USER  14  + ; inline
+: CBEM_GETEXTENDEDSTYLE ( -- n ) WM_USER  9  + ; inline
+ALIAS: CBEM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+ALIAS: CBEM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+: CBEM_SETEXSTYLE ( -- n ) WM_USER  8  + ; inline
+: CBEM_GETEXSTYLE ( -- n ) WM_USER  9  + ; inline
+: CBEM_HASEDITCHANGED ( -- n ) WM_USER  10  + ; inline
+: CBEM_INSERTITEMW ( -- n ) WM_USER  11  + ; inline
+: CBEM_SETITEMW ( -- n ) WM_USER  12  + ; inline
+: CBEM_GETITEMW ( -- n ) WM_USER  13  + ; inline
+: TCM_GETIMAGELIST ( -- n ) TCM_FIRST  2  + ; inline
+: TCM_SETIMAGELIST ( -- n ) TCM_FIRST  3  + ; inline
+: TCM_GETITEMCOUNT ( -- n ) TCM_FIRST  4  + ; inline
+: TCM_GETITEMA ( -- n ) TCM_FIRST  5  + ; inline
+: TCM_GETITEMW ( -- n ) TCM_FIRST  60  + ; inline
+: TCM_SETITEMA ( -- n ) TCM_FIRST  6  + ; inline
+: TCM_SETITEMW ( -- n ) TCM_FIRST  61  + ; inline
+: TCM_INSERTITEMA ( -- n ) TCM_FIRST  7  + ; inline
+: TCM_INSERTITEMW ( -- n ) TCM_FIRST  62  + ; inline
+: TCM_DELETEITEM ( -- n ) TCM_FIRST  8  + ; inline
+: TCM_DELETEALLITEMS ( -- n ) TCM_FIRST  9  + ; inline
+: TCM_GETITEMRECT ( -- n ) TCM_FIRST  10  + ; inline
+: TCM_GETCURSEL ( -- n ) TCM_FIRST  11  + ; inline
+: TCM_SETCURSEL ( -- n ) TCM_FIRST  12  + ; inline
+: TCM_HITTEST ( -- n ) TCM_FIRST  13  + ; inline
+: TCM_SETITEMEXTRA ( -- n ) TCM_FIRST  14  + ; inline
+: TCM_ADJUSTRECT ( -- n ) TCM_FIRST  40  + ; inline
+: TCM_SETITEMSIZE ( -- n ) TCM_FIRST  41  + ; inline
+: TCM_REMOVEIMAGE ( -- n ) TCM_FIRST  42  + ; inline
+: TCM_SETPADDING ( -- n ) TCM_FIRST  43  + ; inline
+: TCM_GETROWCOUNT ( -- n ) TCM_FIRST  44  + ; inline
+: TCM_GETTOOLTIPS ( -- n ) TCM_FIRST  45  + ; inline
+: TCM_SETTOOLTIPS ( -- n ) TCM_FIRST  46  + ; inline
+: TCM_GETCURFOCUS ( -- n ) TCM_FIRST  47  + ; inline
+: TCM_SETCURFOCUS ( -- n ) TCM_FIRST  48  + ; inline
+: TCM_SETMINTABWIDTH ( -- n ) TCM_FIRST  49  + ; inline
+: TCM_DESELECTALL ( -- n ) TCM_FIRST  50  + ; inline
+: TCM_HIGHLIGHTITEM ( -- n ) TCM_FIRST  51  + ; inline
+: TCM_SETEXTENDEDSTYLE ( -- n ) TCM_FIRST  52  + ; inline
+: TCM_GETEXTENDEDSTYLE ( -- n ) TCM_FIRST  53  + ; inline
+ALIAS: TCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+ALIAS: TCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+: ACM_OPENA ( -- n ) WM_USER 100  + ; inline
+: ACM_OPENW ( -- n ) WM_USER 103  + ; inline
+: ACM_PLAY ( -- n ) WM_USER 101  + ; inline
+: ACM_STOP ( -- n ) WM_USER 102  + ; inline
+CONSTANT: MCM_FIRST HEX: 1000
+: MCM_GETCURSEL ( -- n ) MCM_FIRST  1  + ; inline
+: MCM_SETCURSEL ( -- n ) MCM_FIRST  2  + ; inline
+: MCM_GETMAXSELCOUNT ( -- n ) MCM_FIRST  3  + ; inline
+: MCM_SETMAXSELCOUNT ( -- n ) MCM_FIRST  4  + ; inline
+: MCM_GETSELRANGE ( -- n ) MCM_FIRST  5  + ; inline
+: MCM_SETSELRANGE ( -- n ) MCM_FIRST  6  + ; inline
+: MCM_GETMONTHRANGE ( -- n ) MCM_FIRST  7  + ; inline
+: MCM_SETDAYSTATE ( -- n ) MCM_FIRST  8  + ; inline
+: MCM_GETMINREQRECT ( -- n ) MCM_FIRST  9  + ; inline
+: MCM_SETCOLOR ( -- n ) MCM_FIRST  10  + ; inline
+: MCM_GETCOLOR ( -- n ) MCM_FIRST  11  + ; inline
+: MCM_SETTODAY ( -- n ) MCM_FIRST  12  + ; inline
+: MCM_GETTODAY ( -- n ) MCM_FIRST  13  + ; inline
+: MCM_HITTEST ( -- n ) MCM_FIRST  14  + ; inline
+: MCM_SETFIRSTDAYOFWEEK ( -- n ) MCM_FIRST  15  + ; inline
+: MCM_GETFIRSTDAYOFWEEK ( -- n ) MCM_FIRST  16  + ; inline
+: MCM_GETRANGE ( -- n ) MCM_FIRST  17  + ; inline
+: MCM_SETRANGE ( -- n ) MCM_FIRST  18  + ; inline
+: MCM_GETMONTHDELTA ( -- n ) MCM_FIRST  19  + ; inline
+: MCM_SETMONTHDELTA ( -- n ) MCM_FIRST  20  + ; inline
+: MCM_GETMAXTODAYWIDTH ( -- n ) MCM_FIRST  21  + ; inline
+ALIAS: MCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+ALIAS: MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+CONSTANT: DTM_FIRST HEX: 1000
+: DTM_GETSYSTEMTIME ( -- n ) DTM_FIRST  1  + ; inline
+: DTM_SETSYSTEMTIME ( -- n ) DTM_FIRST  2  + ; inline
+: DTM_GETRANGE ( -- n ) DTM_FIRST  3  + ; inline
+: DTM_SETRANGE ( -- n ) DTM_FIRST  4  + ; inline
+: DTM_SETFORMATA ( -- n ) DTM_FIRST  5  + ; inline
+: DTM_SETFORMATW ( -- n ) DTM_FIRST  50  + ; inline
+: DTM_SETMCCOLOR ( -- n ) DTM_FIRST  6  + ; inline
+: DTM_GETMCCOLOR ( -- n ) DTM_FIRST  7  + ; inline
+: DTM_GETMONTHCAL ( -- n ) DTM_FIRST  8  + ; inline
+: DTM_SETMCFONT ( -- n ) DTM_FIRST  9  + ; inline
+: DTM_GETMCFONT ( -- n ) DTM_FIRST  10  + ; inline
+: PGM_SETCHILD ( -- n ) PGM_FIRST  1  + ; inline
+: PGM_RECALCSIZE ( -- n ) PGM_FIRST  2  + ; inline
+: PGM_FORWARDMOUSE ( -- n ) PGM_FIRST  3  + ; inline
+: PGM_SETBKCOLOR ( -- n ) PGM_FIRST  4  + ; inline
+: PGM_GETBKCOLOR ( -- n ) PGM_FIRST  5  + ; inline
+: PGM_SETBORDER ( -- n ) PGM_FIRST  6  + ; inline
+: PGM_GETBORDER ( -- n ) PGM_FIRST  7  + ; inline
+: PGM_SETPOS ( -- n ) PGM_FIRST  8  + ; inline
+: PGM_GETPOS ( -- n ) PGM_FIRST  9  + ; inline
+: PGM_SETBUTTONSIZE ( -- n ) PGM_FIRST  10  + ; inline
+: PGM_GETBUTTONSIZE ( -- n ) PGM_FIRST  11  + ; inline
+: PGM_GETBUTTONSTATE ( -- n ) PGM_FIRST  12  + ; inline
+CONSTANT: PGM_GETDROPTARGET CCM_GETDROPTARGET
+: BCM_GETIDEALSIZE ( -- n ) BCM_FIRST  1  + ; inline
+: BCM_SETIMAGELIST ( -- n ) BCM_FIRST  2  + ; inline
+: BCM_GETIMAGELIST ( -- n ) BCM_FIRST  3  + ; inline
+: BCM_SETTEXTMARGIN ( -- n ) BCM_FIRST 4  + ; inline
+: BCM_GETTEXTMARGIN ( -- n ) BCM_FIRST 5  + ; inline
+: EM_SETCUEBANNER ( -- n ) ECM_FIRST  1 +  ; inline
+: EM_GETCUEBANNER ( -- n ) ECM_FIRST  2 +  ; inline
+: EM_SHOWBALLOONTIP ( -- n ) ECM_FIRST  3  + ; inline
+: EM_HIDEBALLOONTIP ( -- n ) ECM_FIRST  4  + ; inline
+: CB_SETMINVISIBLE ( -- n ) CBM_FIRST  1  + ; inline
+: CB_GETMINVISIBLE ( -- n ) CBM_FIRST  2  + ; inline
+: LM_HITTEST ( -- n ) WM_USER  HEX: 0300  + ; inline
+: LM_GETIDEALHEIGHT ( -- n ) WM_USER  HEX: 0301  + ; inline
+: LM_SETITEM ( -- n ) WM_USER  HEX: 0302  + ; inline
+: LM_GETITEM ( -- n ) WM_USER  HEX: 0303  + ; inline
 
 
-: WA_INACTIVE 0 ; inline
-: WA_ACTIVE 1 ; inline
-: WA_CLICKACTIVE 2 ; inline
 
-: SC_SIZE         HEX: f000 ; inline
-: SC_MOVE         HEX: f010 ; inline
-: SC_MINIMIZE     HEX: f020 ; inline
-: SC_MAXIMIZE     HEX: f030 ; inline
-: SC_NEXTWINDOW   HEX: f040 ; inline
-: SC_PREVWINDOW   HEX: f050 ; inline
-: SC_CLOSE        HEX: f060 ; inline
-: SC_VSCROLL      HEX: f070 ; inline
-: SC_HSCROLL      HEX: f080 ; inline
-: SC_MOUSEMENU    HEX: f090 ; inline
-: SC_KEYMENU      HEX: f100 ; inline
-: SC_ARRANGE      HEX: f110 ; inline
-: SC_RESTORE      HEX: f120 ; inline
-: SC_TASKLIST     HEX: f130 ; inline
-: SC_SCREENSAVE   HEX: f140 ; inline
-: SC_HOTKEY       HEX: f150 ; inline
+CONSTANT: WA_INACTIVE 0
+CONSTANT: WA_ACTIVE 1
+CONSTANT: WA_CLICKACTIVE 2
+
+CONSTANT: SC_SIZE         HEX: f000
+CONSTANT: SC_MOVE         HEX: f010
+CONSTANT: SC_MINIMIZE     HEX: f020
+CONSTANT: SC_MAXIMIZE     HEX: f030
+CONSTANT: SC_NEXTWINDOW   HEX: f040
+CONSTANT: SC_PREVWINDOW   HEX: f050
+CONSTANT: SC_CLOSE        HEX: f060
+CONSTANT: SC_VSCROLL      HEX: f070
+CONSTANT: SC_HSCROLL      HEX: f080
+CONSTANT: SC_MOUSEMENU    HEX: f090
+CONSTANT: SC_KEYMENU      HEX: f100
+CONSTANT: SC_ARRANGE      HEX: f110
+CONSTANT: SC_RESTORE      HEX: f120
+CONSTANT: SC_TASKLIST     HEX: f130
+CONSTANT: SC_SCREENSAVE   HEX: f140
+CONSTANT: SC_HOTKEY       HEX: f150
index 6d4e60ab22ff80d69a1ba0acd5603fc6a9250fce..05a306640d7a3bccfc1b1a9f9181c6dc8750f349 100755 (executable)
@@ -131,7 +131,7 @@ M: ole32-error error.
 : guid= ( a b -- ? )
     [ 16 memory>byte-array ] bi@ = ;
 
-: GUID-STRING-LENGTH
+: GUID-STRING-LENGTH ( -- n )
     "{01234567-89ab-cdef-0123-456789abcdef}" length ; inline
 
 :: (guid-section>guid) ( string guid start end quot -- )
index eae796ac0876e3fe769c47e5c5ddffddc0758c21..b8e6d2c2b0ea0593753fbe6e9206ba52b0ce07ea 100644 (file)
@@ -1,86 +1,89 @@
-USING: alien alien.c-types alien.strings alien.syntax combinators
-kernel windows windows.user32 windows.ole32
-windows.com windows.com.syntax io.files io.encodings.utf16n ;
+! Copyright (C) 2006, 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types alien.strings alien.syntax
+combinators io.encodings.utf16n io.files io.pathnames kernel
+windows windows.com windows.com.syntax windows.ole32
+windows.user32 ;
 IN: windows.shell32
 
-: CSIDL_DESKTOP HEX: 00 ; inline
-: CSIDL_INTERNET HEX: 01 ; inline
-: CSIDL_PROGRAMS HEX: 02 ; inline
-: CSIDL_CONTROLS HEX: 03 ; inline
-: CSIDL_PRINTERS HEX: 04 ; inline
-: CSIDL_PERSONAL HEX: 05 ; inline
-: CSIDL_FAVORITES HEX: 06 ; inline
-: CSIDL_STARTUP HEX: 07 ; inline
-: CSIDL_RECENT HEX: 08 ; inline
-: CSIDL_SENDTO HEX: 09 ; inline
-: CSIDL_BITBUCKET HEX: 0a ; inline
-: CSIDL_STARTMENU HEX: 0b ; inline
-: CSIDL_MYDOCUMENTS HEX: 0c ; inline
-: CSIDL_MYMUSIC HEX: 0d ; inline
-: CSIDL_MYVIDEO HEX: 0e ; inline
-: CSIDL_DESKTOPDIRECTORY HEX: 10 ; inline
-: CSIDL_DRIVES HEX: 11 ; inline
-: CSIDL_NETWORK HEX: 12 ; inline
-: CSIDL_NETHOOD HEX: 13 ; inline
-: CSIDL_FONTS HEX: 14 ; inline
-: CSIDL_TEMPLATES HEX: 15 ; inline
-: CSIDL_COMMON_STARTMENU HEX: 16 ; inline
-: CSIDL_COMMON_PROGRAMS HEX: 17 ; inline
-: CSIDL_COMMON_STARTUP HEX: 18 ; inline
-: CSIDL_COMMON_DESKTOPDIRECTORY HEX: 19 ; inline
-: CSIDL_APPDATA HEX: 1a ; inline
-: CSIDL_PRINTHOOD HEX: 1b ; inline
-: CSIDL_LOCAL_APPDATA HEX: 1c ; inline
-: CSIDL_ALTSTARTUP HEX: 1d ; inline
-: CSIDL_COMMON_ALTSTARTUP HEX: 1e ; inline
-: CSIDL_COMMON_FAVORITES HEX: 1f ; inline
-: CSIDL_INTERNET_CACHE HEX: 20 ; inline
-: CSIDL_COOKIES HEX: 21 ; inline
-: CSIDL_HISTORY HEX: 22 ; inline
-: CSIDL_COMMON_APPDATA HEX: 23 ; inline
-: CSIDL_WINDOWS HEX: 24 ; inline
-: CSIDL_SYSTEM HEX: 25 ; inline
-: CSIDL_PROGRAM_FILES HEX: 26 ; inline
-: CSIDL_MYPICTURES HEX: 27 ; inline
-: CSIDL_PROFILE HEX: 28 ; inline
-: CSIDL_SYSTEMX86 HEX: 29 ; inline
-: CSIDL_PROGRAM_FILESX86 HEX: 2a ; inline
-: CSIDL_PROGRAM_FILES_COMMON HEX: 2b ; inline
-: CSIDL_PROGRAM_FILES_COMMONX86 HEX: 2c ; inline
-: CSIDL_COMMON_TEMPLATES HEX: 2d ; inline
-: CSIDL_COMMON_DOCUMENTS HEX: 2e ; inline
-: CSIDL_COMMON_ADMINTOOLS HEX: 2f ; inline
-: CSIDL_ADMINTOOLS HEX: 30 ; inline
-: CSIDL_CONNECTIONS HEX: 31 ; inline
-: CSIDL_COMMON_MUSIC HEX: 35 ; inline
-: CSIDL_COMMON_PICTURES HEX: 36 ; inline
-: CSIDL_COMMON_VIDEO HEX: 37 ; inline
-: CSIDL_RESOURCES HEX: 38 ; inline
-: CSIDL_RESOURCES_LOCALIZED HEX: 39 ; inline
-: CSIDL_COMMON_OEM_LINKS HEX: 3a ; inline
-: CSIDL_CDBURN_AREA HEX: 3b ; inline
-: CSIDL_COMPUTERSNEARME HEX: 3d ; inline
-: CSIDL_PROFILES HEX: 3e ; inline
-: CSIDL_FOLDER_MASK HEX: ff ; inline
-: CSIDL_FLAG_PER_USER_INIT HEX: 800 ; inline
-: CSIDL_FLAG_NO_ALIAS HEX: 1000 ; inline
-: CSIDL_FLAG_DONT_VERIFY HEX: 4000 ; inline
-: CSIDL_FLAG_CREATE HEX: 8000 ; inline
-: CSIDL_FLAG_MASK HEX: ff00 ; inline
-
-
-: ERROR_FILE_NOT_FOUND 2 ; inline
-
-: SHGFP_TYPE_CURRENT 0 ; inline
-: SHGFP_TYPE_DEFAULT 1 ; inline
+CONSTANT: CSIDL_DESKTOP HEX: 00
+CONSTANT: CSIDL_INTERNET HEX: 01
+CONSTANT: CSIDL_PROGRAMS HEX: 02
+CONSTANT: CSIDL_CONTROLS HEX: 03
+CONSTANT: CSIDL_PRINTERS HEX: 04
+CONSTANT: CSIDL_PERSONAL HEX: 05
+CONSTANT: CSIDL_FAVORITES HEX: 06
+CONSTANT: CSIDL_STARTUP HEX: 07
+CONSTANT: CSIDL_RECENT HEX: 08
+CONSTANT: CSIDL_SENDTO HEX: 09
+CONSTANT: CSIDL_BITBUCKET HEX: 0a
+CONSTANT: CSIDL_STARTMENU HEX: 0b
+CONSTANT: CSIDL_MYDOCUMENTS HEX: 0c
+CONSTANT: CSIDL_MYMUSIC HEX: 0d
+CONSTANT: CSIDL_MYVIDEO HEX: 0e
+CONSTANT: CSIDL_DESKTOPDIRECTORY HEX: 10
+CONSTANT: CSIDL_DRIVES HEX: 11
+CONSTANT: CSIDL_NETWORK HEX: 12
+CONSTANT: CSIDL_NETHOOD HEX: 13
+CONSTANT: CSIDL_FONTS HEX: 14
+CONSTANT: CSIDL_TEMPLATES HEX: 15
+CONSTANT: CSIDL_COMMON_STARTMENU HEX: 16
+CONSTANT: CSIDL_COMMON_PROGRAMS HEX: 17
+CONSTANT: CSIDL_COMMON_STARTUP HEX: 18
+CONSTANT: CSIDL_COMMON_DESKTOPDIRECTORY HEX: 19
+CONSTANT: CSIDL_APPDATA HEX: 1a
+CONSTANT: CSIDL_PRINTHOOD HEX: 1b
+CONSTANT: CSIDL_LOCAL_APPDATA HEX: 1c
+CONSTANT: CSIDL_ALTSTARTUP HEX: 1d
+CONSTANT: CSIDL_COMMON_ALTSTARTUP HEX: 1e
+CONSTANT: CSIDL_COMMON_FAVORITES HEX: 1f
+CONSTANT: CSIDL_INTERNET_CACHE HEX: 20
+CONSTANT: CSIDL_COOKIES HEX: 21
+CONSTANT: CSIDL_HISTORY HEX: 22
+CONSTANT: CSIDL_COMMON_APPDATA HEX: 23
+CONSTANT: CSIDL_WINDOWS HEX: 24
+CONSTANT: CSIDL_SYSTEM HEX: 25
+CONSTANT: CSIDL_PROGRAM_FILES HEX: 26
+CONSTANT: CSIDL_MYPICTURES HEX: 27
+CONSTANT: CSIDL_PROFILE HEX: 28
+CONSTANT: CSIDL_SYSTEMX86 HEX: 29
+CONSTANT: CSIDL_PROGRAM_FILESX86 HEX: 2a
+CONSTANT: CSIDL_PROGRAM_FILES_COMMON HEX: 2b
+CONSTANT: CSIDL_PROGRAM_FILES_COMMONX86 HEX: 2c
+CONSTANT: CSIDL_COMMON_TEMPLATES HEX: 2d
+CONSTANT: CSIDL_COMMON_DOCUMENTS HEX: 2e
+CONSTANT: CSIDL_COMMON_ADMINTOOLS HEX: 2f
+CONSTANT: CSIDL_ADMINTOOLS HEX: 30
+CONSTANT: CSIDL_CONNECTIONS HEX: 31
+CONSTANT: CSIDL_COMMON_MUSIC HEX: 35
+CONSTANT: CSIDL_COMMON_PICTURES HEX: 36
+CONSTANT: CSIDL_COMMON_VIDEO HEX: 37
+CONSTANT: CSIDL_RESOURCES HEX: 38
+CONSTANT: CSIDL_RESOURCES_LOCALIZED HEX: 39
+CONSTANT: CSIDL_COMMON_OEM_LINKS HEX: 3a
+CONSTANT: CSIDL_CDBURN_AREA HEX: 3b
+CONSTANT: CSIDL_COMPUTERSNEARME HEX: 3d
+CONSTANT: CSIDL_PROFILES HEX: 3e
+CONSTANT: CSIDL_FOLDER_MASK HEX: ff
+CONSTANT: CSIDL_FLAG_PER_USER_INIT HEX: 800
+CONSTANT: CSIDL_FLAG_NO_ALIAS HEX: 1000
+CONSTANT: CSIDL_FLAG_DONT_VERIFY HEX: 4000
+CONSTANT: CSIDL_FLAG_CREATE HEX: 8000
+CONSTANT: CSIDL_FLAG_MASK HEX: ff00
+
+
+CONSTANT: ERROR_FILE_NOT_FOUND 2
+
+CONSTANT: SHGFP_TYPE_CURRENT 0
+CONSTANT: SHGFP_TYPE_DEFAULT 1
 
 LIBRARY: shell32
 
 FUNCTION: HRESULT SHGetFolderPathW ( HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPTSTR pszPath ) ;
-: SHGetFolderPath SHGetFolderPathW ; inline
+ALIAS: SHGetFolderPath SHGetFolderPathW
 
 FUNCTION: HINSTANCE ShellExecuteW ( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ) ;
-: ShellExecute ShellExecuteW ; inline
+ALIAS: ShellExecute ShellExecuteW
 
 : open-in-explorer ( dir -- )
     f "open" rot (normalize-path) f f SW_SHOWNORMAL ShellExecute drop ;
@@ -102,7 +105,7 @@ FUNCTION: HINSTANCE ShellExecuteW ( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFi
 : application-data ( -- str )
     CSIDL_APPDATA shell32-directory ;
 
-: windows ( -- str )
+: windows-directory ( -- str )
     CSIDL_WINDOWS shell32-directory ;
 
 : programs ( -- str )
@@ -120,50 +123,50 @@ FUNCTION: HINSTANCE ShellExecuteW ( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFi
 : program-files-common-x86 ( -- str )
     CSIDL_PROGRAM_FILES_COMMONX86 shell32-directory ;
 
-: SHCONTF_FOLDERS 32 ; inline
-: SHCONTF_NONFOLDERS 64 ; inline
-: SHCONTF_INCLUDEHIDDEN 128 ; inline
-: SHCONTF_INIT_ON_FIRST_NEXT 256 ; inline
-: SHCONTF_NETPRINTERSRCH 512 ; inline
-: SHCONTF_SHAREABLE 1024 ; inline
-: SHCONTF_STORAGE 2048 ; inline
+CONSTANT: SHCONTF_FOLDERS 32
+CONSTANT: SHCONTF_NONFOLDERS 64
+CONSTANT: SHCONTF_INCLUDEHIDDEN 128
+CONSTANT: SHCONTF_INIT_ON_FIRST_NEXT 256
+CONSTANT: SHCONTF_NETPRINTERSRCH 512
+CONSTANT: SHCONTF_SHAREABLE 1024
+CONSTANT: SHCONTF_STORAGE 2048
 
 TYPEDEF: DWORD SHCONTF
 
-: SHGDN_NORMAL 0 ; inline
-: SHGDN_INFOLDER 1 ; inline
-: SHGDN_FOREDITING HEX: 1000 ; inline
-: SHGDN_INCLUDE_NONFILESYS HEX: 2000 ; inline
-: SHGDN_FORADDRESSBAR HEX: 4000 ; inline
-: SHGDN_FORPARSING HEX: 8000 ; inline
+CONSTANT: SHGDN_NORMAL 0
+CONSTANT: SHGDN_INFOLDER 1
+CONSTANT: SHGDN_FOREDITING HEX: 1000
+CONSTANT: SHGDN_INCLUDE_NONFILESYS HEX: 2000
+CONSTANT: SHGDN_FORADDRESSBAR HEX: 4000
+CONSTANT: SHGDN_FORPARSING HEX: 8000
 
 TYPEDEF: DWORD SHGDNF
 
-: SFGAO_CANCOPY           DROPEFFECT_COPY ; inline
-: SFGAO_CANMOVE           DROPEFFECT_MOVE ; inline
-: SFGAO_CANLINK           DROPEFFECT_LINK ; inline
-: SFGAO_CANRENAME         HEX: 00000010 ; inline
-: SFGAO_CANDELETE         HEX: 00000020 ; inline
-: SFGAO_HASPROPSHEET      HEX: 00000040 ; inline
-: SFGAO_DROPTARGET        HEX: 00000100 ; inline
-: SFGAO_CAPABILITYMASK    HEX: 00000177 ; inline
-: SFGAO_LINK              HEX: 00010000 ; inline
-: SFGAO_SHARE             HEX: 00020000 ; inline
-: SFGAO_READONLY          HEX: 00040000 ; inline
-: SFGAO_GHOSTED           HEX: 00080000 ; inline
-: SFGAO_HIDDEN            HEX: 00080000 ; inline
-: SFGAO_DISPLAYATTRMASK   HEX: 000F0000 ; inline
-: SFGAO_FILESYSANCESTOR   HEX: 10000000 ; inline
-: SFGAO_FOLDER            HEX: 20000000 ; inline
-: SFGAO_FILESYSTEM        HEX: 40000000 ; inline
-: SFGAO_HASSUBFOLDER      HEX: 80000000 ; inline
-: SFGAO_CONTENTSMASK      HEX: 80000000 ; inline
-: SFGAO_VALIDATE          HEX: 01000000 ; inline
-: SFGAO_REMOVABLE         HEX: 02000000 ; inline
-: SFGAO_COMPRESSED        HEX: 04000000 ; inline
-: SFGAO_BROWSABLE         HEX: 08000000 ; inline
-: SFGAO_NONENUMERATED     HEX: 00100000 ; inline
-: SFGAO_NEWCONTENT        HEX: 00200000 ; inline
+ALIAS: SFGAO_CANCOPY           DROPEFFECT_COPY
+ALIAS: SFGAO_CANMOVE           DROPEFFECT_MOVE
+ALIAS: SFGAO_CANLINK           DROPEFFECT_LINK
+CONSTANT: SFGAO_CANRENAME         HEX: 00000010
+CONSTANT: SFGAO_CANDELETE         HEX: 00000020
+CONSTANT: SFGAO_HASPROPSHEET      HEX: 00000040
+CONSTANT: SFGAO_DROPTARGET        HEX: 00000100
+CONSTANT: SFGAO_CAPABILITYMASK    HEX: 00000177
+CONSTANT: SFGAO_LINK              HEX: 00010000
+CONSTANT: SFGAO_SHARE             HEX: 00020000
+CONSTANT: SFGAO_READONLY          HEX: 00040000
+CONSTANT: SFGAO_GHOSTED           HEX: 00080000
+CONSTANT: SFGAO_HIDDEN            HEX: 00080000
+CONSTANT: SFGAO_DISPLAYATTRMASK   HEX: 000F0000
+CONSTANT: SFGAO_FILESYSANCESTOR   HEX: 10000000
+CONSTANT: SFGAO_FOLDER            HEX: 20000000
+CONSTANT: SFGAO_FILESYSTEM        HEX: 40000000
+CONSTANT: SFGAO_HASSUBFOLDER      HEX: 80000000
+CONSTANT: SFGAO_CONTENTSMASK      HEX: 80000000
+CONSTANT: SFGAO_VALIDATE          HEX: 01000000
+CONSTANT: SFGAO_REMOVABLE         HEX: 02000000
+CONSTANT: SFGAO_COMPRESSED        HEX: 04000000
+CONSTANT: SFGAO_BROWSABLE         HEX: 08000000
+CONSTANT: SFGAO_NONENUMERATED     HEX: 00100000
+CONSTANT: SFGAO_NEWCONTENT        HEX: 00200000
 
 TYPEDEF: ULONG SFGAOF
 
@@ -220,5 +223,4 @@ COM-INTERFACE: IShellFolder IUnknown {000214E6-0000-0000-C000-000000000046}
 FUNCTION: HRESULT SHGetDesktopFolder ( IShellFolder** ppshf ) ;
 
 FUNCTION: UINT DragQueryFileW ( HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch ) ;
-: DragQueryFile DragQueryFileW ; inline
-
+ALIAS: DragQueryFile DragQueryFileW
index 5e23f8cc01e29df59b7dc96bc6239976d6fb88fe..e63834d3695801278f3a78f6234cf6ec564c59ab 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2007 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types kernel math windows windows.kernel32
-namespaces calendar ;
+namespaces calendar math.bitwise ;
 IN: windows.time
 
 : >64bit ( lo hi -- n )
@@ -11,8 +11,9 @@ IN: windows.time
     1601 1 1 0 0 0 instant <timestamp> ;
 
 : FILETIME>windows-time ( FILETIME -- n )
-    [ FILETIME-dwLowDateTime ] keep
-    FILETIME-dwHighDateTime >64bit ;
+    [ FILETIME-dwLowDateTime ]
+    [ FILETIME-dwHighDateTime ]
+    bi >64bit ;
 
 : windows-time>timestamp ( n -- timestamp )
     10000000 /i seconds windows-1601 swap time+ ;
@@ -28,12 +29,12 @@ IN: windows.time
 : windows-time>FILETIME ( n -- FILETIME )
     "FILETIME" <c-object>
     [
-        [ >r HEX: ffffffff bitand r> set-FILETIME-dwLowDateTime ] 2keep
-        >r -32 shift r> set-FILETIME-dwHighDateTime
+        [ [ 32 bits ] dip set-FILETIME-dwLowDateTime ]
+        [ [ -32 shift ] dip set-FILETIME-dwHighDateTime ] 2bi
     ] keep ;
 
 : timestamp>FILETIME ( timestamp -- FILETIME/f )
-    [ >gmt timestamp>windows-time windows-time>FILETIME ] [ f ] if* ;
+    dup [ >gmt timestamp>windows-time windows-time>FILETIME ] when ;
 
 : FILETIME>timestamp ( FILETIME -- timestamp/f )
     FILETIME>windows-time windows-time>timestamp ;
index e5c9f962751061fd1c130df58da72442804da47b..e2e2c7e1502c65e5556950aed6d188d437bcf83f 100644 (file)
@@ -1,35 +1,35 @@
 ! Copyright (C) 2005, 2006 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.syntax parser namespaces kernel math
-windows.types generalizations math.bitwise alias ;
+windows.types generalizations math.bitwise ;
 IN: windows.user32
 
 ! HKL for ActivateKeyboardLayout
-: HKL_PREV 0 ; inline
-: HKL_NEXT 1 ; inline
-
-: CW_USEDEFAULT HEX: 80000000 ; inline
-
-: WS_OVERLAPPED       HEX: 00000000 ; inline
-: WS_POPUP            HEX: 80000000 ; inline
-: WS_CHILD            HEX: 40000000 ; inline
-: WS_MINIMIZE         HEX: 20000000 ; inline
-: WS_VISIBLE          HEX: 10000000 ; inline
-: WS_DISABLED         HEX: 08000000 ; inline
-: WS_CLIPSIBLINGS     HEX: 04000000 ; inline
-: WS_CLIPCHILDREN     HEX: 02000000 ; inline
-: WS_MAXIMIZE         HEX: 01000000 ; inline
-: WS_CAPTION          HEX: 00C00000 ; inline
-: WS_BORDER           HEX: 00800000 ; inline
-: WS_DLGFRAME         HEX: 00400000 ; inline
-: WS_VSCROLL          HEX: 00200000 ; inline
-: WS_HSCROLL          HEX: 00100000 ; inline
-: WS_SYSMENU          HEX: 00080000 ; inline
-: WS_THICKFRAME       HEX: 00040000 ; inline
-: WS_GROUP            HEX: 00020000 ; inline
-: WS_TABSTOP          HEX: 00010000 ; inline
-: WS_MINIMIZEBOX      HEX: 00020000 ; inline
-: WS_MAXIMIZEBOX      HEX: 00010000 ; inline
+CONSTANT: HKL_PREV 0
+CONSTANT: HKL_NEXT 1
+
+CONSTANT: CW_USEDEFAULT HEX: 80000000
+
+CONSTANT: WS_OVERLAPPED       HEX: 00000000
+CONSTANT: WS_POPUP            HEX: 80000000
+CONSTANT: WS_CHILD            HEX: 40000000
+CONSTANT: WS_MINIMIZE         HEX: 20000000
+CONSTANT: WS_VISIBLE          HEX: 10000000
+CONSTANT: WS_DISABLED         HEX: 08000000
+CONSTANT: WS_CLIPSIBLINGS     HEX: 04000000
+CONSTANT: WS_CLIPCHILDREN     HEX: 02000000
+CONSTANT: WS_MAXIMIZE         HEX: 01000000
+CONSTANT: WS_CAPTION          HEX: 00C00000
+CONSTANT: WS_BORDER           HEX: 00800000
+CONSTANT: WS_DLGFRAME         HEX: 00400000
+CONSTANT: WS_VSCROLL          HEX: 00200000
+CONSTANT: WS_HSCROLL          HEX: 00100000
+CONSTANT: WS_SYSMENU          HEX: 00080000
+CONSTANT: WS_THICKFRAME       HEX: 00040000
+CONSTANT: WS_GROUP            HEX: 00020000
+CONSTANT: WS_TABSTOP          HEX: 00010000
+CONSTANT: WS_MINIMIZEBOX      HEX: 00020000
+CONSTANT: WS_MAXIMIZEBOX      HEX: 00010000
 
 ! Common window styles
 : WS_OVERLAPPEDWINDOW ( -- n )
@@ -45,102 +45,102 @@ IN: windows.user32
 : WS_POPUPWINDOW ( -- n )
     { WS_POPUP WS_BORDER WS_SYSMENU } flags ; foldable
 
-: WS_CHILDWINDOW      WS_CHILD ; inline
+ALIAS: WS_CHILDWINDOW      WS_CHILD
 
-: WS_TILED            WS_OVERLAPPED ; inline
-: WS_ICONIC           WS_MINIMIZE ; inline
-: WS_SIZEBOX          WS_THICKFRAME ; inline
-: WS_TILEDWINDOW WS_OVERLAPPEDWINDOW ; inline
+ALIAS: WS_TILED            WS_OVERLAPPED
+ALIAS: WS_ICONIC           WS_MINIMIZE
+ALIAS: WS_SIZEBOX          WS_THICKFRAME
+ALIAS: WS_TILEDWINDOW WS_OVERLAPPEDWINDOW
 
 ! Extended window styles
 
-: WS_EX_DLGMODALFRAME     HEX: 00000001 ; inline
-: WS_EX_NOPARENTNOTIFY    HEX: 00000004 ; inline
-: WS_EX_TOPMOST           HEX: 00000008 ; inline
-: WS_EX_ACCEPTFILES       HEX: 00000010 ; inline
-: WS_EX_TRANSPARENT       HEX: 00000020 ; inline
-: WS_EX_MDICHILD          HEX: 00000040 ; inline
-: WS_EX_TOOLWINDOW        HEX: 00000080 ; inline
-: WS_EX_WINDOWEDGE        HEX: 00000100 ; inline
-: WS_EX_CLIENTEDGE        HEX: 00000200 ; inline
-: WS_EX_CONTEXTHELP       HEX: 00000400 ; inline
-
-: WS_EX_RIGHT             HEX: 00001000 ; inline
-: WS_EX_LEFT              HEX: 00000000 ; inline
-: WS_EX_RTLREADING        HEX: 00002000 ; inline
-: WS_EX_LTRREADING        HEX: 00000000 ; inline
-: WS_EX_LEFTSCROLLBAR     HEX: 00004000 ; inline
-: WS_EX_RIGHTSCROLLBAR    HEX: 00000000 ; inline
-: WS_EX_CONTROLPARENT     HEX: 00010000 ; inline
-: WS_EX_STATICEDGE        HEX: 00020000 ; inline
-: WS_EX_APPWINDOW         HEX: 00040000 ; inline
+CONSTANT: WS_EX_DLGMODALFRAME     HEX: 00000001
+CONSTANT: WS_EX_NOPARENTNOTIFY    HEX: 00000004
+CONSTANT: WS_EX_TOPMOST           HEX: 00000008
+CONSTANT: WS_EX_ACCEPTFILES       HEX: 00000010
+CONSTANT: WS_EX_TRANSPARENT       HEX: 00000020
+CONSTANT: WS_EX_MDICHILD          HEX: 00000040
+CONSTANT: WS_EX_TOOLWINDOW        HEX: 00000080
+CONSTANT: WS_EX_WINDOWEDGE        HEX: 00000100
+CONSTANT: WS_EX_CLIENTEDGE        HEX: 00000200
+CONSTANT: WS_EX_CONTEXTHELP       HEX: 00000400
+
+CONSTANT: WS_EX_RIGHT             HEX: 00001000
+CONSTANT: WS_EX_LEFT              HEX: 00000000
+CONSTANT: WS_EX_RTLREADING        HEX: 00002000
+CONSTANT: WS_EX_LTRREADING        HEX: 00000000
+CONSTANT: WS_EX_LEFTSCROLLBAR     HEX: 00004000
+CONSTANT: WS_EX_RIGHTSCROLLBAR    HEX: 00000000
+CONSTANT: WS_EX_CONTROLPARENT     HEX: 00010000
+CONSTANT: WS_EX_STATICEDGE        HEX: 00020000
+CONSTANT: WS_EX_APPWINDOW         HEX: 00040000
 : WS_EX_OVERLAPPEDWINDOW ( -- n )
     WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE bitor ; foldable
 : WS_EX_PALETTEWINDOW ( -- n )
     { WS_EX_WINDOWEDGE WS_EX_TOOLWINDOW WS_EX_TOPMOST } flags ; foldable
 
-: CS_VREDRAW          HEX: 0001 ; inline
-: CS_HREDRAW          HEX: 0002 ; inline
-: CS_DBLCLKS          HEX: 0008 ; inline
-: CS_OWNDC            HEX: 0020 ; inline
-: CS_CLASSDC          HEX: 0040 ; inline
-: CS_PARENTDC         HEX: 0080 ; inline
-: CS_NOCLOSE          HEX: 0200 ; inline
-: CS_SAVEBITS         HEX: 0800 ; inline
-: CS_BYTEALIGNCLIENT  HEX: 1000 ; inline
-: CS_BYTEALIGNWINDOW  HEX: 2000 ; inline
-: CS_GLOBALCLASS      HEX: 4000 ; inline
-
-: COLOR_SCROLLBAR         0 ; inline
-: COLOR_BACKGROUND        1 ; inline
-: COLOR_ACTIVECAPTION     2 ; inline
-: COLOR_INACTIVECAPTION   3 ; inline
-: COLOR_MENU              4 ; inline
-: COLOR_WINDOW            5 ; inline
-: COLOR_WINDOWFRAME       6 ; inline
-: COLOR_MENUTEXT          7 ; inline
-: COLOR_WINDOWTEXT        8 ; inline
-: COLOR_CAPTIONTEXT       9 ; inline
-: COLOR_ACTIVEBORDER      10 ; inline
-: COLOR_INACTIVEBORDER    11 ; inline
-: COLOR_APPWORKSPACE      12 ; inline
-: COLOR_HIGHLIGHT         13 ; inline
-: COLOR_HIGHLIGHTTEXT     14 ; inline
-: COLOR_BTNFACE           15 ; inline
-: COLOR_BTNSHADOW         16 ; inline
-: COLOR_GRAYTEXT          17 ; inline
-: COLOR_BTNTEXT           18 ; inline
-: COLOR_INACTIVECAPTIONTEXT 19 ; inline
-: COLOR_BTNHIGHLIGHT      20 ; inline
-
-: IDI_APPLICATION     32512 ; inline
-: IDI_HAND            32513 ; inline
-: IDI_QUESTION        32514 ; inline
-: IDI_EXCLAMATION     32515 ; inline
-: IDI_ASTERISK        32516 ; inline
-: IDI_WINLOGO         32517 ; inline
+CONSTANT: CS_VREDRAW          HEX: 0001
+CONSTANT: CS_HREDRAW          HEX: 0002
+CONSTANT: CS_DBLCLKS          HEX: 0008
+CONSTANT: CS_OWNDC            HEX: 0020
+CONSTANT: CS_CLASSDC          HEX: 0040
+CONSTANT: CS_PARENTDC         HEX: 0080
+CONSTANT: CS_NOCLOSE          HEX: 0200
+CONSTANT: CS_SAVEBITS         HEX: 0800
+CONSTANT: CS_BYTEALIGNCLIENT  HEX: 1000
+CONSTANT: CS_BYTEALIGNWINDOW  HEX: 2000
+CONSTANT: CS_GLOBALCLASS      HEX: 4000
+
+CONSTANT: COLOR_SCROLLBAR         0
+CONSTANT: COLOR_BACKGROUND        1
+CONSTANT: COLOR_ACTIVECAPTION     2
+CONSTANT: COLOR_INACTIVECAPTION   3
+CONSTANT: COLOR_MENU              4
+CONSTANT: COLOR_WINDOW            5
+CONSTANT: COLOR_WINDOWFRAME       6
+CONSTANT: COLOR_MENUTEXT          7
+CONSTANT: COLOR_WINDOWTEXT        8
+CONSTANT: COLOR_CAPTIONTEXT       9
+CONSTANT: COLOR_ACTIVEBORDER      10
+CONSTANT: COLOR_INACTIVEBORDER    11
+CONSTANT: COLOR_APPWORKSPACE      12
+CONSTANT: COLOR_HIGHLIGHT         13
+CONSTANT: COLOR_HIGHLIGHTTEXT     14
+CONSTANT: COLOR_BTNFACE           15
+CONSTANT: COLOR_BTNSHADOW         16
+CONSTANT: COLOR_GRAYTEXT          17
+CONSTANT: COLOR_BTNTEXT           18
+CONSTANT: COLOR_INACTIVECAPTIONTEXT 19
+CONSTANT: COLOR_BTNHIGHLIGHT      20
+
+CONSTANT: IDI_APPLICATION     32512
+CONSTANT: IDI_HAND            32513
+CONSTANT: IDI_QUESTION        32514
+CONSTANT: IDI_EXCLAMATION     32515
+CONSTANT: IDI_ASTERISK        32516
+CONSTANT: IDI_WINLOGO         32517
 
 ! ShowWindow() Commands
-: SW_HIDE             0 ; inline
-: SW_SHOWNORMAL       1 ; inline
-: SW_NORMAL           1 ; inline
-: SW_SHOWMINIMIZED    2 ; inline
-: SW_SHOWMAXIMIZED    3 ; inline
-: SW_MAXIMIZE         3 ; inline
-: SW_SHOWNOACTIVATE   4 ; inline
-: SW_SHOW             5 ; inline
-: SW_MINIMIZE         6 ; inline
-: SW_SHOWMINNOACTIVE  7 ; inline
-: SW_SHOWNA           8 ; inline
-: SW_RESTORE          9 ; inline
-: SW_SHOWDEFAULT      10 ; inline
-: SW_FORCEMINIMIZE    11 ; inline
-: SW_MAX              11 ; inline
+CONSTANT: SW_HIDE             0
+CONSTANT: SW_SHOWNORMAL       1
+CONSTANT: SW_NORMAL           1
+CONSTANT: SW_SHOWMINIMIZED    2
+CONSTANT: SW_SHOWMAXIMIZED    3
+CONSTANT: SW_MAXIMIZE         3
+CONSTANT: SW_SHOWNOACTIVATE   4
+CONSTANT: SW_SHOW             5
+CONSTANT: SW_MINIMIZE         6
+CONSTANT: SW_SHOWMINNOACTIVE  7
+CONSTANT: SW_SHOWNA           8
+CONSTANT: SW_RESTORE          9
+CONSTANT: SW_SHOWDEFAULT      10
+CONSTANT: SW_FORCEMINIMIZE    11
+CONSTANT: SW_MAX              11
 
 ! PeekMessage
-: PM_NOREMOVE   0 ; inline
-: PM_REMOVE     1 ; inline
-: PM_NOYIELD    2 ; inline
+CONSTANT: PM_NOREMOVE   0
+CONSTANT: PM_REMOVE     1
+CONSTANT: PM_NOYIELD    2
 ! : PM_QS_INPUT         (QS_INPUT << 16) ;
 ! : PM_QS_POSTMESSAGE   ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16) ;
 ! : PM_QS_PAINT         (QS_PAINT << 16) ;
@@ -503,7 +503,7 @@ IN: windows.user32
 : MB_ICONQUESTION    HEX: 00000020 ; inline
 : MB_OK              HEX: 00000000 ; inline
 
-: FVIRTKEY TRUE ; inline
+ALIAS: FVIRTKEY TRUE
 : FNOINVERT 2 ; inline
 : FSHIFT 4 ; inline
 : FCONTROL 8 ; inline
@@ -670,7 +670,7 @@ FUNCTION: HWND CreateWindowExW (
 
 ALIAS: CreateWindowEx CreateWindowExW
 
-: CreateWindow 0 12 -nrot CreateWindowEx ; inline
+: CreateWindow ( a b c d e f g h i j k -- hwnd ) 0 12 -nrot CreateWindowEx ; inline
 
 
 ! FUNCTION: CreateWindowStationA
@@ -1265,7 +1265,7 @@ FUNCTION: BOOL SetForegroundWindow ( HWND hWnd ) ;
 ! FUNCTION: SetKeyboardState
 ! type is ignored
 FUNCTION: void SetLastErrorEx ( DWORD dwErrCode, DWORD dwType ) ; 
-: SetLastError 0 SetLastErrorEx ; inline
+: SetLastError ( errcode -- ) 0 SetLastErrorEx ; inline
 ! FUNCTION: SetLayeredWindowAttributes
 ! FUNCTION: SetLogonNotifyWindow
 ! FUNCTION: SetMenu
index 5d450897e22120d14379ba442a478314f0c11954..27069ed743080d7a3875ef010c67a3f11d3c2f8d 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.strings alien.syntax arrays
 byte-arrays kernel math sequences windows.types windows.kernel32
-windows.errors windows math.bitwise alias io.encodings.utf16n ;
+windows.errors windows math.bitwise io.encodings.utf16n ;
 IN: windows.winsock
 
 USE: libc
@@ -14,95 +14,95 @@ TYPEDEF: void* SOCKET
 : <wsadata> ( -- byte-array )
     HEX: 190 <byte-array> ;
 
-: SOCK_STREAM    1 ; inline
-: SOCK_DGRAM     2 ; inline
-: SOCK_RAW       3 ; inline
-: SOCK_RDM       4 ; inline
-: SOCK_SEQPACKET 5 ; inline
-
-: SO_DEBUG       HEX:   1 ; inline
-: SO_ACCEPTCONN  HEX:   2 ; inline
-: SO_REUSEADDR   HEX:   4 ; inline
-: SO_KEEPALIVE   HEX:   8 ; inline
-: SO_DONTROUTE   HEX:  10 ; inline
-: SO_BROADCAST   HEX:  20 ; inline
-: SO_USELOOPBACK HEX:  40 ; inline
-: SO_LINGER      HEX:  80 ; inline
-: SO_OOBINLINE   HEX: 100 ; inline
-: SO_DONTLINGER SO_LINGER bitnot ; inline
-
-: SO_SNDBUF     HEX: 1001 ; inline
-: SO_RCVBUF     HEX: 1002 ; inline
-: SO_SNDLOWAT   HEX: 1003 ; inline
-: SO_RCVLOWAT   HEX: 1004 ; inline
-: SO_SNDTIMEO   HEX: 1005 ; inline
-: SO_RCVTIMEO   HEX: 1006 ; inline
-: SO_ERROR      HEX: 1007 ; inline
-: SO_TYPE       HEX: 1008 ; inline
-
-: TCP_NODELAY   HEX:    1 ; inline
-
-: AF_UNSPEC      0 ; inline
-: AF_UNIX        1 ; inline
-: AF_INET        2 ; inline
-: AF_IMPLINK     3 ; inline
-: AF_PUP         4 ; inline
-: AF_CHAOS       5 ; inline
-: AF_NS          6 ; inline
-: AF_ISO         7 ; inline
-: AF_OSI    AF_ISO ; inline
-: AF_ECMA        8 ; inline
-: AF_DATAKIT     9 ; inline
-: AF_CCITT      10 ; inline
-: AF_SNA        11 ; inline
-: AF_DECnet     12 ; inline
-: AF_DLI        13 ; inline
-: AF_LAT        14 ; inline
-: AF_HYLINK     15 ; inline
-: AF_APPLETALK  16 ; inline
-: AF_NETBIOS    17 ; inline
-: AF_MAX        18 ; inline
-: AF_INET6      23 ; inline
-: AF_IRDA       26 ; inline
-: AF_BTM        32 ; inline
-
-: PF_UNSPEC      0 ; inline
-: PF_LOCAL       1 ; inline
-: PF_INET        2 ; inline
-: PF_INET6      23 ; inline
-
-: AI_PASSIVE     1 ; inline
-: AI_CANONNAME   2 ; inline
-: AI_NUMERICHOST 4 ; inline
+CONSTANT: SOCK_STREAM    1
+CONSTANT: SOCK_DGRAM     2
+CONSTANT: SOCK_RAW       3
+CONSTANT: SOCK_RDM       4
+CONSTANT: SOCK_SEQPACKET 5
+
+CONSTANT: SO_DEBUG       HEX:   1
+CONSTANT: SO_ACCEPTCONN  HEX:   2
+CONSTANT: SO_REUSEADDR   HEX:   4
+CONSTANT: SO_KEEPALIVE   HEX:   8
+CONSTANT: SO_DONTROUTE   HEX:  10
+CONSTANT: SO_BROADCAST   HEX:  20
+CONSTANT: SO_USELOOPBACK HEX:  40
+CONSTANT: SO_LINGER      HEX:  80
+CONSTANT: SO_OOBINLINE   HEX: 100
+: SO_DONTLINGER ( -- n ) SO_LINGER bitnot ; inline
+
+CONSTANT: SO_SNDBUF     HEX: 1001
+CONSTANT: SO_RCVBUF     HEX: 1002
+CONSTANT: SO_SNDLOWAT   HEX: 1003
+CONSTANT: SO_RCVLOWAT   HEX: 1004
+CONSTANT: SO_SNDTIMEO   HEX: 1005
+CONSTANT: SO_RCVTIMEO   HEX: 1006
+CONSTANT: SO_ERROR      HEX: 1007
+CONSTANT: SO_TYPE       HEX: 1008
+
+CONSTANT: TCP_NODELAY   HEX:    1
+
+CONSTANT: AF_UNSPEC      0
+CONSTANT: AF_UNIX        1
+CONSTANT: AF_INET        2
+CONSTANT: AF_IMPLINK     3
+CONSTANT: AF_PUP         4
+CONSTANT: AF_CHAOS       5
+CONSTANT: AF_NS          6
+CONSTANT: AF_ISO         7
+ALIAS: AF_OSI    AF_ISO
+CONSTANT: AF_ECMA        8
+CONSTANT: AF_DATAKIT     9
+CONSTANT: AF_CCITT      10
+CONSTANT: AF_SNA        11
+CONSTANT: AF_DECnet     12
+CONSTANT: AF_DLI        13
+CONSTANT: AF_LAT        14
+CONSTANT: AF_HYLINK     15
+CONSTANT: AF_APPLETALK  16
+CONSTANT: AF_NETBIOS    17
+CONSTANT: AF_MAX        18
+CONSTANT: AF_INET6      23
+CONSTANT: AF_IRDA       26
+CONSTANT: AF_BTM        32
+
+CONSTANT: PF_UNSPEC      0
+CONSTANT: PF_LOCAL       1
+CONSTANT: PF_INET        2
+CONSTANT: PF_INET6      23
+
+CONSTANT: AI_PASSIVE     1
+CONSTANT: AI_CANONNAME   2
+CONSTANT: AI_NUMERICHOST 4
 : AI_MASK ( -- n ) { AI_PASSIVE AI_CANONNAME AI_NUMERICHOST } flags ;
 
-: NI_NUMERICHOST 1 ;
-: NI_NUMERICSERV 2 ;
+CONSTANT: NI_NUMERICHOST 1
+CONSTANT: NI_NUMERICSERV 2
 
-: IPPROTO_TCP    6 ; inline
-: IPPROTO_UDP   17 ; inline
-: IPPROTO_RM   113 ; inline
+CONSTANT: IPPROTO_TCP    6
+CONSTANT: IPPROTO_UDP   17
+CONSTANT: IPPROTO_RM   113
 
-: WSA_FLAG_OVERLAPPED 1 ; inline
-: WSA_WAIT_EVENT_0 WAIT_OBJECT_0 ; inline
-: WSA_MAXIMUM_WAIT_EVENTS MAXIMUM_WAIT_OBJECTS ; inline
-: WSA_INVALID_EVENT f ; inline
-: WSA_WAIT_FAILED -1 ; inline
-: WSA_WAIT_IO_COMPLETION WAIT_IO_COMPLETION ; inline
-: WSA_WAIT_TIMEOUT WAIT_TIMEOUT ; inline
-: WSA_INFINITE INFINITE ; inline
-: WSA_IO_PENDING ERROR_IO_PENDING ; inline
+CONSTANT: WSA_FLAG_OVERLAPPED 1
+ALIAS: WSA_WAIT_EVENT_0 WAIT_OBJECT_0
+ALIAS: WSA_MAXIMUM_WAIT_EVENTS MAXIMUM_WAIT_OBJECTS
+CONSTANT: WSA_INVALID_EVENT f
+CONSTANT: WSA_WAIT_FAILED -1
+ALIAS: WSA_WAIT_IO_COMPLETION WAIT_IO_COMPLETION
+ALIAS: WSA_WAIT_TIMEOUT WAIT_TIMEOUT
+ALIAS: WSA_INFINITE INFINITE
+ALIAS: WSA_IO_PENDING ERROR_IO_PENDING
 
-: INADDR_ANY 0 ; inline
+CONSTANT: INADDR_ANY 0
 
-: INVALID_SOCKET -1 <alien> ; inline
-: SOCKET_ERROR -1 ; inline
+: INVALID_SOCKET ( -- alien ) -1 <alien> ; inline
+CONSTANT: SOCKET_ERROR -1
 
-: SD_RECV 0 ; inline
-: SD_SEND 1 ; inline
-: SD_BOTH 2 ; inline
+CONSTANT: SD_RECV 0
+CONSTANT: SD_SEND 1
+CONSTANT: SD_BOTH 2
 
-: SOL_SOCKET HEX: ffff ; inline
+CONSTANT: SOL_SOCKET HEX: ffff
 
 ! TYPEDEF: uint in_addr_t
 ! C-STRUCT: in_addr
@@ -206,7 +206,7 @@ C-STRUCT: QOS
     { "WSABUF" "ProviderSpecific" } ;
 TYPEDEF: QOS* LPQOS
 
-: MAX_PROTOCOL_CHAIN 7 ; inline
+CONSTANT: MAX_PROTOCOL_CHAIN 7
 
 C-STRUCT: WSAPROTOCOLCHAIN
     { "int" "ChainLen" }
@@ -214,7 +214,7 @@ C-STRUCT: WSAPROTOCOLCHAIN
     { { "DWORD" 7 } "ChainEntries" } ;
 TYPEDEF: WSAPROTOCOLCHAIN* LPWSAPROTOCOLCHAIN
 
-: WSAPROTOCOL_LEN 255 ; inline
+CONSTANT: WSAPROTOCOL_LEN 255
 
 C-STRUCT: WSAPROTOCOL_INFOW
     { "DWORD" "dwServiceFlags1" }
@@ -386,7 +386,7 @@ LIBRARY: mswsock
 FUNCTION: int AcceptEx ( void* listen, void* accept, void* out-buf, int recv-len, int addr-len, int remote-len, void* out-len, void* overlapped ) ;
 FUNCTION: void GetAcceptExSockaddrs ( void* a, int b, int c, int d, void* e, void* f, void* g, void* h ) ;
 
-: SIO_GET_EXTENSION_FUNCTION_POINTER -939524090 ; inline
+CONSTANT: SIO_GET_EXTENSION_FUNCTION_POINTER -939524090
 
 : WSAID_CONNECTEX ( -- GUID )
     "GUID" <c-object>
index 1612b7ec11da72a8bd3629b3f294efec77328100..472488ddc2bd26e728d211eed599c5f35beabe78 100644 (file)
@@ -22,14 +22,14 @@ TUPLE: x-clipboard atom contents ;
     "org.factorcode.Factor.SELECTION" x-atom ;
 
 : convert-selection ( win selection -- )
-    swap >r >r dpy get r> XA_UTF8_STRING selection-property r>
+    swap [ [ dpy get ] dip XA_UTF8_STRING selection-property ] dip
     CurrentTime XConvertSelection drop ;
 
 : snarf-property ( prop-return -- string )
     dup *void* [ *void* ascii alien>string ] [ drop f ] if ;
 
 : window-property ( win prop delete? -- string )
-    >r dpy get -rot 0 -1 r> AnyPropertyType
+    [ [ dpy get ] 2dip 0 -1 ] dip AnyPropertyType
     0 <Atom> 0 <int> 0 <ulong> 0 <ulong> f <void*>
     [ XGetWindowProperty drop ] keep snarf-property ;
 
@@ -58,7 +58,7 @@ TUPLE: x-clipboard atom contents ;
     dpy get swap
     [ XSelectionRequestEvent-requestor ] keep
     [ XSelectionRequestEvent-property ] keep
-    >r "TIMESTAMP" x-atom 32 PropModeReplace r>
+    [ "TIMESTAMP" x-atom 32 PropModeReplace ] dip
     XSelectionRequestEvent-time <int>
     1 XChangeProperty drop ;
 
@@ -71,7 +71,7 @@ TUPLE: x-clipboard atom contents ;
     over XSelectionRequestEvent-selection over set-XSelectionEvent-selection
     over XSelectionRequestEvent-target    over set-XSelectionEvent-target
     over XSelectionRequestEvent-time      over set-XSelectionEvent-time
-    >r dpy get swap XSelectionRequestEvent-requestor 0 0 r>
+    [ dpy get swap XSelectionRequestEvent-requestor 0 0 ] dip
     XSendEvent drop
     flush-dpy ;
 
index 0a389c8034493197fc90037591847e9038e3579e..07650a9da73125655928c472eb9fb9ca669cc6ad 100644 (file)
@@ -36,12 +36,12 @@ GENERIC: selection-request-event ( event window -- )
 GENERIC: client-event ( event window -- )
 
 : next-event ( -- event )
-    dpy get "XEvent" <c-object> dup >r XNextEvent drop r> ;
+    dpy get "XEvent" <c-object> [ XNextEvent drop ] keep ;
 
 : mask-event ( mask -- event )
-    >r dpy get r> "XEvent" <c-object> dup >r XMaskEvent drop r> ;
+    [ dpy get ] dip "XEvent" <c-object> [ XMaskEvent drop ] keep ;
 
-: events-queued ( mode -- n ) >r dpy get r> XEventsQueued ;
+: events-queued ( mode -- n ) [ dpy get ] dip XEventsQueued ;
 
 : wheel? ( event -- ? ) XButtonEvent-button 4 7 between? ;
 
@@ -71,15 +71,15 @@ GENERIC: client-event ( event window -- )
     } case ;
 
 : configured-loc ( event -- dim )
-    dup XConfigureEvent-x swap XConfigureEvent-y 2array ;
+    [ XConfigureEvent-x ] [ XConfigureEvent-y ] bi 2array ;
 
 : configured-dim ( event -- dim )
-    dup XConfigureEvent-width swap XConfigureEvent-height 2array ;
+    [ XConfigureEvent-width ] [ XConfigureEvent-height ] bi 2array ;
 
 : mouse-event-loc ( event -- loc )
-    dup XButtonEvent-x swap XButtonEvent-y 2array ;
+    [ XButtonEvent-x ] [ XButtonEvent-y ] bi 2array ;
 
 : close-box? ( event -- ? )
-    dup XClientMessageEvent-message_type "WM_PROTOCOLS" x-atom =
-    swap XClientMessageEvent-data0 "WM_DELETE_WINDOW" x-atom =
-    and ;
+    [ XClientMessageEvent-message_type "WM_PROTOCOLS" x-atom = ]
+    [ XClientMessageEvent-data0 "WM_DELETE_WINDOW" x-atom = ]
+    bi and ;
index 3c41a7858411f7118c782567501cec67fca1a3c5..67ece9d1c7ec82c2e22b3bc8586a2526f9b67262 100644 (file)
@@ -31,7 +31,7 @@ IN: x11.windows
     "XSetWindowAttributes" <c-object>
     0 over set-XSetWindowAttributes-background_pixel
     0 over set-XSetWindowAttributes-border_pixel
-    [ >r create-colormap r> set-XSetWindowAttributes-colormap ] keep
+    [ [ create-colormap ] dip set-XSetWindowAttributes-colormap ] keep
     event-mask over set-XSetWindowAttributes-event_mask ;
 
 : set-size-hints ( window -- )
@@ -43,12 +43,13 @@ IN: x11.windows
     { 0 0 } = [ drop ] [ set-size-hints ] if ;
 
 : create-window ( loc dim visinfo -- window )
-    pick >r
-    >r >r >r dpy get root get r> first2 r> { 1 1 } vmax first2 0 r>
-    [ XVisualInfo-depth InputOutput ] keep
-    [ XVisualInfo-visual create-window-mask ] keep
-    window-attributes XCreateWindow
-    dup r> auto-position ;
+    pick [
+        [ [ [ dpy get root get ] dip first2 ] dip { 1 1 } vmax first2 0 ] dip
+        [ XVisualInfo-depth InputOutput ] keep
+        [ XVisualInfo-visual create-window-mask ] keep
+        window-attributes XCreateWindow
+        dup
+    ] dip auto-position ;
 
 : glx-window ( loc dim -- window glx )
     GLX_DOUBLEBUFFER 1array choose-visual
index 996932e697a24939d9001fbd5bc8925a1034ce75..f86c24b845eca6f06008f708da1197253e53c48f 100644 (file)
@@ -31,7 +31,6 @@ TYPEDEF: XID KeySym
 TYPEDEF: ulong Atom
 
 TYPEDEF: char* XPointer
-TYPEDEF: void* Display*
 TYPEDEF: void* Screen*
 TYPEDEF: void* GC
 TYPEDEF: void* Visual*
@@ -51,21 +50,27 @@ TYPEDEF: ulong Time
 TYPEDEF: void* Window**
 TYPEDEF: void* Atom**
 
-: <XID> <ulong> ; inline
-: <Window> <XID> ; inline
-: <Drawable> <XID> ; inline
-: <KeySym> <XID> ; inline
-: <Atom> <ulong> ; inline
-
-: *XID *ulong ; inline
-: *Window *XID ; inline
-: *Drawable *XID ; inline
-: *KeySym *XID ; inline
-: *Atom *ulong ; inline
+ALIAS: <XID> <ulong>
+ALIAS: <Window> <XID>
+ALIAS: <Drawable> <XID>
+ALIAS: <KeySym> <XID>
+ALIAS: <Atom> <ulong>
+
+ALIAS: *XID *ulong
+ALIAS: *Window *XID
+ALIAS: *Drawable *XID
+ALIAS: *KeySym *XID
+ALIAS: *Atom *ulong
 !
 ! 2 - Display Functions
 !
 
+! This struct is incomplete
+C-STRUCT: Display
+{ "void*" "ext_data" }
+{ "void*" "free_funcs" }
+{ "int" "fd" } ;
+
 FUNCTION: Display* XOpenDisplay ( void* display_name ) ;
 
 ! 2.2 Obtaining Information about the Display, Image Formats, or Screens
@@ -93,21 +98,21 @@ FUNCTION: int XCloseDisplay ( Display* display ) ;
 
 ! 3.2 - Window Attributes
 
-: CWBackPixmap          1 0 shift ; inline
-: CWBackPixel           1 1 shift ; inline
-: CWBorderPixmap        1 2 shift ; inline
-: CWBorderPixel         1 3 shift ; inline
-: CWBitGravity          1 4 shift ; inline
-: CWWinGravity          1 5 shift ; inline
-: CWBackingStore        1 6 shift ; inline
-: CWBackingPlanes       1 7 shift ; inline
-: CWBackingPixel        1 8 shift ; inline
-: CWOverrideRedirect    1 9 shift ; inline
-: CWSaveUnder           1 10 shift ; inline
-: CWEventMask           1 11 shift ; inline
-: CWDontPropagate       1 12 shift ; inline
-: CWColormap            1 13 shift ; inline
-: CWCursor              1 14 shift ; inline
+: CWBackPixmap       ( -- n ) 0 2^ ; inline
+: CWBackPixel        ( -- n ) 1 2^ ; inline
+: CWBorderPixmap     ( -- n ) 2 2^ ; inline
+: CWBorderPixel      ( -- n ) 3 2^ ; inline
+: CWBitGravity       ( -- n ) 4 2^ ; inline
+: CWWinGravity       ( -- n ) 5 2^ ; inline
+: CWBackingStore     ( -- n ) 6 2^ ; inline
+: CWBackingPlanes    ( -- n ) 7 2^ ; inline
+: CWBackingPixel     ( -- n ) 8 2^ ; inline
+: CWOverrideRedirect ( -- n ) 9 2^ ; inline
+: CWSaveUnder        ( -- n ) 10 2^ ; inline
+: CWEventMask        ( -- n ) 11 2^ ; inline
+: CWDontPropagate    ( -- n ) 12 2^ ; inline
+: CWColormap         ( -- n ) 13 2^ ; inline
+: CWCursor           ( -- n ) 14 2^ ; inline
 
 C-STRUCT: XSetWindowAttributes
         { "Pixmap" "background_pixmap" }
@@ -156,13 +161,13 @@ FUNCTION: int XMapRaised ( Display* display, Window w ) ;
 
 ! 3.7 - Configuring Windows
 
-: CWX                   1 0 shift ; inline
-: CWY                   1 1 shift ; inline
-: CWWidth               1 2 shift ; inline
-: CWHeight              1 3 shift ; inline
-: CWBorderWidth         1 4 shift ; inline
-: CWSibling             1 5 shift ; inline
-: CWStackMode           1 6 shift ; inline
+: CWX           ( -- n ) 0 2^ ; inline
+: CWY           ( -- n ) 1 2^ ; inline
+: CWWidth       ( -- n ) 2 2^ ; inline
+: CWHeight      ( -- n ) 3 2^ ; inline
+: CWBorderWidth ( -- n ) 4 2^ ; inline
+: CWSibling     ( -- n ) 5 2^ ; inline
+: CWStackMode   ( -- n ) 6 2^ ; inline
 
 C-STRUCT: XWindowChanges
         { "int" "x" }
@@ -307,29 +312,29 @@ FUNCTION: Colormap XCreateColormap ( Display* display, Window w, Visual* visual,
 ! 7 - Graphics Context Functions
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: GCFunction            1 0 shift ; inline
-: GCPlaneMask           1 1 shift ; inline
-: GCForeground          1 2 shift ; inline
-: GCBackground          1 3 shift ; inline
-: GCLineWidth           1 4 shift ; inline
-: GCLineStyle           1 5 shift ; inline
-: GCCapStyle            1 6 shift ; inline
-: GCJoinStyle           1 7 shift ; inline
-: GCFillStyle           1 8 shift ; inline
-: GCFillRule            1 9 shift ; inline
-: GCTile                1 10 shift ; inline
-: GCStipple             1 11 shift ; inline
-: GCTileStipXOrigin     1 12 shift ; inline
-: GCTileStipYOrigin     1 13 shift ; inline
-: GCFont                1 14 shift ; inline
-: GCSubwindowMode       1 15 shift ; inline
-: GCGraphicsExposures   1 16 shift ; inline
-: GCClipXOrigin         1 17 shift ; inline
-: GCClipYOrigin         1 18 shift ; inline
-: GCClipMask            1 19 shift ; inline
-: GCDashOffset          1 20 shift ; inline
-: GCDashList            1 21 shift ; inline
-: GCArcMode             1 22 shift ; inline
+: GCFunction          ( -- n ) 0 2^ ; inline
+: GCPlaneMask         ( -- n ) 1 2^ ; inline
+: GCForeground        ( -- n ) 2 2^ ; inline
+: GCBackground        ( -- n ) 3 2^ ; inline
+: GCLineWidth         ( -- n ) 4 2^ ; inline
+: GCLineStyle         ( -- n ) 5 2^ ; inline
+: GCCapStyle          ( -- n ) 6 2^ ; inline
+: GCJoinStyle         ( -- n ) 7 2^ ; inline
+: GCFillStyle         ( -- n ) 8 2^ ; inline
+: GCFillRule          ( -- n ) 9 2^ ; inline
+: GCTile              ( -- n ) 10 2^ ; inline
+: GCStipple           ( -- n ) 11 2^ ; inline
+: GCTileStipXOrigin   ( -- n ) 12 2^ ; inline
+: GCTileStipYOrigin   ( -- n ) 13 2^ ; inline
+: GCFont              ( -- n ) 14 2^ ; inline
+: GCSubwindowMode     ( -- n ) 15 2^ ; inline
+: GCGraphicsExposures ( -- n ) 16 2^ ; inline
+: GCClipXOrigin       ( -- n ) 17 2^ ; inline
+: GCClipYOrigin       ( -- n ) 18 2^ ; inline
+: GCClipMask          ( -- n ) 19 2^ ; inline
+: GCDashOffset        ( -- n ) 20 2^ ; inline
+: GCDashList          ( -- n ) 21 2^ ; inline
+: GCArcMode           ( -- n ) 22 2^ ; inline
 
 : GXclear               HEX: 0 ; inline
 : GXand                 HEX: 1 ; inline
@@ -500,32 +505,32 @@ FUNCTION: Status XKillClient ( Display* display, XID resource ) ;
 
 ! 10.3 - Event Masks
 
-: NoEventMask                   0 ; inline
-: KeyPressMask                  1 0 shift ; inline
-: KeyReleaseMask                1 1 shift ; inline
-: ButtonPressMask               1 2 shift ; inline
-: ButtonReleaseMask             1 3 shift ; inline
-: EnterWindowMask               1 4 shift ; inline
-: LeaveWindowMask               1 5 shift ; inline
-: PointerMotionMask             1 6 shift ; inline
-: PointerMotionHintMask         1 7 shift ; inline
-: Button1MotionMask             1 8 shift ; inline
-: Button2MotionMask             1 9 shift ; inline
-: Button3MotionMask             1 10 shift ; inline
-: Button4MotionMask             1 11 shift ; inline
-: Button5MotionMask             1 12 shift ; inline
-: ButtonMotionMask              1 13 shift ; inline
-: KeymapStateMask               1 14 shift ; inline
-: ExposureMask                  1 15 shift ; inline
-: VisibilityChangeMask          1 16 shift ; inline
-: StructureNotifyMask           1 17 shift ; inline
-: ResizeRedirectMask            1 18 shift ; inline
-: SubstructureNotifyMask        1 19 shift ; inline
-: SubstructureRedirectMask      1 20 shift ; inline
-: FocusChangeMask               1 21 shift ; inline
-: PropertyChangeMask            1 22 shift ; inline
-: ColormapChangeMask            1 23 shift ; inline
-: OwnerGrabButtonMask           1 24 shift ; inline
+: NoEventMask              ( -- n ) 0 ; inline
+: KeyPressMask             ( -- n ) 0 2^ ; inline
+: KeyReleaseMask           ( -- n ) 1 2^ ; inline
+: ButtonPressMask          ( -- n ) 2 2^ ; inline
+: ButtonReleaseMask        ( -- n ) 3 2^ ; inline
+: EnterWindowMask          ( -- n ) 4 2^ ; inline
+: LeaveWindowMask          ( -- n ) 5 2^ ; inline
+: PointerMotionMask        ( -- n ) 6 2^ ; inline
+: PointerMotionHintMask    ( -- n ) 7 2^ ; inline
+: Button1MotionMask        ( -- n ) 8 2^ ; inline
+: Button2MotionMask        ( -- n ) 9 2^ ; inline
+: Button3MotionMask        ( -- n ) 10 2^ ; inline
+: Button4MotionMask        ( -- n ) 11 2^ ; inline
+: Button5MotionMask        ( -- n ) 12 2^ ; inline
+: ButtonMotionMask         ( -- n ) 13 2^ ; inline
+: KeymapStateMask          ( -- n ) 14 2^ ; inline
+: ExposureMask             ( -- n ) 15 2^ ; inline
+: VisibilityChangeMask     ( -- n ) 16 2^ ; inline
+: StructureNotifyMask      ( -- n ) 17 2^ ; inline
+: ResizeRedirectMask       ( -- n ) 18 2^ ; inline
+: SubstructureNotifyMask   ( -- n ) 19 2^ ; inline
+: SubstructureRedirectMask ( -- n ) 20 2^ ; inline
+: FocusChangeMask          ( -- n ) 21 2^ ; inline
+: PropertyChangeMask       ( -- n ) 22 2^ ; inline
+: ColormapChangeMask       ( -- n ) 23 2^ ; inline
+: OwnerGrabButtonMask      ( -- n ) 24 2^ ; inline
 
 : KeyPress              2 ; inline
 : KeyRelease            3 ; inline
@@ -579,20 +584,20 @@ C-STRUCT: XAnyEvent
 : Button4 4 ; inline
 : Button5 5 ; inline
 
-: Button1Mask           1 8  shift ; inline
-: Button2Mask           1 9  shift ; inline
-: Button3Mask           1 10 shift ; inline
-: Button4Mask           1 11 shift ; inline
-: Button5Mask           1 12 shift ; inline
-
-: ShiftMask     1 0 shift ; inline
-: LockMask      1 1 shift ; inline
-: ControlMask   1 2 shift ; inline
-: Mod1Mask      1 3 shift ; inline
-: Mod2Mask      1 4 shift ; inline
-: Mod3Mask      1 5 shift ; inline
-: Mod4Mask      1 6 shift ; inline
-: Mod5Mask      1 7 shift ; inline
+: Button1Mask ( -- n ) 1 8  shift ; inline
+: Button2Mask ( -- n ) 1 9  shift ; inline
+: Button3Mask ( -- n ) 1 10 shift ; inline
+: Button4Mask ( -- n ) 1 11 shift ; inline
+: Button5Mask ( -- n ) 1 12 shift ; inline
+
+: ShiftMask   ( -- n ) 1 0 shift ; inline
+: LockMask    ( -- n ) 1 1 shift ; inline
+: ControlMask ( -- n ) 1 2 shift ; inline
+: Mod1Mask    ( -- n ) 1 3 shift ; inline
+: Mod2Mask    ( -- n ) 1 4 shift ; inline
+: Mod3Mask    ( -- n ) 1 5 shift ; inline
+: Mod4Mask    ( -- n ) 1 6 shift ; inline
+: Mod5Mask    ( -- n ) 1 7 shift ; inline
 
 C-STRUCT: XButtonEvent
         { "int" "type" }
@@ -1316,15 +1321,15 @@ FUNCTION: int XBell ( Display* display, int percent ) ;
 
 ! !!! INPUT METHODS
 
-: XIMPreeditArea      HEX: 0001 ;
-: XIMPreeditCallbacks HEX: 0002 ;
-: XIMPreeditPosition  HEX: 0004 ;
-: XIMPreeditNothing   HEX: 0008 ;
-: XIMPreeditNone      HEX: 0010 ;
-: XIMStatusArea       HEX: 0100 ;
-: XIMStatusCallbacks  HEX: 0200 ;
-: XIMStatusNothing    HEX: 0400 ;
-: XIMStatusNone       HEX: 0800 ;
+: XIMPreeditArea      HEX: 0001 ; inline
+: XIMPreeditCallbacks HEX: 0002 ; inline
+: XIMPreeditPosition  HEX: 0004 ; inline
+: XIMPreeditNothing   HEX: 0008 ; inline
+: XIMPreeditNone      HEX: 0010 ; inline
+: XIMStatusArea       HEX: 0100 ; inline
+: XIMStatusCallbacks  HEX: 0200 ; inline
+: XIMStatusNothing    HEX: 0400 ; inline
+: XIMStatusNone       HEX: 0800 ; inline
 
 : XNVaNestedList "XNVaNestedList" ;
 : XNQueryInputStyle "queryInputStyle" ;
index 836a85d52de6fb5716569da1a83fc9393f41e216..e2be36c4504c0d18f05300f18088067362373309 100644 (file)
@@ -10,7 +10,7 @@ USING: kernel hashtables xml-rpc xml calendar sequences
        { "divide" [ / ] } } ;
 
 : apply-function ( name args -- {number} )
-    >r functions hash r> first2 rot call 1array ;
+    [ functions hash ] dip first2 rot call 1array ;
 
 : problem>solution ( xml-doc -- xml-doc )
     receive-rpc dup rpc-method-name swap rpc-method-params
index 8c20df1fd02d93349777e43a43fb495638d55456..d812e8503b872814842581c884e17860bf64e0f6 100644 (file)
@@ -21,7 +21,7 @@ HELP: base64
 { $see-also <base64> } ;
 
 HELP: <rpc-method>
-{ $values { "name" "a string" } { "params" "a sequence" } }
+{ $values { "name" "a string" } { "params" "a sequence" } { "rpc-method" rpc-method } }
 { $description "creates a tuple reprsenting a method call which can be translated using send-rpc into an XML-RPC document" }
 { $see-also rpc-method <rpc-response> <rpc-fault> } ;
 
@@ -30,7 +30,7 @@ HELP: rpc-method
 { $see-also <rpc-method> rpc-response rpc-fault } ;
 
 HELP: <rpc-response>
-{ $values { "params" "a sequence" } }
+{ $values { "params" "a sequence" } { "rpc-response" rpc-response } }
 { $description "creates a tuple representing a data response in XML-RPC" }
 { $see-also rpc-response <rpc-method> <rpc-fault> } ;
 
@@ -39,7 +39,7 @@ HELP: rpc-response
 { $see-also <rpc-response> rpc-method rpc-fault } ;
 
 HELP: <rpc-fault>
-{ $values { "code" "an integer" } { "string" "a string" } }
+{ $values { "code" "an integer" } { "string" "a string" } { "rpc-fault" rpc-fault } }
 { $description "creates a tuple representing an exception in RPC, to be returned to the caller. The code is a number representing what type of error it is, and the string is a description" }
 { $see-also rpc-fault <rpc-method> <rpc-response> } ;
 
index 9472f5e09d5cb5a795e1c4c207f6713b5a325b88..602fb90172b64b7fb74aa2da06dc7148f1aa26e5 100644 (file)
@@ -55,7 +55,7 @@ M: base64 item>xml
     "params" build-tag* ;
 
 : method-call ( name seq -- xml )
-    params >r "methodName" build-tag r>
+    params [ "methodName" build-tag ] dip
     2array "methodCall" build-tag* build-xml ;
 
 : return-params ( seq -- xml )
@@ -117,7 +117,7 @@ TAG: boolean xml>item
 : unstruct-member ( tag -- )
     children-tags first2
     first-child-tag xml>item
-    >r children>string r> swap set ;
+    [ children>string ] dip swap set ;
 
 TAG: struct xml>item
     [
@@ -158,10 +158,10 @@ TAG: array xml>item
 
 : post-rpc ( rpc url -- rpc )
     ! This needs to do something in the event of an error
-    >r send-rpc r> http-post nip string>xml receive-rpc ;
+    [ send-rpc ] dip http-post nip string>xml receive-rpc ;
 
 : invoke-method ( params method url -- )
-    >r swap <rpc-method> r> post-rpc ;
+    [ swap <rpc-method> ] dip post-rpc ;
 
 : put-http-response ( string -- )
     "HTTP/1.1 200 OK\nConnection: close\nContent-Length: " write
index 05dd85251dd032602a1e941285746459165c28ad..16a817d62846351f2b2a95807380cac03fa392c8 100644 (file)
@@ -112,8 +112,8 @@ HELP: name
 { $class-description "represents an XML name, with the fields space (a string representing the namespace, as written in the document, tag (a string of the actual name of the tag) and url (a string of the URL that the namespace points to)" }\r
 { $see-also <name> tag } ;\r
 \r
-HELP: <name> ( space tag url -- name )\r
-{ $values { "space" "a string" } { "tag" "a string" } { "url" "a string" }\r
+HELP: <name>\r
+{ $values { "space" "a string" } { "main" "a string" } { "url" "a string" }\r
     { "name" "an XML tag name" } }\r
 { $description "creates a name tuple with the name-space space and the tag-name tag and the tag-url url." }\r
 { $see-also name <tag> } ;\r
@@ -135,7 +135,7 @@ HELP: xml
 \r
 HELP: <xml>\r
 { $values { "prolog" "an XML prolog" } { "before" "a sequence of XML elements" }\r
-{ "main" tag } { "after" "a sequence of XML elements" } { "xml" "an XML document" } }\r
+{ "body" tag } { "after" "a sequence of XML elements" } { "xml" "an XML document" } }\r
 { $description "creates an XML document, delegating to the main tag, with the specified prolog, before, and after" }\r
 { $see-also xml <tag> } ;\r
 \r
@@ -143,7 +143,7 @@ HELP: prolog
 { $class-description "represents an XML prolog, with the tuple fields version (containing \"1.0\" or \"1.1\"), encoding (a string representing the encoding type), and standalone (t or f, whether the document is standalone without external entities)" }\r
 { $see-also <prolog> xml } ;\r
 \r
-HELP: <prolog> ( version encoding standalone -- prolog )\r
+HELP: <prolog>\r
 { $values { "version" "a string, 1.0 or 1.1" }\r
 { "encoding" "a string" } { "standalone" "a boolean" } { "prolog" "an XML prolog" } }\r
 { $description "creates an XML prolog tuple" }\r
@@ -153,7 +153,7 @@ HELP: comment
 { $class-description "represents a comment in XML. Has one slot, text, which contains the string of the comment" }\r
 { $see-also <comment> } ;\r
 \r
-HELP: <comment> ( text -- comment )\r
+HELP: <comment>\r
 { $values { "text" "a string" } { "comment" "a comment" } }\r
 { $description "creates an XML comment tuple" }\r
 { $see-also comment } ;\r
@@ -162,7 +162,7 @@ HELP: instruction
 { $class-description "represents an XML instruction, such as <?xsl stylesheet='foo.xml'?>. Contains one slot, text, which contains the string between the question marks." }\r
 { $see-also <instruction> } ;\r
 \r
-HELP: <instruction> ( text -- instruction )\r
+HELP: <instruction>\r
 { $values { "text" "a string" } { "instruction" "an XML instruction" } }\r
 { $description "creates an XML parsing instruction, such as <?xsl stylesheet='foo.xml'?>." }\r
 { $see-also instruction } ;\r
index 16da4be1d3eefeab1d95a3ed6c0147c139c131f5..f8f1788bcf2b9fc234504a1067c742c3a256216c 100644 (file)
@@ -8,12 +8,13 @@ TUPLE: mode file file-name-glob first-line-glob ;
 <TAGS: parse-mode-tag ( modes tag -- )
 
 TAG: MODE
-    "NAME" over at >r
-    mode new {
-        { "FILE" f (>>file) }
-        { "FILE_NAME_GLOB" f (>>file-name-glob) }
-        { "FIRST_LINE_GLOB" f (>>first-line-glob) }
-    } init-from-tag r>
+    "NAME" over at [
+        mode new {
+            { "FILE" f (>>file) }
+            { "FILE_NAME_GLOB" f (>>file-name-glob) }
+            { "FIRST_LINE_GLOB" f (>>first-line-glob) }
+        } init-from-tag
+    ] dip
     rot set-at ;
 
 TAGS>
@@ -56,7 +57,7 @@ SYMBOL: rule-sets
     [ get-rule-set nip swap (>>delegate) ] [ 2drop ] if ;
 
 : each-rule ( rule-set quot -- )
-    >r rules>> values concat r> each ; inline
+    [ rules>> values concat ] dip each ; inline
 
 : resolve-delegates ( ruleset -- )
     [ resolve-delegate ] each-rule ;
@@ -65,8 +66,7 @@ SYMBOL: rule-sets
     over [ dupd update ] [ nip clone ] if ;
 
 : import-keywords ( parent child -- )
-    over >r [ keywords>> ] bi@ ?update
-    r> (>>keywords) ;
+    over [ [ keywords>> ] bi@ ?update ] dip (>>keywords) ;
 
 : import-rules ( parent child -- )
     swap [ add-rule ] curry each-rule ;
@@ -115,5 +115,5 @@ ERROR: mutually-recursive-rulesets ruleset ;
 
 : find-mode ( file-name first-line -- mode )
     modes
-    [ nip >r 2dup r> suitable-mode? ] assoc-find
-    2drop >r 2drop r> [ "text" ] unless* ;
+    [ nip [ 2dup ] dip suitable-mode? ] assoc-find
+    2drop [ 2drop ] dip [ "text" ] unless* ;
index 9115b1389bc323a69caeaf32b07894f7c2173ad7..39ff627b8460748ba10ea75ba273a3fb7fce32a7 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.\r
 ! See http://factorcode.org/license.txt for BSD license.\r
-USING: io io.files io.encodings.utf8 namespaces http.server\r
-http.server.responses http.server.static http xmode.code2html\r
-kernel sequences accessors fry ;\r
+USING: io io.files io.pathnames io.encodings.utf8 namespaces\r
+http.server http.server.responses http.server.static http\r
+xmode.code2html kernel sequences accessors fry ;\r
 IN: xmode.code2html.responder\r
 \r
 : <sources> ( root -- responder )\r
index cbebe090c33676bf68372c39f8c86c0ec7736612..9b53000e026658a79c6639d3a3a4ef9d850ee715 100644 (file)
@@ -101,4 +101,4 @@ TAGS>
 : init-eol-span-tag ( -- ) [ drop init-eol-span ] , ;
 
 : parse-keyword-tag ( tag keyword-map -- )
-    >r dup main>> string>token swap children>string r> set-at ;
+    [ dup main>> string>token swap children>string ] dip set-at ;
index f777eaa18ca4b5d9d63a4b8b5afc1e5dfe132042..c37d60df147f6dbda49b0b0c719243657aa481c0 100644 (file)
@@ -69,7 +69,7 @@ M: string-matcher text-matches?
     ] keep string>> length and ;
 
 M: regexp text-matches?
-    >r >string r> match-head ;
+    [ >string ] dip match-head ;
 
 : rule-start-matches? ( rule -- match-count/f )
     dup start>> tuck swap can-match-here? [
@@ -97,7 +97,7 @@ DEFER: get-rules
     f swap rules>> at ?push-all ;
 
 : get-char-rules ( vector/f char ruleset -- vector/f )
-    >r ch>upper r> rules>> at ?push-all ;
+    [ ch>upper ] dip rules>> at ?push-all ;
 
 : get-rules ( char ruleset -- seq )
     f -rot [ get-char-rules ] keep get-always-rules ;
index 096230ff4e3577bc604c6f14e6f4950cfdfd9e0c..44d3a0285e41a040723c821896cdfb23e16d12c5 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: xmode.marker.context xmode.rules symbols accessors
+USING: xmode.marker.context xmode.rules accessors
 xmode.tokens namespaces make kernel sequences assocs math ;
 IN: xmode.marker.state
 
@@ -20,14 +20,14 @@ SYMBOLS: line last-offset position context
     current-rule-set keywords>> ;
 
 : token, ( from to id -- )
-    2over = [ 3drop ] [ >r line get subseq r> <token> , ] if ;
+    2over = [ 3drop ] [ [ line get subseq ] dip <token> , ] if ;
 
 : prev-token, ( id -- )
-    >r last-offset get position get r> token,
+    [ last-offset get position get ] dip token,
     position get last-offset set ;
 
 : next-token, ( len id -- )
-    >r position get 2dup + r> token,
+    [ position get 2dup + ] dip token,
     position get + dup 1- position set last-offset set ;
 
 : push-context ( rules -- )
index e4f12bcc49314d0a9debc17ef90b5dbea6a26a5a..adc43d7bb6b6364521eb220c564af61dfbcd6436 100644 (file)
@@ -41,7 +41,7 @@ MEMO: standard-rule-set ( id -- ruleset )
 
 : ?push-all ( seq1 seq2 -- seq1+seq2 )
     [
-        over [ >r V{ } like r> over push-all ] [ nip ] if
+        over [ [ V{ } like ] dip over push-all ] [ nip ] if
     ] when* ;
 
 : rule-set-no-word-sep* ( ruleset -- str )
@@ -107,8 +107,7 @@ M: regexp text-hash-char drop f ;
     text-hash-char [ suffix ] when* ;
 
 : add-rule ( rule ruleset -- )
-    >r dup rule-chars* >upper swap
-    r> rules>> inverted-index ;
+    [ dup rule-chars* >upper swap ] dip rules>> inverted-index ;
 
 : add-escape-rule ( string ruleset -- )
     over [
index b8917529d6d9d808a7a84dad513082abca471a94..945f4bb0465a8ebf290ea45f7bd474be93dbff9d 100644 (file)
@@ -1,4 +1,5 @@
-USING: accessors parser words sequences namespaces kernel assocs
+USING: accessors parser words words.symbol
+sequences namespaces kernel assocs
 compiler.units ;
 IN: xmode.tokens
 
index 23e4195158b05dc0d9e90fc647001de05e727ee5..b5a2f6eb98eeacc068575c6b44ef4a31c1d0131a 100644 (file)
@@ -2,7 +2,7 @@ USING: accessors sequences assocs kernel quotations namespaces
 xml.data xml.utilities combinators macros parser lexer words fry ;
 IN: xmode.utilities
 
-: implies [ not ] dip or ; inline
+: implies ( x y -- z ) [ not ] dip or ; inline
 
 : child-tags ( tag -- seq ) children>> [ tag? ] filter ;
 
@@ -53,5 +53,5 @@ SYMBOL: tag-handler-word
 
 : TAGS>
     tag-handler-word get
-    tag-handlers get >alist [ >r dup main>> r> case ] curry
+    tag-handlers get >alist [ [ dup main>> ] dip case ] curry
     define ; parsing
index 6a5dfe30dff2db2aa510a2cc260a8f08845fe930..c97e36e889cc323ed885ea2126a7e60518f23d5e 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2004, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors assocs kernel math namespaces sequences system
-kernel.private byte-arrays arrays ;
+kernel.private byte-arrays arrays init ;
 IN: alien
 
 ! Some predicate classes used by the compiler for optimization
@@ -72,3 +72,9 @@ ERROR: alien-invoke-error library symbol ;
 
 : alien-invoke ( ... return library function parameters -- ... )
     2over alien-invoke-error ;
+
+! Callbacks are registered in a global hashtable. If you clear
+! this hashtable, they will all be blown away by code GC, beware.
+SYMBOL: callbacks
+
+[ H{ } clone callbacks set-global ] "alien" add-init-hook
index 320e370ec980bad11cc5363e10104cdcc05d70e3..748300ef0f8d20e0020249fbcfe5116eecd64bbb 100644 (file)
@@ -90,7 +90,7 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
     ] if ; inline recursive
 
 : assoc-stack ( key seq -- value )
-    dup length 1- swap (assoc-stack) ; flushable
+    [ length 1- ] keep (assoc-stack) ; flushable
 
 : assoc-subset? ( assoc1 assoc2 -- ? )
     [ swapd at* [ = ] [ 2drop f ] if ] curry assoc-all? ;
@@ -122,14 +122,14 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
 : remove-all ( assoc seq -- subseq )
     swap [ key? not ] curry filter ;
 
-: (substitute)
+: substituter ( assoc -- quot )
     [ dupd at* [ nip ] [ drop ] if ] curry ; inline
 
 : substitute-here ( seq assoc -- )
-    (substitute) change-each ;
+    substituter change-each ;
 
 : substitute ( seq assoc -- newseq )
-    (substitute) map ;
+    substituter map ;
 
 : cache ( key assoc quot -- value )
     2over at* [
index 6cc97531a4a790db5efb4eb24d289feaed8d37b6..61d178ccf857192e092d9ff9f44c7cd30a47d8e8 100644 (file)
@@ -287,11 +287,11 @@ tuple
 
 "((empty))" "hashtables.private" create
 "tombstone" "hashtables.private" lookup f
-2array >tuple 1quotation define-inline
+2array >tuple 1quotation (( -- value )) define-inline
 
 "((tombstone))" "hashtables.private" create
 "tombstone" "hashtables.private" lookup t
-2array >tuple 1quotation define-inline
+2array >tuple 1quotation (( -- value )) define-inline
 
 ! Some tuple classes
 "curry" "kernel" create
@@ -380,12 +380,11 @@ tuple
     { "over" "kernel" }
     { "pick" "kernel" }
     { "swap" "kernel" }
-    { ">r" "kernel" }
-    { "r>" "kernel" }
     { "eq?" "kernel" }
     { "tag" "kernel.private" }
     { "slot" "slots.private" }
     { "get-local" "locals.backend" }
+    { "load-local" "locals.backend" }
     { "drop-locals" "locals.backend" }
 } [ make-sub-primitive ] assoc-each
 
index badc1f5218165ab1686ad9b8f7883e07f06c043f..654a8f5f3468b61f29b1b3b4b601350b9ec43081 100644 (file)
@@ -1,6 +1,6 @@
-! Copyright (C) 2007 Slava Pestov.
+! Copyright (C) 2007, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: words sequences vocabs kernel ;
+USING: words words.symbol sequences vocabs kernel ;
 IN: bootstrap.syntax
 
 "syntax" create-vocab drop
@@ -40,7 +40,10 @@ IN: bootstrap.syntax
     "PRIVATE>"
     "SBUF\""
     "SINGLETON:"
+    "SINGLETONS:"
     "SYMBOL:"
+    "SYMBOLS:"
+    "CONSTANT:"
     "TUPLE:"
     "SLOT:"
     "T{"
@@ -48,6 +51,12 @@ IN: bootstrap.syntax
     "INTERSECTION:"
     "USE:"
     "USING:"
+    "QUALIFIED:"
+    "QUALIFIED-WITH:"
+    "FROM:"
+    "EXCLUDE:"
+    "RENAME:"
+    "ALIAS:"
     "V{"
     "W{"
     "["
index 699d93b8b4f994a9fbaa186b3ab03e74ae4f9b07..a3662fcaa62e3f6b86e6ed0dbeec441b7188273f 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (c) 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
-USING: sequences math.parser io io.encodings.binary io.files
+USING: sequences math.parser io io.backend io.files
 kernel ;
 IN: checksums
 
@@ -19,7 +19,10 @@ M: checksum checksum-lines
     [ B{ CHAR: \n } join ] dip checksum-bytes ;
 
 : checksum-file ( path checksum -- value )
-    [ binary <file-reader> ] dip checksum-stream ;
+    #! normalize-path (file-reader) is equivalen to
+    #! binary <file-reader>. We use the lower-level form
+    #! so that we can move io.encodings.binary to basis/.
+    [ normalize-path (file-reader) ] dip checksum-stream ;
 
 : hex-string ( seq -- str )
     [ >hex 2 CHAR: 0 pad-left ] { } map-as concat ;
index 7cff22de19bedd11402b1d1f6de7d504cce40b33..d373a96f39244c8d8881650849d76e7eacbb2c83 100644 (file)
@@ -24,9 +24,11 @@ SINGLETON: crc32
 
 INSTANCE: crc32 checksum
 
-: init-crc32 drop [ HEX: ffffffff dup ] dip ; inline
+: init-crc32 ( input checksum -- x y input )
+    drop [ HEX: ffffffff dup ] dip ; inline
 
-: finish-crc32 bitxor 4 >be ; inline
+: finish-crc32 ( x y -- bytes )
+    bitxor 4 >be ; inline
 
 M: crc32 checksum-bytes
     init-crc32
index 2ce4b934c87f991165baf498c4c267e51d06c3d1..acff3d57e5f818870906270cefcea8bd48bc9ae7 100644 (file)
@@ -1,8 +1,9 @@
 ! Copyright (C) 2004, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays definitions assocs kernel kernel.private
-slots.private namespaces make sequences strings words vectors
-math quotations combinators sorting effects graphs vocabs sets ;
+slots.private namespaces make sequences strings words words.symbol
+vectors math quotations combinators sorting effects graphs
+vocabs sets ;
 IN: classes
 
 SYMBOL: class<=-cache
index f647b006d97524cceb3549ba4575731dcf7b8fac..d6911576dd97fc16378868dff90556d69565c352 100644 (file)
@@ -4,6 +4,7 @@ IN: classes.singleton
 ARTICLE: "singletons" "Singleton classes"
 "A singleton is a class with only one instance and with no state."
 { $subsection POSTPONE: SINGLETON: }
+{ $subsection POSTPONE: SINGLETONS: }
 { $subsection define-singleton-class }
 "The set of all singleton classes is itself a class:"
 { $subsection singleton-class? }
index d9464399a94ee4a7a9253a501f7f80779ecbf304..3ee9b8e40b3a5e82b5a4d82ffd12b64d09bc033b 100644 (file)
@@ -290,6 +290,12 @@ M: tuple-class (define-tuple-class)
         tri* define-declared
     ] 3tri ;
 
+: boa-effect ( class -- effect )
+    [ all-slots [ name>> ] map ] [ name>> 1array ] bi <effect> ;
+
+: define-boa-word ( word class -- )
+    [ [ boa ] curry ] [ boa-effect ] bi define-inline ;
+
 M: tuple-class reset-class
     [
         dup "slots" word-prop [
index 6edec815da18e18c460578e5a983eeca8f6077fd..29a2e7a8bd5678d1066b354b1bf22ac8af2214b7 100644 (file)
@@ -136,7 +136,7 @@ ERROR: no-case ;
 
 ! recursive-hashcode
 : recursive-hashcode ( n obj quot -- code )
-    pick 0 <= [ 3drop 0 ] [ rot 1- -rot call ] if ; inline
+    pick 0 <= [ 3drop 0 ] [ [ 1- ] 2dip call ] if ; inline
 
 ! These go here, not in sequences and hashtables, since those
 ! two cannot depend on us
index cb896dbf53f0356adc3c2f3abfce3f4ba834a2e4..aa4f8e329d4f1eb01f87d0b50bd3257d7a9df499 100644 (file)
@@ -1,6 +1,6 @@
 IN: compiler.errors
 USING: help.markup help.syntax vocabs.loader words io
-quotations ;
+quotations words.symbol ;
 
 ARTICLE: "compiler-errors" "Compiler warnings and errors"
 "The compiler saves various notifications in a global variable:"
index 363248216281cc009a825933b18bb82576dd9fb9..ea3470feb3419ea74873ebed2a3ab9d1b09d9c3f 100644 (file)
@@ -221,10 +221,6 @@ HELP: assert-depth
 { $values { "quot" "a quotation" } }
 { $description "Runs a quotation. Throws an error if the quotation attempts to take input values from the stack, or leave outputs on the stack." } ;
 
-HELP: <continuation>
-{ $description "Constructs a new continuation." }
-{ $notes "User code should call " { $link continuation } " instead." } ;
-
 HELP: attempt-all
 { $values
      { "seq" sequence } { "quot" quotation }
index db6b2461b53653ab228ba98051e27b5ccb4bc338..8a06653eb8af49430dfece15ecb7b67b4a17a63e 100644 (file)
@@ -44,8 +44,6 @@ M: effect effect>string ( effect -- string )
 
 GENERIC: stack-effect ( word -- effect/f )
 
-M: symbol stack-effect drop (( -- symbol )) ;
-
 M: word stack-effect
     { "declared-effect" "inferred-effect" }
     swap props>> [ at ] curry map [ ] find nip ;
index 300bd44fb4abca12ae175cbba52b5fdfd9a2f9f5..9ace1a01f4f63efb02abf938fd43aa106f4f3fda 100644 (file)
@@ -33,7 +33,7 @@ ERROR: no-method object generic ;
     ] change-at ;
 
 : flatten-method ( class method assoc -- )
-    [ dup flatten-class keys swap ] 2dip [
+    [ [ flatten-class keys ] keep ] 2dip [
         [ spin ] dip push-method
     ] 3curry each ;
 
index 3c487af0a54245e5e82631f282af97d4bb3b5497..c4970f98bd249ec8bf905d02ff30b5e3d6e114f3 100644 (file)
@@ -1,7 +1,5 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-
-! Some low-level code used by vectors and string buffers.
 USING: accessors kernel kernel.private math math.private
 sequences sequences.private ;
 IN: growable
@@ -22,7 +20,7 @@ M: growable set-nth-unsafe underlying>> set-nth-unsafe ;
 
 : contract ( len seq -- )
     [ length ] keep
-    [ 0 -rot set-nth-unsafe ] curry
+    [ [ 0 ] 2dip set-nth-unsafe ] curry
     (each-integer) ; inline
 
 : growable-check ( n seq -- n seq )
index 8663f25a7032ba919833130355f5ff6f77486bfc..9268340c792e4cf735b90f9765e1fbd97a58b3bc 100644 (file)
@@ -77,7 +77,7 @@ TUPLE: hashtable
     [ deleted>> 10 fixnum*fast ] [ count>> ] bi fixnum> ; inline
 
 : grow-hash ( hash -- )
-    [ dup >alist swap assoc-size 1+ ] keep
+    [ [ >alist ] [ assoc-size 1+ ] bi ] keep
     [ reset-hash ] keep
     swap (rehash) ; inline
 
index 5456f2251ca61cfe782f10393dd2236fe9cb2fa5..e2c6c3d4647709e3a96eb791ae2f304c214af8e4 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: init kernel system namespaces io io.encodings
-io.encodings.utf8 init assocs splitting ;
+io.encodings.utf8 init assocs splitting alien ;
 IN: io.backend
 
 SYMBOL: io-backend
@@ -32,5 +32,7 @@ M: object normalize-directory normalize-path ;
     io-backend set-global init-io init-stdio
     "io.files" init-hooks get at call ;
 
+! Note that we have 'alien' in our using list so that the alien
+! init hook runs before this one.
 [ init-io embedded? [ init-stdio ] unless ]
 "io.backend" add-init-hook
index d165ad3138cc7c5e939b25bcc53c7acac2915f8e..94d211547870bc76918336d5a5c48b1af54b5188 100644 (file)
@@ -32,9 +32,9 @@ M: object <decoder> f decoder boa ;
 
 <PRIVATE
 
-: cr+ t >>cr drop ; inline
+: cr+ ( stream -- ) t >>cr drop ; inline
 
-: cr- f >>cr drop ; inline
+: cr- ( stream -- ) f >>cr drop ; inline
 
 : >decoder< ( decoder -- stream encoding )
     [ stream>> ] [ code>> ] bi ; inline
index 80b515b13f32bf57c4bc3c6ca4d3a9903f2dc110..7948a2e9120aa401720353667d46c510f0444027 100644 (file)
@@ -2,7 +2,7 @@ USING: help.markup help.syntax io strings arrays io.backend
 io.files.private quotations ;
 IN: io.files
 
-ARTICLE: "file-streams" "Reading and writing files"
+ARTICLE: "io.files" "Reading and writing files"
 "File streams:"
 { $subsection <file-reader> }
 { $subsection <file-writer> }
@@ -17,182 +17,10 @@ ARTICLE: "file-streams" "Reading and writing files"
 { $subsection with-file-writer }
 { $subsection with-file-appender } ;
 
-ARTICLE: "pathnames" "Pathname manipulation"
-"Pathname manipulation:"
-{ $subsection parent-directory }
-{ $subsection file-name }
-{ $subsection last-path-separator }
-{ $subsection append-path }
-"Pathnames relative to Factor's temporary files directory:"
-{ $subsection temp-directory }
-{ $subsection temp-file }
-"Pathname presentations:"
-{ $subsection pathname }
-{ $subsection <pathname> } ;
-
-ARTICLE: "symbolic-links" "Symbolic links"
-"Reading and creating links:"
-{ $subsection read-link }
-{ $subsection make-link }
-"Copying links:"
-{ $subsection copy-link }
-"Not all operating systems support symbolic links."
-{ $see-also link-info } ;
-
-ARTICLE: "current-directory" "Current working directory"
-"File system I/O operations use the value of a variable to resolve relative pathnames:"
-{ $subsection current-directory }
-"This variable can be changed with a pair of words:"
-{ $subsection set-current-directory }
-{ $subsection with-directory }
-"This variable is independent of the operating system notion of ``current working directory''. While all Factor I/O operations use the variable and not the operating system's value, care must be taken when making FFI calls which expect a pathname. The first option is to resolve relative paths:"
-{ $subsection (normalize-path) }
-"The second is to change the working directory of the current process:"
-{ $subsection cd }
-{ $subsection cwd } ;
-
-ARTICLE: "directories" "Directories"
-"Home directory:"
-{ $subsection home }
-"Directory listing:"
-{ $subsection directory-entries }
-{ $subsection directory-files }
-{ $subsection with-directory-files }
-"Creating directories:"
-{ $subsection make-directory }
-{ $subsection make-directories }
-{ $subsection "current-directory" } ;
-
-ARTICLE: "file-types" "File Types"
-"Platform-independent types:"
-{ $subsection +regular-file+ }
-{ $subsection +directory+ }
-"Platform-specific types:"
-{ $subsection +character-device+ }
-{ $subsection +block-device+ }
-{ $subsection +fifo+ }
-{ $subsection +symbolic-link+ }
-{ $subsection +socket+ }
-{ $subsection +unknown+ } ;
-
-ARTICLE: "fs-meta" "File metadata"
-"Querying file-system metadata:"
-{ $subsection file-info }
-{ $subsection link-info }
-{ $subsection exists? }
-{ $subsection directory? }
-
-"File types:"
-{ $subsection "file-types" } ;
-
-ARTICLE: "delete-move-copy" "Deleting, moving, copying files"
-"Operations for deleting and copying files come in two forms:"
-{ $list
-    { "Words named " { $snippet { $emphasis "operation" } "-file" } " which work on regular files only." }
-    { "Words named " { $snippet { $emphasis "operation" } "-tree" } " works on directory trees recursively, and also accepts regular files." }
-}
-"The operations for moving and copying files come in three flavors:"
-{ $list
-    { "A word named " { $snippet { $emphasis "operation" } } " which takes a source and destination path." }
-    { "A word named " { $snippet { $emphasis "operation" } "-into" } " which takes a source path and destination directory. The destination file will be stored in the destination directory and will have the same file name as the source path." }
-    { "A word named " { $snippet { $emphasis "operation" } "s-into" } " which takes a sequence of source paths and destination directory." }
-}
-"Since both of the above lists apply to copying files, that this means that there are a total of six variations on copying a file."
-$nl
-"Deleting files:"
-{ $subsection delete-file }
-{ $subsection delete-directory }
-{ $subsection delete-tree }
-"Moving files:"
-{ $subsection move-file }
-{ $subsection move-file-into }
-{ $subsection move-files-into }
-"Copying files:"
-{ $subsection copy-file }
-{ $subsection copy-file-into }
-{ $subsection copy-files-into }
-"Copying directory trees recursively:"
-{ $subsection copy-tree }
-{ $subsection copy-tree-into }
-{ $subsection copy-trees-into }
-"On most operating systems, files can only be moved within the same file system. To move files between file systems, use " { $link copy-file } " followed by " { $link delete-file } " on the old name." ;
-
-ARTICLE: "io.files" "Basic file operations"
-"The " { $vocab-link "io.files" } " vocabulary provides basic support for working with files."
-{ $subsection "pathnames" }
-{ $subsection "file-streams" }
-{ $subsection "fs-meta" }
-{ $subsection "directories" }
-{ $subsection "delete-move-copy" }
-{ $subsection "symbolic-links" } ;
-
 ABOUT: "io.files"
 
-HELP: path-separator?
-{ $values { "ch" "a code point" } { "?" "a boolean" } }
-{ $description "Tests if the code point is a platform-specific path separator." }
-{ $examples
-    "On Unix:"
-    { $example "USING: io.files prettyprint ;" "CHAR: / path-separator? ." "t" }
-} ;
-
-HELP: parent-directory
-{ $values { "path" "a pathname string" } { "parent" "a pathname string" } }
-{ $description "Strips the last component off a pathname." }
-{ $examples { $example "USING: io io.files ;" "\"/etc/passwd\" parent-directory print" "/etc/" } } ;
-
-HELP: file-name
-{ $values { "path" "a pathname string" } { "string" string } }
-{ $description "Outputs the last component of a pathname string." }
-{ $examples
-    { $example "USING: io.files prettyprint ;" "\"/usr/bin/gcc\" file-name ." "\"gcc\"" }
-    { $example "USING: io.files prettyprint ;" "\"/usr/libexec/awk/\" file-name ." "\"awk\"" }
-} ;
-
-! need a $class-description file-info
-
-HELP: file-info
-{ $values { "path" "a pathname string" } { "info" file-info } }
-{ $description "Queries the file system for metadata. If " { $snippet "path" } " refers to a symbolic link, it is followed. See the article " { $link "file-types" } " for a list of metadata symbols." }
-{ $errors "Throws an error if the file does not exist." } ;
-
-HELP: link-info
-{ $values { "path" "a pathname string" } { "info" "a file-info tuple" } }
-{ $description "Queries the file system for metadata. If path refers to a symbolic link, information about the symbolic link itself is returned. If the file does not exist, an exception is thrown." } ;
-
-{ file-info link-info } related-words
-
-HELP: +regular-file+
-{ $description "A regular file. This type exists on all platforms. See " { $link "file-streams" } " for words operating on files." } ;
-
-HELP: +directory+
-{ $description "A directory. This type exists on all platforms. See " { $link "directories" } " for words operating on directories." } ;
-
-HELP: +symbolic-link+
-{ $description "A symbolic link file.  This type is currently implemented on Unix platforms only. See " { $link "symbolic-links" } " for words operating on symbolic links." } ;
-
-HELP: +character-device+
-{ $description "A Unix character device file. This type exists on Unix platforms only." } ;
-
-HELP: +block-device+
-{ $description "A Unix block device file. This type exists on Unix platforms only." } ;
-
-HELP: +fifo+
-{ $description "A Unix fifo file. This type exists on Unix platforms only." } ;
-
-HELP: +socket+
-{ $description "A Unix socket file. This type exists on Unix platforms only." } ;
-
-HELP: +unknown+
-{ $description "A unknown file type." } ;
-
 HELP: <file-reader>
-{
-  $values
-  { "path" "a pathname string" }
-  { "encoding" "an encoding descriptor" }
-  { "stream" "an input stream" }
-}
+{ $values { "path" "a pathname string" } { "encoding" "an encoding descriptor" } { "stream" "an input stream" } }
 { $description "Outputs an input stream for reading from the specified pathname using the given encoding." }
 { $errors "Throws an error if the file is unreadable." } ;
 
@@ -243,205 +71,6 @@ HELP: file-contents
 
 { set-file-lines file-lines set-file-contents file-contents } related-words
 
-HELP: cwd
-{ $values { "path" "a pathname string" } }
-{ $description "Outputs the current working directory of the Factor process." }
-{ $errors "Windows CE has no concept of ``current directory'', so this word throws an error there." }
-{ $notes "User code should use " { $link with-directory } " or " { $link set-current-directory } " instead." } ;
-
-HELP: cd
-{ $values { "path" "a pathname string" } }
-{ $description "Changes the current working directory of the Factor process." }
-{ $errors "Windows CE has no concept of ``current directory'', so this word throws an error there." }
-{ $notes "User code should use " { $link with-directory } " or " { $link set-current-directory } " instead." } ;
-
-{ cd cwd current-directory set-current-directory with-directory } related-words
-
-HELP: current-directory
-{ $description "A variable holding the current directory as an absolute path. Words that use the filesystem do so in relation to this variable."
-$nl
-"This variable should never be set directly; instead, use " { $link set-current-directory } " or " { $link with-directory } ". This preserves the invariant that the value of this variable is an absolute path." } ;
-
-HELP: set-current-directory
-{ $values { "path" "a pathname string" } }
-{ $description "Changes the " { $link current-directory } " variable."
-$nl
-"If " { $snippet "path" } " is relative, it is first resolved relative to the current directory. If " { $snippet "path" } " is absolute, it becomes the new current directory." } ;
-
-HELP: with-directory
-{ $values { "path" "a pathname string" } { "quot" quotation } }
-{ $description "Calls the quotation in a new dynamic scope with the " { $link current-directory } " variable rebound."
-$nl
-"If " { $snippet "path" } " is relative, it is first resolved relative to the current directory. If " { $snippet "path" } " is absolute, it becomes the new current directory." } ;
-
-HELP: append-path
-{ $values { "str1" "a string" } { "str2" "a string" } { "str" "a string" } }
-{ $description "Appends " { $snippet "str1" } " and " { $snippet "str2" } " to form a pathname." } ;
-
-HELP: prepend-path
-{ $values { "str1" "a string" } { "str2" "a string" } { "str" "a string" } }
-{ $description "Appends " { $snippet "str2" } " and " { $snippet "str1" } " to form a pathname." } ;
-
-{ append-path prepend-path } related-words
-
-HELP: absolute-path?
-{ $values { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Tests if a pathname is absolute. Examples of absolute pathnames are " { $snippet "/foo/bar" } " on Unix and " { $snippet "c:\\foo\\bar" } " on Windows." } ;
-
-HELP: windows-absolute-path?
-{ $values { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Tests if a pathname is absolute on Windows. Examples of absolute pathnames on Windows are " { $snippet "c:\\foo\\bar" } " and " { $snippet "\\\\?\\c:\\foo\\bar" } " for absolute Unicode pathnames." } ;
-
-HELP: root-directory?
-{ $values { "path" "a pathname string" } { "?" "a boolean" } }
-{ $description "Tests if a pathname is a root directory. Examples of root directory pathnames are " { $snippet "/" } " on Unix and " { $snippet "c:\\" } " on Windows." } ;
-
-{ absolute-path? windows-absolute-path? root-directory? } related-words
-
 HELP: exists?
 { $values { "path" "a pathname string" } { "?" "a boolean" } }
 { $description "Tests if the file named by " { $snippet "path" } " exists." } ;
-
-HELP: directory?
-{ $values { "file-info" file-info } { "?" "a boolean" } }
-{ $description "Tests if " { $snippet "file-info" } " is a directory." } ;
-
-HELP: (directory-entries)
-{ $values { "path" "a pathname string" } { "seq" "a sequence of " { $snippet "{ name dir? }" } " pairs" } }
-{ $description "Outputs the contents of a directory named by " { $snippet "path" } "." }
-{ $notes "This is a low-level word, and user code should call one of the related words instead." } ;
-
-HELP: directory-entries
-{ $values { "path" "a pathname string" } { "seq" "a sequence of " { $link directory-entry } " objects" } }
-{ $description "Outputs the contents of a directory named by " { $snippet "path" } "." } ;
-
-HELP: directory-files
-{ $values { "path" "a pathname string" } { "seq" "a sequence of filenames" } }
-{ $description "Outputs the contents of a directory named by " { $snippet "path" } "." } ;
-
-HELP: with-directory-files
-{ $values { "path" "a pathname string" } { "quot" quotation } }
-{ $description "Calls the quotation with the directory file names on the stack and with the directory set as the " { $link current-directory } ".  Restores the current directory after the quotation is called." } ;
-
-HELP: file-systems
-{ $values { "array" array } }
-{ $description "Returns an array of " { $link file-system-info } " objects returned by iterating the mount points and calling " { $link file-system-info } " on each." } ;
-
-HELP: file-system-info
-{ $values
-{ "path" "a pathname string" }
-{ "file-system-info" file-system-info } }
-{ $description "Returns a platform-specific object describing the file-system that contains the path. The cross-platform slot is " { $slot "free-space" } "." } ;
-
-HELP: resource-path
-{ $values { "path" "a pathname string" } { "newpath" "a pathname string" } }
-{ $description "Resolve a path relative to the Factor source code location." } ;
-
-HELP: pathname
-{ $class-description "Class of path name objects. Path name objects can be created by calling " { $link <pathname> } "." } ;
-
-HELP: normalize-path
-{ $values { "str" "a pathname string" } { "newstr" "a new pathname string" } }
-{ $description "Called by words such as " { $link <file-reader> } " and " { $link <file-writer> } " to prepare a pathname before passing it to underlying code." } ;
-
-HELP: <pathname> ( str -- pathname )
-{ $values { "str" "a pathname string" } { "pathname" pathname } }
-{ $description "Creates a new " { $link pathname } "." } ;
-
-HELP: make-link
-{ $values { "target" "a path to the symbolic link's target" } { "symlink" "a path to new symbolic link" } }
-{ $description "Creates a symbolic link." } ;
-
-HELP: read-link
-{ $values { "symlink" "a path to an existing symbolic link" } { "path" "the path pointed to by the symbolic link" } }
-{ $description "Reads the symbolic link and returns its target path." } ;
-
-HELP: copy-link
-{ $values { "target" "a path to an existing symlink" } { "symlink" "a path to a new symbolic link" } }
-{ $description "Copies a symbolic link without following the link." } ;
-
-{ make-link read-link copy-link } related-words
-
-HELP: home
-{ $values { "dir" string } }
-{ $description "Outputs the user's home directory." } ;
-
-HELP: delete-file
-{ $values { "path" "a pathname string" } }
-{ $description "Deletes a file." }
-{ $errors "Throws an error if the file could not be deleted." } ;
-
-HELP: make-directory
-{ $values { "path" "a pathname string" } }
-{ $description "Creates a directory." }
-{ $errors "Throws an error if the directory could not be created." } ;
-
-HELP: make-directories
-{ $values { "path" "a pathname string" } }
-{ $description "Creates a directory and any parent directories which do not yet exist." }
-{ $errors "Throws an error if the directories could not be created." } ;
-
-HELP: delete-directory
-{ $values { "path" "a pathname string" } }
-{ $description "Deletes a directory. The directory must be empty." }
-{ $errors "Throws an error if the directory could not be deleted." } ;
-
-HELP: touch-file
-{ $values { "path" "a pathname string" } }
-{ $description "Updates the modification time of a file or directory. If the file does not exist, creates a new, empty file." }
-{ $errors "Throws an error if the file could not be touched." } ;
-
-HELP: delete-tree
-{ $values { "path" "a pathname string" } }
-{ $description "Deletes a file or directory, recursing into subdirectories." }
-{ $errors "Throws an error if the deletion fails." } 
-{ $warning "Misuse of this word can lead to catastrophic data loss." } ;
-
-HELP: move-file
-{ $values { "from" "a pathname string" } { "to" "a pathname string" } }
-{ $description "Moves or renames a file." }
-{ $errors "Throws an error if the file does not exist or if the move operation fails." } ;
-
-HELP: move-file-into
-{ $values { "from" "a pathname string" } { "to" "a directory pathname string" } }
-{ $description "Moves a file to another directory without renaming it." }
-{ $errors "Throws an error if the file does not exist or if the move operation fails." } ;
-
-HELP: move-files-into
-{ $values { "files" "a sequence of pathname strings" } { "to" "a directory pathname string" } }
-{ $description "Moves a set of files to another directory." }
-{ $errors "Throws an error if the file does not exist or if the move operation fails." } ;
-
-HELP: copy-file
-{ $values { "from" "a pathname string" } { "to" "a pathname string" } }
-{ $description "Copies a file." }
-{ $notes "This operation attempts to preserve the original file's attributes, however not all attributes may be preserved." }
-{ $errors "Throws an error if the file does not exist or if the copy operation fails." } ;
-
-HELP: copy-file-into
-{ $values { "from" "a pathname string" } { "to" "a directory pathname string" } }
-{ $description "Copies a file to another directory." }
-{ $errors "Throws an error if the file does not exist or if the copy operation fails." } ;
-
-HELP: copy-files-into
-{ $values { "files" "a sequence of pathname strings" } { "to" "a directory pathname string" } }
-{ $description "Copies a set of files to another directory." }
-{ $errors "Throws an error if the file does not exist or if the copy operation fails." } ;
-
-HELP: copy-tree
-{ $values { "from" "a pathname string" } { "to" "a pathname string" } }
-{ $description "Copies a directory tree recursively." }
-{ $notes "This operation attempts to preserve original file attributes, however not all attributes may be preserved." }
-{ $errors "Throws an error if the copy operation fails." } ;
-
-HELP: copy-tree-into
-{ $values { "from" "a pathname string" } { "to" "a directory pathname string" } }
-{ $description "Copies a directory tree to another directory, recursively." }
-{ $errors "Throws an error if the copy operation fails." } ;
-
-HELP: copy-trees-into
-{ $values { "files" "a sequence of pathname strings" } { "to" "a directory pathname string" } }
-{ $description "Copies a set of directory trees to another directory, recursively." }
-{ $errors "Throws an error if the copy operation fails." } ;
-
-
index 4299634642f3b8f3cc06c103cdebb71bef342d2e..d2611d73a91482602793ee1b243bfaafd38691b6 100644 (file)
+USING: tools.test io.files io.files.private io.files.temp
+io.directories io.encodings.8-bit arrays make system
+io.encodings.binary io
+threads kernel continuations io.encodings.ascii sequences
+strings accessors io.encodings.utf8 math destructors namespaces
+;
 IN: io.files.tests
-USING: tools.test io.files io.files.private io threads kernel
-continuations io.encodings.ascii sequences
-strings accessors io.encodings.utf8 math destructors
-namespaces ;
 
 \ exists? must-infer
 \ (exists?) must-infer
-\ file-info must-infer
-\ link-info must-infer
 
-[ ] [ "blahblah" temp-file dup exists? [ delete-directory ] [ drop ] if ] unit-test
-[ ] [ "blahblah" temp-file make-directory ] unit-test
-[ t ] [ "blahblah" temp-file file-info directory? ] unit-test
-
-[ t ] [
-    [ temp-directory "loldir" append-path delete-directory ] ignore-errors
-    temp-directory [
-        "loldir" make-directory
-    ] with-directory
-    temp-directory "loldir" append-path exists?
-] unit-test
-
-[ ] [
-    [ temp-directory "loldir" append-path delete-directory ] ignore-errors
-    temp-directory [
-        "loldir" make-directory
-        "loldir" delete-directory
-    ] with-directory
-] unit-test
-
-[ "file1 contents" ] [
-    [ temp-directory "loldir" append-path delete-directory ] ignore-errors
-    temp-directory [
-        "file1 contents" "file1" utf8 set-file-contents
-        "file1" "file2" copy-file
-        "file2" utf8 file-contents
-    ] with-directory
-    "file1" temp-file delete-file
-    "file2" temp-file delete-file
-] unit-test
-
-[ "file3 contents" ] [
-    temp-directory [
-        "file3 contents" "file3" utf8 set-file-contents
-        "file3" "file4" move-file
-        "file4" utf8 file-contents
-    ] with-directory
-    "file4" temp-file delete-file
-] unit-test
-
-[ "file5" temp-file delete-file ] ignore-errors
-
-[ ] [
-    temp-directory [
-        "file5" touch-file
-        "file5" delete-file
-    ] with-directory
-] unit-test
-
-[ "file6" temp-file delete-file ] ignore-errors
-
-[ ] [
-    temp-directory [
-        "file6" touch-file
-        "file6" link-info drop
-    ] with-directory
-] unit-test
-
-[ "passwd" ] [ "/etc/passwd" file-name ] unit-test
-[ "awk" ] [ "/usr/libexec/awk/" file-name ] unit-test
-[ "awk" ] [ "/usr/libexec/awk///" file-name ] unit-test
-[ "" ] [ "" file-name ] unit-test
+[ ] [ "append-test" temp-file dup exists? [ delete-file ] [ drop ] if ] unit-test
 
-[ "freetype6.dll" ] [ "resource:freetype6.dll" file-name ] unit-test
-[ "freetype6.dll" ] [ "resource:/freetype6.dll" file-name ] unit-test
+[ ] [ "append-test" temp-file ascii <file-appender> dispose ] unit-test
 
-[ ] [
-    { "Hello world." }
-    "test-foo.txt" temp-file ascii set-file-lines
+[
+    "This is a line.\rThis is another line.\r"
+] [
+    "resource:core/io/test/mac-os-eol.txt" latin1 <file-reader>
+    [ 500 read ] with-input-stream
 ] unit-test
 
-[ ] [
-    "test-foo.txt" temp-file ascii [
-        "Hello appender." print
-    ] with-file-appender
+[
+    255
+] [
+    "resource:core/io/test/binary.txt" latin1 <file-reader>
+    [ read1 ] with-input-stream >fixnum
 ] unit-test
 
 [ ] [
-    "test-bar.txt" temp-file ascii [
-        "Hello appender." print
-    ] with-file-appender
+    "It seems Jobs has lost his grasp on reality again.\n"
+    "separator-test.txt" temp-file latin1 set-file-contents
 ] unit-test
 
-[ "Hello world.\nHello appender.\n" ] [
-    "test-foo.txt" temp-file ascii file-contents
-] unit-test
-
-[ "Hello appender.\n" ] [
-    "test-bar.txt" temp-file ascii file-contents
+[
+    {
+        { "It seems " CHAR: J }
+        { "obs has lost h" CHAR: i }
+        { "s grasp on reality again.\n" f }
+    }
+] [
+    [
+        "separator-test.txt" temp-file
+        latin1 <file-reader> [
+            "J" read-until 2array ,
+            "i" read-until 2array ,
+            "X" read-until 2array ,
+        ] with-input-stream
+    ] { } make
 ] unit-test
 
-[ ] [ "test-foo.txt" temp-file delete-file ] unit-test
-
-[ ] [ "test-bar.txt" temp-file delete-file ] unit-test
-
-[ f ] [ "test-foo.txt" temp-file exists? ] unit-test
-
-[ f ] [ "test-bar.txt" temp-file exists? ] unit-test
-
-[ "test-blah" temp-file delete-tree ] ignore-errors
-
-[ ] [ "test-blah" temp-file make-directory ] unit-test
-
 [ ] [
-    "test-blah/fooz" temp-file ascii <file-writer> dispose
+    image binary [
+        10 [ 65536 read drop ] times
+    ] with-file-reader
 ] unit-test
 
-[ t ] [
-    "test-blah/fooz" temp-file exists?
+! Test EOF behavior
+[ 10 ] [
+    image binary [
+        0 read drop
+        10 read length
+    ] with-file-reader
 ] unit-test
 
-[ ] [ "test-blah/fooz" temp-file delete-file ] unit-test
-
-[ ] [ "test-blah" temp-file delete-directory ] unit-test
-
-[ f ] [ "test-blah" temp-file exists? ] unit-test
-
 USE: debugger.threads
 
 [ ] [ "test-quux.txt" temp-file ascii [ [ yield "Hi" write ] "Test" spawn drop ] with-file-writer ] unit-test
@@ -139,150 +76,3 @@ USE: debugger.threads
 [ t ] [ "quux-test.txt" temp-file exists? ] unit-test
 
 [ ] [ "quux-test.txt" temp-file delete-file ] unit-test
-
-[ ] [ "delete-tree-test/a/b/c" temp-file make-directories ] unit-test
-
-[ ] [
-    { "Hi" }
-    "delete-tree-test/a/b/c/d" temp-file ascii set-file-lines
-] unit-test
-
-[ ] [
-    "delete-tree-test" temp-file delete-tree
-] unit-test
-
-[ { "kernel" } ] [
-    "core" resource-path [
-        "." directory-files [ "kernel" = ] filter
-    ] with-directory
-] unit-test
-
-[ { "kernel" } ] [
-    "resource:core" [
-        "." directory-files [ "kernel" = ] filter
-    ] with-directory
-] unit-test
-
-[ { "kernel" } ] [
-    "resource:core" [
-        [ "kernel" = ] filter
-    ] with-directory-files
-] unit-test
-
-[ ] [
-    "copy-tree-test/a/b/c" temp-file make-directories
-] unit-test
-
-[ ] [
-    "Foobar"
-    "copy-tree-test/a/b/c/d" temp-file
-    ascii set-file-contents
-] unit-test
-
-[ ] [
-    "copy-tree-test" temp-file
-    "copy-destination" temp-file copy-tree
-] unit-test
-
-[ "Foobar" ] [
-    "copy-destination/a/b/c/d" temp-file ascii file-contents
-] unit-test
-
-[ ] [
-    "copy-destination" temp-file delete-tree
-] unit-test
-
-[ ] [
-    "copy-tree-test" temp-file
-    "copy-destination" temp-file copy-tree-into
-] unit-test
-
-[ "Foobar" ] [
-    "copy-destination/copy-tree-test/a/b/c/d" temp-file ascii file-contents
-] unit-test
-
-[ ] [
-    "copy-destination/copy-tree-test/a/b/c/d" temp-file "" temp-file copy-file-into
-] unit-test
-
-[ "Foobar" ] [
-    "d" temp-file ascii file-contents
-] unit-test
-
-[ ] [ "d" temp-file delete-file ] unit-test
-
-[ ] [ "copy-destination" temp-file delete-tree ] unit-test
-
-[ ] [ "copy-tree-test" temp-file delete-tree ] unit-test
-
-[ t ] [ cwd "misc" resource-path [ ] with-directory cwd = ] unit-test
-
-[ t ] [
-    temp-directory [ "hi41" "test41" utf8 set-file-contents ] with-directory
-    temp-directory "test41" append-path utf8 file-contents "hi41" =
-] unit-test
-
-[ t ] [
-    temp-directory [ "test41" file-info size>> ] with-directory 4 =
-] unit-test
-
-[ ] [ "append-test" temp-file dup exists? [ delete-file ] [ drop ] if ] unit-test
-
-[ ] [ "append-test" temp-file ascii <file-appender> dispose ] unit-test
-
-[ "/usr/lib" ] [ "/usr" "lib" append-path ] unit-test
-[ "/usr/lib" ] [ "/usr/" "lib" append-path ] unit-test
-[ "/usr/lib" ] [ "/usr" "./lib" append-path ] unit-test
-[ "/usr/lib/" ] [ "/usr" "./lib/" append-path ] unit-test
-[ "/lib" ] [ "/usr" "../lib" append-path ] unit-test
-[ "/lib/" ] [ "/usr" "../lib/" append-path ] unit-test
-
-[ "" ] [ "" "." append-path ] unit-test
-[ "" ".." append-path ] must-fail
-
-[ "/" ] [ "/" "./." append-path ] unit-test
-[ "/" ] [ "/" "././" append-path ] unit-test
-[ "/a/b/lib" ] [ "/a/b/c/d/e/f/" "../../../../lib" append-path ] unit-test
-[ "/a/b/lib/" ] [ "/a/b/c/d/e/f/" "../../../../lib/" append-path ] unit-test
-
-[ "" "../lib/" append-path ] must-fail
-[ "lib" ] [ "" "lib" append-path ] unit-test
-[ "lib" ] [ "" "./lib" append-path ] unit-test
-
-[ "foo/bar/." parent-directory ] must-fail
-[ "foo/bar/./" parent-directory ] must-fail
-[ "foo/bar/baz/.." parent-directory ] must-fail
-[ "foo/bar/baz/../" parent-directory ] must-fail
-
-[ "." parent-directory ] must-fail
-[ "./" parent-directory ] must-fail
-[ ".." parent-directory ] must-fail
-[ "../" parent-directory ] must-fail
-[ "../../" parent-directory ] must-fail
-[ "foo/.." parent-directory ] must-fail
-[ "foo/../" parent-directory ] must-fail
-[ "" parent-directory ] must-fail
-[ "." ] [ "boot.x86.64.image" parent-directory ] unit-test
-
-[ "bar/foo" ] [ "bar/baz" "..///foo" append-path ] unit-test
-[ "bar/baz/foo" ] [ "bar/baz" ".///foo" append-path ] unit-test
-[ "bar/foo" ] [ "bar/baz" "./..//foo" append-path ] unit-test
-[ "bar/foo" ] [ "bar/baz" "./../././././././///foo" append-path ] unit-test
-
-[ t ] [ "resource:core" absolute-path? ] unit-test
-[ f ] [ "" absolute-path? ] unit-test
-
-[ "touch-twice-test" temp-file delete-file ] ignore-errors
-[ ] [ 2 [ "touch-twice-test" temp-file touch-file ] times ] unit-test
-
-! aum's bug
-[
-    "." current-directory set
-    ".." "resource-path" set
-    [ "../core/bootstrap/stage2.factor" ]
-    [ "resource:core/bootstrap/stage2.factor" (normalize-path) ]
-    unit-test
-] with-scope
-
-[ t ] [ "/" file-system-info file-system-info? ] unit-test
-[ t ] [ file-systems [ file-system-info? ] all? ] unit-test
index 77b37180c63aadf79a5f577484f48fd9ad01e368..19659ee5bb080ea4f7f83ceca1525c5d4127f482 100644 (file)
@@ -1,10 +1,7 @@
 ! Copyright (C) 2004, 2008 Slava Pestov, Daniel Ehrenberg.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io.backend io.files.private io hashtables kernel
-kernel.private math memory namespaces sequences strings assocs
-arrays definitions system combinators splitting sbufs
-continuations destructors io.encodings io.encodings.binary init
-accessors math.order ;
+USING: kernel kernel.private sequences init namespaces system io
+io.backend io.pathnames io.encodings io.files.private ;
 IN: io.files
 
 HOOK: (file-reader) io-backend ( path -- stream )
@@ -43,155 +40,9 @@ HOOK: (file-appender) io-backend ( path -- stream )
 : with-file-appender ( path encoding quot -- )
     [ <file-appender> ] dip with-output-stream ; inline
 
-! Pathnames
-: path-separator? ( ch -- ? ) os windows? "/\\" "/" ? member? ;
-
-: path-separator ( -- string ) os windows? "\\" "/" ? ;
-
-: trim-right-separators ( str -- newstr )
-    [ path-separator? ] trim-right ;
-
-: trim-left-separators ( str -- newstr )
-    [ path-separator? ] trim-left ;
-
-: last-path-separator ( path -- n ? )
-    [ length 1- ] keep [ path-separator? ] find-last-from ;
-
-HOOK: root-directory? io-backend ( path -- ? )
-
-M: object root-directory? ( path -- ? )
-    [ f ] [ [ path-separator? ] all? ] if-empty ;
-
-ERROR: no-parent-directory path ;
-
-: parent-directory ( path -- parent )
-    dup root-directory? [
-        trim-right-separators
-        dup last-path-separator [
-            1+ cut
-        ] [
-            drop "." swap
-        ] if
-        { "" "." ".." } member? [
-            no-parent-directory
-        ] when
-    ] unless ;
-
-<PRIVATE
-
-: head-path-separator? ( path1 ? -- ?' )
-    [
-        [ t ] [ first path-separator? ] if-empty
-    ] [
-        drop f
-    ] if ;
-
-: head.? ( path -- ? ) "." ?head head-path-separator? ;
-
-: head..? ( path -- ? ) ".." ?head head-path-separator? ;
-
-: append-path-empty ( path1 path2 -- path' )
-    {
-        { [ dup head.? ] [
-            rest trim-left-separators append-path-empty
-        ] }
-        { [ dup head..? ] [ drop no-parent-directory ] }
-        [ nip ]
-    } cond ;
-
-PRIVATE>
-
-: windows-absolute-path? ( path -- path ? )
-    {
-        { [ dup "\\\\?\\" head? ] [ t ] }
-        { [ dup length 2 < ] [ f ] }
-        { [ dup second CHAR: : = ] [ t ] }
-        [ f ]
-    } cond ;
-
-: absolute-path? ( path -- ? )
-    {
-        { [ dup empty? ] [ f ] }
-        { [ dup "resource:" head? ] [ t ] }
-        { [ os windows? ] [ windows-absolute-path? ] }
-        { [ dup first path-separator? ] [ t ] }
-        [ f ]
-    } cond nip ;
-
-: append-path ( str1 str2 -- str )
-    {
-        { [ over empty? ] [ append-path-empty ] }
-        { [ dup empty? ] [ drop ] }
-        { [ over trim-right-separators "." = ] [ nip ] }
-        { [ dup absolute-path? ] [ nip ] }
-        { [ dup head.? ] [ rest trim-left-separators append-path ] }
-        { [ dup head..? ] [
-            2 tail trim-left-separators
-            [ parent-directory ] dip append-path
-        ] }
-        { [ over absolute-path? over first path-separator? and ] [
-            [ 2 head ] dip append
-        ] }
-        [
-            [ trim-right-separators "/" ] dip
-            trim-left-separators 3append
-        ]
-    } cond ;
-
-: prepend-path ( str1 str2 -- str )
-    swap append-path ; inline
-
-: file-name ( path -- string )
-    dup root-directory? [
-        trim-right-separators
-        dup last-path-separator [ 1+ tail ] [
-            drop "resource:" ?head [ file-name ] when
-        ] if
-    ] unless ;
-
-: file-extension ( filename -- extension )
-    "." split1-last nip ;
-
-! File info
-TUPLE: file-info type size permissions created modified
-accessed ;
-
-HOOK: file-info io-backend ( path -- info )
-
-! Symlinks
-HOOK: link-info io-backend ( path -- info )
-
-HOOK: make-link io-backend ( target symlink -- )
-
-HOOK: read-link io-backend ( symlink -- path )
-
-: copy-link ( target symlink -- )
-    [ read-link ] dip make-link ;
-
-SYMBOL: +regular-file+
-SYMBOL: +directory+
-SYMBOL: +symbolic-link+
-SYMBOL: +character-device+
-SYMBOL: +block-device+
-SYMBOL: +fifo+
-SYMBOL: +socket+
-SYMBOL: +whiteout+
-SYMBOL: +unknown+
-
-! File metadata
 : exists? ( path -- ? ) normalize-path (exists?) ;
 
-: directory? ( file-info -- ? ) type>> +directory+ = ;
-
-! File-system
-
-HOOK: file-systems os ( -- array )
-
-TUPLE: file-system-info device-name mount-point type
-available-space free-space used-space total-space ;
-
-HOOK: file-system-info os ( path -- file-system-info )
-
+! Current directory
 <PRIVATE
 
 HOOK: cd io-backend ( path -- )
@@ -202,148 +53,9 @@ M: object cwd ( -- path ) "." ;
 
 PRIVATE>
 
-SYMBOL: current-directory
-
 [
     cwd current-directory set-global
     13 getenv cwd prepend-path \ image set-global
     14 getenv cwd prepend-path \ vm set-global
     image parent-directory "resource-path" set-global
-] "io.files" add-init-hook
-
-: resource-path ( path -- newpath )
-    "resource-path" get prepend-path ;
-
-: (normalize-path) ( path -- path' )
-    "resource:" ?head [
-        trim-left-separators resource-path
-        (normalize-path)
-    ] [
-        current-directory get prepend-path
-    ] if ;
-
-M: object normalize-path ( path -- path' )
-    (normalize-path) ;
-
-: set-current-directory ( path -- )
-    (normalize-path) current-directory set ;
-
-: with-directory ( path quot -- )
-    [ (normalize-path) current-directory ] dip with-variable ; inline
-
-! Creating directories
-HOOK: make-directory io-backend ( path -- )
-
-: make-directories ( path -- )
-    normalize-path trim-right-separators {
-        { [ dup "." = ] [ ] }
-        { [ dup root-directory? ] [ ] }
-        { [ dup empty? ] [ ] }
-        { [ dup exists? ] [ ] }
-        [
-            dup parent-directory make-directories
-            dup make-directory
-        ]
-    } cond drop ;
-
-TUPLE: directory-entry name type ;
-
-HOOK: >directory-entry os ( byte-array -- directory-entry )
-
-HOOK: (directory-entries) os ( path -- seq )
-
-: directory-entries ( path -- seq )
-    normalize-path
-    (directory-entries)
-    [ name>> { "." ".." } member? not ] filter ;
-    
-: directory-files ( path -- seq )
-    directory-entries [ name>> ] map ;
-
-: with-directory-files ( path quot -- )
-    [ "" directory-files ] prepose with-directory ; inline
-
-! Touching files
-HOOK: touch-file io-backend ( path -- )
-
-! Deleting files
-HOOK: delete-file io-backend ( path -- )
-
-HOOK: delete-directory io-backend ( path -- )
-
-: delete-tree ( path -- )
-    dup link-info type>> +directory+ = [
-        [ [ [ delete-tree ] each ] with-directory-files ]
-        [ delete-directory ]
-        bi
-    ] [ delete-file ] if ;
-
-: to-directory ( from to -- from to' )
-    over file-name append-path ;
-
-! Moving and renaming files
-HOOK: move-file io-backend ( from to -- )
-
-: move-file-into ( from to -- )
-    to-directory move-file ;
-
-: move-files-into ( files to -- )
-    [ move-file-into ] curry each ;
-
-! Copying files
-HOOK: copy-file io-backend ( from to -- )
-
-M: object copy-file
-    dup parent-directory make-directories
-    binary <file-writer> [
-        swap binary <file-reader> [
-            swap stream-copy
-        ] with-disposal
-    ] with-disposal ;
-
-: copy-file-into ( from to -- )
-    to-directory copy-file ;
-
-: copy-files-into ( files to -- )
-    [ copy-file-into ] curry each ;
-
-DEFER: copy-tree-into
-
-: copy-tree ( from to -- )
-    normalize-path
-    over link-info type>>
-    {
-        { +symbolic-link+ [ copy-link ] }
-        { +directory+ [
-            swap [
-                [ swap copy-tree-into ] with each
-            ] with-directory-files
-        ] }
-        [ drop copy-file ]
-    } case ;
-
-: copy-tree-into ( from to -- )
-    to-directory copy-tree ;
-
-: copy-trees-into ( files to -- )
-    [ copy-tree-into ] curry each ;
-
-! Special paths
-
-: temp-directory ( -- path )
-    "temp" resource-path dup make-directories ;
-
-: temp-file ( name -- path )
-    temp-directory prepend-path ;
-
-! Pathname presentations
-TUPLE: pathname string ;
-
-C: <pathname> pathname
-
-M: pathname <=> [ string>> ] compare ;
-
-! Home directory
-HOOK: home io-backend ( -- dir )
-
-M: object home "" resource-path ;
+] "io.files" add-init-hook
\ No newline at end of file
index 18cde1a35c5518fa6590e6f41f01ea735f255077..009ba3a9e73f2170591a6e5ee2a23bdfbc0f5dc1 100644 (file)
@@ -8,55 +8,5 @@ IN: io.tests
     "foo" "io.tests" lookup
 ] unit-test
 
-[
-    "This is a line.\rThis is another line.\r"
-] [
-    "resource:core/io/test/mac-os-eol.txt" latin1 <file-reader>
-    [ 500 read ] with-input-stream
-] unit-test
-
-[
-    255
-] [
-    "resource:core/io/test/binary.txt" latin1 <file-reader>
-    [ read1 ] with-input-stream >fixnum
-] unit-test
-
 ! Make sure we use correct to_c_string form when writing
 [ ] [ "\0" write ] unit-test
-
-[ ] [
-    "It seems Jobs has lost his grasp on reality again.\n"
-    "separator-test.txt" temp-file latin1 set-file-contents
-] unit-test
-
-[
-    {
-        { "It seems " CHAR: J }
-        { "obs has lost h" CHAR: i }
-        { "s grasp on reality again.\n" f }
-    }
-] [
-    [
-        "separator-test.txt" temp-file
-        latin1 <file-reader> [
-            "J" read-until 2array ,
-            "i" read-until 2array ,
-            "X" read-until 2array ,
-        ] with-input-stream
-    ] { } make
-] unit-test
-
-[ ] [
-    image binary [
-        10 [ 65536 read drop ] times
-    ] with-file-reader
-] unit-test
-
-! Test EOF behavior
-[ 10 ] [
-    image binary [
-        0 read drop
-        10 read length
-    ] with-file-reader
-] unit-test
diff --git a/core/io/pathnames/authors.txt b/core/io/pathnames/authors.txt
new file mode 100644 (file)
index 0000000..f372b57
--- /dev/null
@@ -0,0 +1,2 @@
+Slava Pestov
+Doug Coleman
diff --git a/core/io/pathnames/pathnames-docs.factor b/core/io/pathnames/pathnames-docs.factor
new file mode 100644 (file)
index 0000000..020911e
--- /dev/null
@@ -0,0 +1,78 @@
+USING: help.markup help.syntax io.backend io.files strings ;
+IN: io.pathnames
+
+HELP: path-separator?
+{ $values { "ch" "a code point" } { "?" "a boolean" } }
+{ $description "Tests if the code point is a platform-specific path separator." }
+{ $examples
+    "On Unix:"
+    { $example "USING: io.pathnames prettyprint ;" "CHAR: / path-separator? ." "t" }
+} ;
+
+HELP: parent-directory
+{ $values { "path" "a pathname string" } { "parent" "a pathname string" } }
+{ $description "Strips the last component off a pathname." }
+{ $examples { $example "USING: io io.pathnames ;" "\"/etc/passwd\" parent-directory print" "/etc/" } } ;
+
+HELP: file-name
+{ $values { "path" "a pathname string" } { "string" string } }
+{ $description "Outputs the last component of a pathname string." }
+{ $examples
+    { $example "USING: io.pathnames prettyprint ;" "\"/usr/bin/gcc\" file-name ." "\"gcc\"" }
+    { $example "USING: io.pathnames prettyprint ;" "\"/usr/libexec/awk/\" file-name ." "\"awk\"" }
+} ;
+
+HELP: append-path
+{ $values { "str1" "a string" } { "str2" "a string" } { "str" "a string" } }
+{ $description "Appends " { $snippet "str1" } " and " { $snippet "str2" } " to form a pathname." } ;
+
+HELP: prepend-path
+{ $values { "str1" "a string" } { "str2" "a string" } { "str" "a string" } }
+{ $description "Appends " { $snippet "str2" } " and " { $snippet "str1" } " to form a pathname." } ;
+
+{ append-path prepend-path } related-words
+
+HELP: absolute-path?
+{ $values { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Tests if a pathname is absolute. Examples of absolute pathnames are " { $snippet "/foo/bar" } " on Unix and " { $snippet "c:\\foo\\bar" } " on Windows." } ;
+
+HELP: windows-absolute-path?
+{ $values { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Tests if a pathname is absolute on Windows. Examples of absolute pathnames on Windows are " { $snippet "c:\\foo\\bar" } " and " { $snippet "\\\\?\\c:\\foo\\bar" } " for absolute Unicode pathnames." } ;
+
+HELP: root-directory?
+{ $values { "path" "a pathname string" } { "?" "a boolean" } }
+{ $description "Tests if a pathname is a root directory. Examples of root directory pathnames are " { $snippet "/" } " on Unix and " { $snippet "c:\\" } " on Windows." } ;
+
+{ absolute-path? windows-absolute-path? root-directory? } related-words
+
+HELP: resource-path
+{ $values { "path" "a pathname string" } { "newpath" "a pathname string" } }
+{ $description "Resolve a path relative to the Factor source code location." } ;
+
+HELP: pathname
+{ $class-description "Class of path name objects. Path name objects can be created by calling " { $link <pathname> } "." } ;
+
+HELP: normalize-path
+{ $values { "str" "a pathname string" } { "newstr" "a new pathname string" } }
+{ $description "Called by words such as " { $link <file-reader> } " and " { $link <file-writer> } " to prepare a pathname before passing it to underlying code." } ;
+
+HELP: <pathname>
+{ $values { "string" "a pathname string" } { "pathname" pathname } }
+{ $description "Creates a new " { $link pathname } "." } ;
+
+HELP: home
+{ $values { "dir" string } }
+{ $description "Outputs the user's home directory." } ;
+
+ARTICLE: "io.pathnames" "Pathname manipulation"
+"Pathname manipulation:"
+{ $subsection parent-directory }
+{ $subsection file-name }
+{ $subsection last-path-separator }
+{ $subsection append-path }
+"Pathname presentations:"
+{ $subsection pathname }
+{ $subsection <pathname> } ;
+
+ABOUT: "io.pathnames"
diff --git a/core/io/pathnames/pathnames-tests.factor b/core/io/pathnames/pathnames-tests.factor
new file mode 100644 (file)
index 0000000..41498fa
--- /dev/null
@@ -0,0 +1,68 @@
+USING: io.pathnames io.files.temp io.directories
+continuations math io.files.private kernel
+namespaces tools.test ;
+IN: io.pathnames.tests
+
+[ "passwd" ] [ "/etc/passwd" file-name ] unit-test
+[ "awk" ] [ "/usr/libexec/awk/" file-name ] unit-test
+[ "awk" ] [ "/usr/libexec/awk///" file-name ] unit-test
+[ "" ] [ "" file-name ] unit-test
+
+[ "freetype6.dll" ] [ "resource:freetype6.dll" file-name ] unit-test
+[ "freetype6.dll" ] [ "resource:/freetype6.dll" file-name ] unit-test
+
+[ "/usr/lib" ] [ "/usr" "lib" append-path ] unit-test
+[ "/usr/lib" ] [ "/usr/" "lib" append-path ] unit-test
+[ "/usr/lib" ] [ "/usr" "./lib" append-path ] unit-test
+[ "/usr/lib/" ] [ "/usr" "./lib/" append-path ] unit-test
+[ "/lib" ] [ "/usr" "../lib" append-path ] unit-test
+[ "/lib/" ] [ "/usr" "../lib/" append-path ] unit-test
+
+[ "" ] [ "" "." append-path ] unit-test
+[ "" ".." append-path ] must-fail
+
+[ "/" ] [ "/" "./." append-path ] unit-test
+[ "/" ] [ "/" "././" append-path ] unit-test
+[ "/a/b/lib" ] [ "/a/b/c/d/e/f/" "../../../../lib" append-path ] unit-test
+[ "/a/b/lib/" ] [ "/a/b/c/d/e/f/" "../../../../lib/" append-path ] unit-test
+
+[ "" "../lib/" append-path ] must-fail
+[ "lib" ] [ "" "lib" append-path ] unit-test
+[ "lib" ] [ "" "./lib" append-path ] unit-test
+
+[ "foo/bar/." parent-directory ] must-fail
+[ "foo/bar/./" parent-directory ] must-fail
+[ "foo/bar/baz/.." parent-directory ] must-fail
+[ "foo/bar/baz/../" parent-directory ] must-fail
+
+[ "." parent-directory ] must-fail
+[ "./" parent-directory ] must-fail
+[ ".." parent-directory ] must-fail
+[ "../" parent-directory ] must-fail
+[ "../../" parent-directory ] must-fail
+[ "foo/.." parent-directory ] must-fail
+[ "foo/../" parent-directory ] must-fail
+[ "" parent-directory ] must-fail
+[ "." ] [ "boot.x86.64.image" parent-directory ] unit-test
+
+[ "bar/foo" ] [ "bar/baz" "..///foo" append-path ] unit-test
+[ "bar/baz/foo" ] [ "bar/baz" ".///foo" append-path ] unit-test
+[ "bar/foo" ] [ "bar/baz" "./..//foo" append-path ] unit-test
+[ "bar/foo" ] [ "bar/baz" "./../././././././///foo" append-path ] unit-test
+
+[ t ] [ "resource:core" absolute-path? ] unit-test
+[ f ] [ "" absolute-path? ] unit-test
+
+[ "touch-twice-test" temp-file delete-file ] ignore-errors
+[ ] [ 2 [ "touch-twice-test" temp-file touch-file ] times ] unit-test
+
+! aum's bug
+[
+    "." current-directory set
+    ".." "resource-path" set
+    [ "../core/bootstrap/stage2.factor" ]
+    [ "resource:core/bootstrap/stage2.factor" (normalize-path) ]
+    unit-test
+] with-scope
+
+[ t ] [ cwd "misc" resource-path [ ] with-directory cwd = ] unit-test
diff --git a/core/io/pathnames/pathnames.factor b/core/io/pathnames/pathnames.factor
new file mode 100644 (file)
index 0000000..e81d8c2
--- /dev/null
@@ -0,0 +1,143 @@
+! Copyright (C) 2004, 2008 Slava Pestov, Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors combinators io.backend kernel math math.order
+namespaces sequences splitting strings system ;
+IN: io.pathnames
+
+SYMBOL: current-directory
+
+: path-separator? ( ch -- ? ) os windows? "/\\" "/" ? member? ;
+
+: path-separator ( -- string ) os windows? "\\" "/" ? ;
+
+: trim-right-separators ( str -- newstr )
+    [ path-separator? ] trim-right ;
+
+: trim-left-separators ( str -- newstr )
+    [ path-separator? ] trim-left ;
+
+: last-path-separator ( path -- n ? )
+    [ length 1- ] keep [ path-separator? ] find-last-from ;
+
+HOOK: root-directory? io-backend ( path -- ? )
+
+M: object root-directory? ( path -- ? )
+    [ f ] [ [ path-separator? ] all? ] if-empty ;
+
+ERROR: no-parent-directory path ;
+
+: parent-directory ( path -- parent )
+    dup root-directory? [
+        trim-right-separators
+        dup last-path-separator [
+            1+ cut
+        ] [
+            drop "." swap
+        ] if
+        { "" "." ".." } member? [
+            no-parent-directory
+        ] when
+    ] unless ;
+
+<PRIVATE
+
+: head-path-separator? ( path1 ? -- ?' )
+    [
+        [ t ] [ first path-separator? ] if-empty
+    ] [
+        drop f
+    ] if ;
+
+: head.? ( path -- ? ) "." ?head head-path-separator? ;
+
+: head..? ( path -- ? ) ".." ?head head-path-separator? ;
+
+: append-path-empty ( path1 path2 -- path' )
+    {
+        { [ dup head.? ] [
+            rest trim-left-separators append-path-empty
+        ] }
+        { [ dup head..? ] [ drop no-parent-directory ] }
+        [ nip ]
+    } cond ;
+
+PRIVATE>
+
+: windows-absolute-path? ( path -- path ? )
+    {
+        { [ dup "\\\\?\\" head? ] [ t ] }
+        { [ dup length 2 < ] [ f ] }
+        { [ dup second CHAR: : = ] [ t ] }
+        [ f ]
+    } cond ;
+
+: absolute-path? ( path -- ? )
+    {
+        { [ dup empty? ] [ f ] }
+        { [ dup "resource:" head? ] [ t ] }
+        { [ os windows? ] [ windows-absolute-path? ] }
+        { [ dup first path-separator? ] [ t ] }
+        [ f ]
+    } cond nip ;
+
+: append-path ( str1 str2 -- str )
+    {
+        { [ over empty? ] [ append-path-empty ] }
+        { [ dup empty? ] [ drop ] }
+        { [ over trim-right-separators "." = ] [ nip ] }
+        { [ dup absolute-path? ] [ nip ] }
+        { [ dup head.? ] [ rest trim-left-separators append-path ] }
+        { [ dup head..? ] [
+            2 tail trim-left-separators
+            [ parent-directory ] dip append-path
+        ] }
+        { [ over absolute-path? over first path-separator? and ] [
+            [ 2 head ] dip append
+        ] }
+        [
+            [ trim-right-separators "/" ] dip
+            trim-left-separators 3append
+        ]
+    } cond ;
+
+: prepend-path ( str1 str2 -- str )
+    swap append-path ; inline
+
+: file-name ( path -- string )
+    dup root-directory? [
+        trim-right-separators
+        dup last-path-separator [ 1+ tail ] [
+            drop "resource:" ?head [ file-name ] when
+        ] if
+    ] unless ;
+
+: file-extension ( filename -- extension )
+    "." split1-last nip ;
+
+: resource-path ( path -- newpath )
+    "resource-path" get prepend-path ;
+
+GENERIC: (normalize-path) ( path -- path' )
+
+M: string (normalize-path)
+    "resource:" ?head [
+        trim-left-separators resource-path
+        (normalize-path)
+    ] [
+        current-directory get prepend-path
+    ] if ;
+
+M: object normalize-path ( path -- path' )
+    (normalize-path) ;
+
+TUPLE: pathname string ;
+
+C: <pathname> pathname
+
+M: pathname (normalize-path) string>> (normalize-path) ;
+
+M: pathname <=> [ string>> ] compare ;
+
+HOOK: home io-backend ( -- dir )
+
+M: object home "" resource-path ;
\ No newline at end of file
diff --git a/core/io/pathnames/summary.txt b/core/io/pathnames/summary.txt
new file mode 100644 (file)
index 0000000..de19eed
--- /dev/null
@@ -0,0 +1 @@
+Pathname manipulation
index a579153353a1032f60d917bbf6276a3450957b3b..41cc878c7977ba88be9c4fde352ecb7e3d3229d2 100644 (file)
@@ -20,13 +20,13 @@ ARTICLE: "io.streams.c" "ANSI C streams"
 
 ABOUT: "io.streams.c"
 
-HELP: <c-reader> ( in -- stream )
-{ $values { "in" "a C FILE* handle" } { "stream" "a new stream" } }
+HELP: <c-reader>
+{ $values { "handle" "a C FILE* handle" } { "stream" "a new stream" } }
 { $description "Creates a stream which reads data by calling C standard library functions." }
 { $notes "Usually C streams are only used during bootstrap, and non-blocking OS-specific I/O routines are used during normal operation." } ;
 
-HELP: <c-writer> ( out -- stream )
-{ $values { "out" "a C FILE* handle" } { "stream" "a new stream" } }
+HELP: <c-writer>
+{ $values { "handle" "a C FILE* handle" } { "stream" "a new stream" } }
 { $description "Creates a stream which writes data by calling C standard library functions." }
 { $notes "Usually C streams are only used during bootstrap, and non-blocking OS-specific I/O routines are used during normal operation." } ;
 
index 4a3d94a1722f47ef3dfb8af5da4bbbf38f4d7146..3dde9152d08eeb55624c951673debdc475e1c79d 100644 (file)
@@ -1,4 +1,4 @@
-USING: tools.test io.files io io.streams.c
+USING: tools.test io.files io.files.temp io io.streams.c
 io.encodings.ascii strings ;
 IN: io.streams.c.tests
 
index 320025b124d9fe91e5298ebf475e4750ae6e86c5..0702f4931fff135c72b569f3f9aff2eca20f7338 100644 (file)
@@ -17,7 +17,7 @@ IN: kernel.tests
 
 [ ] [ :c ] unit-test
 
-[ { } set-retainstack r> ] [ { "kernel-error" 13 f f } = ] must-fail-with
+[ 3 [ { } set-retainstack ] dip ] [ { "kernel-error" 13 f f } = ] must-fail-with
 
 [ ] [ :c ] unit-test
 
@@ -35,7 +35,7 @@ IN: kernel.tests
 
 [ ] [ [ :c ] with-string-writer drop ] unit-test
 
-: overflow-r 3 >r overflow-r ;
+: overflow-r 3 [ overflow-r ] dip ;
 
 [ overflow-r ] [ { "kernel-error" 14 f f } = ] must-fail-with
 
index 9522aa5a0bb37ee515bc48b61846a40ac53931c7..5a32ca2dced334b4bc4696dea7bd015daae4a2f8 100644 (file)
@@ -37,11 +37,11 @@ SYMBOL: type-numbers
 
 : cell-bits ( -- n ) 8 cells ; inline
 
-: bootstrap-cell \ cell get cell or ; inline
+: bootstrap-cell ( -- n ) \ cell get cell or ; inline
 
-: bootstrap-cells bootstrap-cell * ; inline
+: bootstrap-cells ( m -- n ) bootstrap-cell * ; inline
 
-: bootstrap-cell-bits 8 bootstrap-cells ; inline
+: bootstrap-cell-bits ( -- n ) 8 bootstrap-cells ; inline
 
 : first-bignum ( -- n )
     cell-bits (first-bignum) ; inline
index 3c2b7f67e2eecc618bdf01b3b77e5bc740f83fed..2f7ab751038c692c0dbd2d918fac0c5b92c7d5c7 100644 (file)
@@ -180,6 +180,7 @@ HELP: 1-
 } ;
 
 HELP: ?1+
+{ $values { "x" { $maybe number } } { "y" number } }
 { $description "If the input is not " { $link f } ", adds one. Otherwise, outputs a " { $snippet "0" } "." } ;
 
 HELP: sq
old mode 100644 (file)
new mode 100755 (executable)
index 2434bf8..7c9be86
@@ -64,7 +64,7 @@ PRIVATE>
 : recip ( x -- y ) 1 swap / ; inline
 : sgn ( x -- n ) dup 0 < [ drop -1 ] [ 0 > 1 0 ? ] if ; inline
 
-: ?1+ [ 1+ ] [ 0 ] if* ; inline
+: ?1+ ( x -- y ) [ 1+ ] [ 0 ] if* ; inline
 
 : rem ( x y -- z ) abs tuck mod over + swap mod ; foldable
 
@@ -114,15 +114,15 @@ M: float fp-infinity? ( float -- ? )
 
 <PRIVATE
 
-: iterate-prep 0 -rot ; inline
+: iterate-prep ( n quot -- i n quot ) 0 -rot ; inline
 
-: if-iterate? [ 2over < ] 2dip if ; inline
+: if-iterate? ( i n true false -- ) [ 2over < ] 2dip if ; inline
 
 : iterate-step ( i n quot -- i n quot )
     #! Apply quot to i, keep i and quot, hide n.
     swap [ 2dup 2slip ] dip swap ; inline
 
-: iterate-next [ 1+ ] 2dip ; inline
+: iterate-next ( i n quot -- i' n quot ) [ 1+ ] 2dip ; inline
 
 PRIVATE>
 
index c8d3095ce651abba62209671e83fe8346b4364f2..ef006bbc21f742f7184fcbdf1cf5adae3052bc45 100644 (file)
@@ -1,5 +1,5 @@
 USING: help.markup help.syntax kernel math quotations
-math.private words ;
+math.private words words.symbol ;
 IN: math.order
 
 HELP: <=>
index 6794825897e540e9b8547d92ebfe55c17f4b961b..11a6a9d8a991a1247219bf8ebb20b64a9739c9c0 100644 (file)
@@ -6,9 +6,10 @@ IN: memory.tests
 ! LOL
 [ ] [
     vm
+    "-i=" image append
     "-generations=2"
     "-e=USING: memory io prettyprint system ; input-stream gc . 0 exit"
-    3array try-process
+    4array try-process
 ] unit-test
 
 [ [ ] instances ] must-infer
index 4716a8fe999190488c5c70a4bf86be63295bb023..1cc3d86e9866a9e2f5501f5191780b366abdd3a4 100644 (file)
@@ -34,7 +34,7 @@ ARTICLE: "namespaces.private" "Namespace implementation details"
 ARTICLE: "namespaces" "Variables and namespaces"
 "The " { $vocab-link "namespaces" } " vocabulary implements simple dynamically-scoped variables."
 $nl
-"A variable is an entry in an assoc of bindings, where the assoc is implicit rather than passed on the stack. These assocs are termed " { $emphasis "namespaces" } ". Nesting of scopes is implemented with a search order on namespaces, defined by a " { $emphasis "namestack" } ". Since namespaces are just assoc, any object can be used as a variable, however by convention, variables are keyed by symbols (see " { $link "symbols" } ")."
+"A variable is an entry in an assoc of bindings, where the assoc is implicit rather than passed on the stack. These assocs are termed " { $emphasis "namespaces" } ". Nesting of scopes is implemented with a search order on namespaces, defined by a " { $emphasis "namestack" } ". Since namespaces are just assoc, any object can be used as a variable, however by convention, variables are keyed by symbols (see " { $link "words.symbol" } ")."
 $nl
 "The " { $link get } " and " { $link set } " words read and write variable values. The " { $link get } " word searches up the chain of nested namespaces, while " { $link set } " always sets variable values in the current namespace only. Namespaces are dynamically scoped; when a quotation is called from a nested scope, any words called by the quotation also execute in that scope."
 { $subsection get }
index 92e5922802bbab824b4691a228d27f1792282303..625c1e9c4318e7ccd7c6fbc5de779ffe64523198 100644 (file)
@@ -1,78 +1,10 @@
 USING: help.markup help.syntax kernel sequences words
 math strings vectors quotations generic effects classes
 vocabs.loader definitions io vocabs source-files
-quotations namespaces compiler.units assocs lexer ;
+quotations namespaces compiler.units assocs lexer
+words.symbol words.alias words.constant vocabs.parser ;
 IN: parser
 
-ARTICLE: "vocabulary-search-shadow" "Shadowing word names"
-"If adding a vocabulary to the search path results in a word in another vocabulary becoming inaccessible due to the new vocabulary defining a word with the same name, we say that the old word has been " { $emphasis "shadowed" } "."
-$nl
-"Here is an example where shadowing occurs:"
-{ $code
-    "IN: foe"
-    "USING: sequences io ;"
-    ""
-    ": append"
-    "    \"foe::append calls sequences:append\" print  append ;"
-    ""
-    "IN: fee"
-    ""
-    ": append"
-    "    \"fee::append calls fee:append\" print  append ;"
-    ""
-    "IN: fox"
-    "USE: foe"
-    ""
-    ": append"
-    "    \"fox::append calls foe:append\" print  append ;"
-    ""
-    "\"1234\" \"5678\" append print"
-    ""
-    "USE: fox"
-    "\"1234\" \"5678\" append print"
-}
-"When placed in a source file and run, the above code produces the following output:"
-{ $code
-    "foe:append calls sequences:append"
-    "12345678"
-    "fee:append calls foe:append"
-    "foe:append calls sequences:append"
-    "12345678"
-}
-"The " { $vocab-link "qualified" } " vocabulary contains some tools for helping with shadowing." ;
-
-ARTICLE: "vocabulary-search-errors"  "Word lookup errors"
-"If the parser cannot not find a word in the current vocabulary search path, it attempts to look for the word in all loaded vocabularies."
-$nl
-"If " { $link auto-use? } " mode is off, a restartable error is thrown with a restart for each vocabulary in question, together with a restart which defers the word in the current vocabulary, as if " { $link POSTPONE: DEFER: } " was used."
-$nl
-"If " { $link auto-use? } " mode is on and only one vocabulary has a word with this name, the vocabulary is added to the search path and parsing continues."
-$nl
-"If any restarts were invoked, or if " { $link auto-use? } " is on, the parser will print the correct " { $link POSTPONE: USING: } " after parsing completes. This form can be copy and pasted back into the source file."
-{ $subsection auto-use? } ;
-
-ARTICLE: "vocabulary-search" "Vocabulary search path"
-"When the parser reads a token, it attempts to look up a word named by that token. The lookup is performed by searching each vocabulary in the search path, in order."
-$nl
-"For a source file the vocabulary search path starts off with one vocabulary:"
-{ $code "syntax" }
-"The " { $vocab-link "syntax" } " vocabulary consists of a set of parsing words for reading Factor data and defining new words."
-$nl
-"In the listener, the " { $vocab-link "scratchpad" } " is the default vocabulary for new word definitions. However, when loading source files, there is no default vocabulary. Defining words before declaring a vocabulary with " { $link POSTPONE: IN: } " results in an error."
-$nl
-"At the interactive listener, the default search path contains many more vocabularies. Details on the default search path and parser invocation are found in " { $link "parser" } "."
-$nl
-"Three parsing words deal with the vocabulary search path:"
-{ $subsection POSTPONE: USE: }
-{ $subsection POSTPONE: USING: }
-{ $subsection POSTPONE: IN: }
-"Private words can be defined; note that this is just a convention and they can be called from other vocabularies anyway:"
-{ $subsection POSTPONE: <PRIVATE }
-{ $subsection POSTPONE: PRIVATE> }
-{ $subsection "vocabulary-search-errors" }
-{ $subsection "vocabulary-search-shadow" }
-{ $see-also "words" "qualified" } ;
-
 ARTICLE: "reading-ahead" "Reading ahead"
 "Parsing words can consume input:"
 { $subsection scan }
index cc97b78eb65a1e98bffa4e05825770ca4f727490..2870be9a4f5a798337b34448c3e644f8ce66fe46 100644 (file)
@@ -1,8 +1,9 @@
 USING: arrays math parser tools.test kernel generic words
-io.streams.string namespaces classes effects source-files
-assocs sequences strings io.files definitions continuations
-sorting classes.tuple compiler.units debugger vocabs
-vocabs.loader accessors eval combinators lexer ;
+io.streams.string namespaces classes effects source-files assocs
+sequences strings io.files io.pathnames definitions
+continuations sorting classes.tuple compiler.units debugger
+vocabs vocabs.loader accessors eval combinators lexer
+vocabs.parser words.symbol ;
 IN: parser.tests
 
 \ run-file must-infer
@@ -485,20 +486,73 @@ must-fail-with
 
 [ t ] [ "staging-problem-test-2" "parser.tests" lookup >boolean ] unit-test
 
-[ "DEFER: blah" eval ] [ error>> error>> no-current-vocab? ] must-fail-with
+[ "DEFER: blahy" eval ] [ error>> error>> no-current-vocab? ] must-fail-with
 
 [
-    "IN: parser.tests : blah ; parsing FORGET: blah" eval
+    "IN: parser.tests : blahy ; parsing FORGET: blahy" eval
 ] [
     error>> staging-violation?
 ] must-fail-with
 
 ! Bogus error message
-DEFER: blah
+DEFER: blahy
 
-[ "IN: parser.tests USE: kernel TUPLE: blah < tuple ; : blah ; TUPLE: blah < tuple ; : blah ;" eval ]
-[ error>> error>> def>> \ blah eq? ] must-fail-with
+[ "IN: parser.tests USE: kernel TUPLE: blahy < tuple ; : blahy ; TUPLE: blahy < tuple ; : blahy ;" eval ]
+[ error>> error>> def>> \ blahy eq? ] must-fail-with
 
 [ ] [ f lexer set f file set "Hello world" note. ] unit-test
 
 [ "CHAR: \\u9999999999999" eval ] must-fail
+
+SYMBOLS: a b c ;
+
+[ a ] [ a ] unit-test
+[ b ] [ b ] unit-test
+[ c ] [ c ] unit-test
+
+DEFER: blah
+
+[ ] [ "IN: parser.tests GENERIC: blah" eval ] unit-test
+[ ] [ "IN: parser.tests SYMBOLS: blah ;" eval ] unit-test
+
+[ f ] [ \ blah generic? ] unit-test
+[ t ] [ \ blah symbol? ] unit-test
+
+DEFER: blah1
+
+[ "IN: parser.tests SINGLETONS: blah1 blah1 blah1 ;" eval ]
+[ error>> error>> def>> \ blah1 eq? ]
+must-fail-with
+
+IN: qualified.tests.foo
+: x 1 ;
+: y 5 ;
+IN: qualified.tests.bar
+: x 2 ;
+: y 4 ;
+IN: qualified.tests.baz
+: x 3 ;
+
+QUALIFIED: qualified.tests.foo
+QUALIFIED: qualified.tests.bar
+[ 1 2 3 ] [ qualified.tests.foo:x qualified.tests.bar:x x ] unit-test
+
+QUALIFIED-WITH: qualified.tests.bar p
+[ 2 ] [ p:x ] unit-test
+
+RENAME: x qualified.tests.baz => y
+[ 3 ] [ y ] unit-test
+
+FROM: qualified.tests.baz => x ;
+[ 3 ] [ x ] unit-test
+[ 3 ] [ y ] unit-test
+
+EXCLUDE: qualified.tests.bar => x ;
+[ 3 ] [ x ] unit-test
+[ 4 ] [ y ] unit-test
+
+[ "IN: qualified.tests FROM: qualified.tests => doesnotexist ;" eval ]
+[ error>> no-word-error? ] must-fail-with
+
+[ "IN: qualified.tests RENAME: doesnotexist qualified.tests => blahx" eval ]
+[ error>> no-word-error? ] must-fail-with
index 4586cfe34ec4614f055547815c2f6ca05c6ee073..81ed91290c1236035943716d6d047d6874701b1d 100644 (file)
@@ -1,11 +1,11 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: arrays definitions generic assocs kernel math namespaces
-sequences strings vectors words quotations io
+sequences strings vectors words words.symbol quotations io
 combinators sorting splitting math.parser effects continuations
 io.files io.streams.string vocabs io.encodings.utf8 source-files
 classes hashtables compiler.errors compiler.units accessors sets
-lexer ;
+lexer vocabs.parser ;
 IN: parser
 
 : location ( -- loc )
@@ -29,27 +29,6 @@ t parser-notes set-global
         "Note: " write dup print
     ] when drop ;
 
-SYMBOL: use
-SYMBOL: in
-
-: (use+) ( vocab -- )
-    vocab-words use get push ;
-
-: use+ ( vocab -- )
-    load-vocab (use+) ;
-
-: add-use ( seq -- ) [ use+ ] each ;
-
-: set-use ( seq -- )
-    [ vocab-words ] V{ } map-as sift use set ;
-
-: check-vocab-string ( name -- name )
-    dup string?
-    [ "Vocabulary name must be a string" throw ] unless ;
-
-: set-in ( name -- )
-    check-vocab-string dup in set create-vocab (use+) ;
-
 M: parsing-word stack-effect drop (( parsed -- parsed )) ;
 
 TUPLE: no-current-vocab ;
@@ -69,17 +48,6 @@ TUPLE: no-current-vocab ;
 
 : CREATE-WORD ( -- word ) CREATE dup reset-generic ;
 
-: word-restarts ( name possibilities -- restarts )
-    natural-sort
-    [ [ vocabulary>> "Use the " " vocabulary" surround ] keep ] { } map>assoc
-    swap "Defer word in current vocabulary" swap 2array
-    suffix ;
-
-ERROR: no-word-error name ;
-
-: <no-word-error> ( name possibilities -- error restarts )
-    [ drop \ no-word-error boa ] [ word-restarts ] 2bi ;
-
 SYMBOL: amended-use
 
 SYMBOL: auto-use?
index 2df11d485874958d20f3acbd412844110f307abc..2c3b41ca4e9dc444c2e3865e118171bd1530c26a 100644 (file)
@@ -7,9 +7,11 @@ IN: quotations
 
 <PRIVATE
 
-: uncurry dup 2 slot swap 3 slot ; inline
+: uncurry ( curry -- obj quot )
+    dup 2 slot swap 3 slot ; inline
 
-: uncompose dup 2 slot swap 3 slot ; inline
+: uncompose ( compose -- quot quot2 )
+    dup 2 slot swap 3 slot ; inline
 
 PRIVATE>
 
index 7354759bb6a834c91ef1ce6fa776777e1a42c526..b3df0b889f7492b84d6f305481e3f5abedc0c65b 100644 (file)
@@ -191,6 +191,10 @@ HELP: exchange-unsafe
 { $values { "m" "a non-negative integer" } { "n" "a non-negative integer" } { "seq" "a mutable sequence" } }
 { $description "Unsafe variant of " { $link exchange } " that does not perform bounds checks." } ;
 
+HELP: first-unsafe
+{ $values { "seq" sequence } { "first" "the first element" } }
+{ $contract "Unsafe variant of " { $link first } " that does not perform bounds checks." } ;
+
 HELP: first2-unsafe
 { $values { "seq" sequence } { "first" "the first element" } { "second" "the second element" } }
 { $contract "Unsafe variant of " { $link first2 } " that does not perform bounds checks." } ;
@@ -602,7 +606,7 @@ HELP: reverse
 
 { reverse <reversed> reverse-here } related-words
 
-HELP: <reversed> ( seq -- reversed )
+HELP: <reversed>
 { $values { "seq" sequence } { "reversed" "a new sequence" } }
 { $description "Creates an instance of the " { $link reversed } " class." }
 { $see-also "virtual-sequences" } ;
@@ -649,7 +653,7 @@ HELP: <slice>
 HELP: repetition
 { $class-description "A virtual sequence consisting of " { $snippet "elt" } " repeated " { $snippet "len" } " times. Repetitions are created by calling " { $link <repetition> } "." } ;
 
-HELP: <repetition> ( len elt -- repetition )
+HELP: <repetition>
 { $values { "len" "a non-negative integer" } { "elt" object } { "repetition" repetition } }
 { $description "Creates a new " { $link repetition } "." }
 { $examples
index 7bb509cb67072e8aabcdef8ea02cbe5537c0eac9..31c7c8a4d73b2aa71e4df3f5bb5d22c2c19acafb 100644 (file)
@@ -101,16 +101,16 @@ M: integer nth-unsafe drop ;
 
 INSTANCE: integer immutable-sequence
 
-: first-unsafe
+: first-unsafe ( seq -- first )
     0 swap nth-unsafe ; inline
 
-: first2-unsafe
+: first2-unsafe ( seq -- first second )
     [ first-unsafe ] [ 1 swap nth-unsafe ] bi ; inline
 
-: first3-unsafe
+: first3-unsafe ( seq -- first second third )
     [ first2-unsafe ] [ 2 swap nth-unsafe ] bi ; inline
 
-: first4-unsafe
+: first4-unsafe ( seq -- first second third fourth )
     [ first3-unsafe ] [ 3 swap nth-unsafe ] bi ; inline
 
 : exchange-unsafe ( m n seq -- )
@@ -121,17 +121,17 @@ INSTANCE: integer immutable-sequence
 
 : (tail) ( seq n -- from to seq ) over length rot ; inline
 
-: from-end [ dup length ] dip - ; inline
+: from-end ( seq n -- seq n' ) [ dup length ] dip - ; inline
 
-: (2sequence)
+: (2sequence) ( obj1 obj2 seq -- seq )
     tuck 1 swap set-nth-unsafe
     tuck 0 swap set-nth-unsafe ; inline
 
-: (3sequence)
+: (3sequence) ( obj1 obj2 obj3 seq -- seq )
     tuck 2 swap set-nth-unsafe
     (2sequence) ; inline
 
-: (4sequence)
+: (4sequence) ( obj1 obj2 obj3 obj4 seq -- seq )
     tuck 3 swap set-nth-unsafe
     (3sequence) ; inline
 
@@ -331,7 +331,7 @@ PRIVATE>
 <PRIVATE
 
 : (each) ( seq quot -- n quot' )
-    [ dup length swap [ nth-unsafe ] curry ] dip compose ; inline
+    [ [ length ] keep [ nth-unsafe ] curry ] dip compose ; inline
 
 : (collect) ( quot into -- quot' )
     [ [ keep ] dip set-nth-unsafe ] 2curry ; inline
@@ -453,10 +453,10 @@ PRIVATE>
     over [ 2pusher [ each ] 2dip ] dip tuck [ like ] 2bi@ ; inline
 
 : monotonic? ( seq quot -- ? )
-    [ dup length 1- swap ] dip (monotonic) all? ; inline
+    [ [ length 1- ] keep ] dip (monotonic) all? ; inline
 
 : interleave ( seq between quot -- )
-    [ (interleave) ] 2curry [ dup length swap ] dip 2each ; inline
+    [ (interleave) ] 2curry [ [ length ] keep ] dip 2each ; inline
 
 : accumulator ( quot -- quot' vec )
     V{ } clone [ [ push ] curry compose ] keep ; inline
@@ -679,7 +679,7 @@ PRIVATE>
 <PRIVATE
 
 : joined-length ( seq glue -- n )
-    [ dup sum-lengths swap length 1 [-] ] dip length * + ;
+    [ [ sum-lengths ] [ length 1 [-] ] bi ] dip length * + ;
 
 PRIVATE>
 
index 438e604e789c433f8d0c9de28139b4ac0f601e7e..99766cadc218b2d289fe129b569ef816378bc8cf 100644 (file)
@@ -22,10 +22,6 @@ PREDICATE: writer < word "writer" word-prop ;
     [ drop define ]
     3bi ;
 
-: create-accessor ( name effect -- word )
-    [ "accessors" create dup ] dip
-    "declared-effect" set-word-prop ;
-
 : reader-quot ( slot-spec -- quot )
     [
         dup offset>> ,
@@ -35,7 +31,8 @@ PREDICATE: writer < word "writer" word-prop ;
     ] [ ] make ;
 
 : reader-word ( name -- word )
-    ">>" append (( object -- value )) create-accessor
+    ">>" append "accessors" create
+    dup (( object -- value )) "declared-effect" set-word-prop
     dup t "reader" set-word-prop ;
 
 : reader-props ( slot-spec -- assoc )
@@ -50,7 +47,8 @@ PREDICATE: writer < word "writer" word-prop ;
     define-typecheck ;
 
 : writer-word ( name -- word )
-    "(>>" ")" surround (( value object -- )) create-accessor
+    "(>>" ")" surround "accessors" create
+    dup (( value object -- )) "declared-effect" set-word-prop
     dup t "writer" set-word-prop ;
 
 ERROR: bad-slot-value value class ;
@@ -95,15 +93,16 @@ ERROR: bad-slot-value value class ;
     define-typecheck ;
 
 : setter-word ( name -- word )
-    ">>" prepend (( object value -- object )) create-accessor ;
+    ">>" prepend "accessors" create ;
 
 : define-setter ( name -- )
     dup setter-word dup deferred? [
-        [ \ over , swap writer-word , ] [ ] make define-inline
+        [ \ over , swap writer-word , ] [ ] make
+        (( object value -- object )) define-inline
     ] [ 2drop ] if ;
 
 : changer-word ( name -- word )
-    "change-" prepend (( object quot -- object )) create-accessor ;
+    "change-" prepend "accessors" create ;
 
 : define-changer ( name -- )
     dup changer-word dup deferred? [
@@ -112,7 +111,7 @@ ERROR: bad-slot-value value class ;
             over reader-word 1quotation
             [ dip call ] curry [ dip swap ] curry %
             swap setter-word ,
-        ] [ ] make define-inline
+        ] [ ] make (( object quot -- object )) define-inline
     ] [ 2drop ] if ;
 
 : define-slot-methods ( class slot-spec -- )
index 47399b61767940882bfa83bc17878c441811e669..938bf17cd2f664f79b65bbc9ddc2cb01b34bef87 100644 (file)
@@ -42,15 +42,28 @@ TUPLE: merge
         ] if
     ] if ; inline
 
-: l-elt   [ from1>> ] [ seq>> ] bi nth-unsafe ; inline
-: r-elt   [ from2>> ] [ seq>> ] bi nth-unsafe ; inline
-: l-done? [ from1>> ] [ to1>> ] bi number= ; inline
-: r-done? [ from2>> ] [ to2>> ] bi number= ; inline
-: dump-l  [ [ from1>> ] [ to1>> ] [ seq>> ] tri ] [ accum>> ] bi dump ; inline
-: dump-r  [ [ from2>> ] [ to2>> ] [ seq>> ] tri ] [ accum>> ] bi dump ; inline
-: l-next  [ [ l-elt ] [ [ 1+ ] change-from1 drop ] bi ] [ accum>> ] bi push ; inline
-: r-next  [ [ r-elt ] [ [ 1+ ] change-from2 drop ] bi ] [ accum>> ] bi push ; inline
-: decide  [ [ l-elt ] [ r-elt ] bi ] dip call +gt+ eq? ; inline
+: l-elt ( merge -- elt ) [ from1>> ] [ seq>> ] bi nth-unsafe ; inline
+
+: r-elt ( merge -- elt ) [ from2>> ] [ seq>> ] bi nth-unsafe ; inline
+
+: l-done? ( merge -- ? ) [ from1>> ] [ to1>> ] bi eq? ; inline
+
+: r-done? ( merge -- ? ) [ from2>> ] [ to2>> ] bi eq? ; inline
+
+: dump-l ( merge -- )
+    [ [ from1>> ] [ to1>> ] [ seq>> ] tri ] [ accum>> ] bi dump ; inline
+
+: dump-r ( merge -- )
+    [ [ from2>> ] [ to2>> ] [ seq>> ] tri ] [ accum>> ] bi dump ; inline
+
+: l-next ( merge -- )
+    [ [ l-elt ] [ [ 1+ ] change-from1 drop ] bi ] [ accum>> ] bi push ; inline
+
+: r-next ( merge -- )
+    [ [ r-elt ] [ [ 1+ ] change-from2 drop ] bi ] [ accum>> ] bi push ; inline
+
+: decide ( merge -- ? )
+    [ [ l-elt ] [ r-elt ] bi ] dip call +gt+ eq? ; inline
 
 : (merge) ( merge quot: ( elt1 elt2 -- <=> ) -- )
     over r-done? [ drop dump-l ] [
index 89ffbfd795330370a7ab0e9b9d628823480a8bd8..2c9e2172cca06ea2e31f298d030b73a920b8b4ca 100644 (file)
@@ -1,4 +1,4 @@
-USING: help.markup help.syntax vocabs.loader io.files strings
+USING: help.markup help.syntax vocabs.loader io.pathnames strings
 definitions quotations compiler.units ;
 IN: source-files
 
index 3ae50a9a150fa768b1087a175a9faa368617c20e..7ecc967e9ee35a61c72a1fb9b66d39c91ee2aead 100644 (file)
@@ -1,9 +1,9 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: arrays definitions generic assocs kernel math namespaces
-sequences strings vectors words quotations io
-combinators sorting splitting math.parser effects continuations
-io.files checksums checksums.crc32 vocabs hashtables graphs
+sequences strings vectors words quotations io io.files
+io.pathnames combinators sorting splitting math.parser effects
+continuations checksums checksums.crc32 vocabs hashtables graphs
 compiler.units io.encodings.utf8 accessors ;
 IN: source-files
 
index 0c3f918fdca03879a8dd65c817b2e94272b0e8a6..7e4c80d4aeb2198681819be450310fbc6609313e 100644 (file)
@@ -7,11 +7,12 @@ IN: strings
 
 <PRIVATE
 
-: string-hashcode 3 slot ; inline
+: string-hashcode ( str -- n ) 3 slot ; inline
 
-: set-string-hashcode 3 set-slot ; inline
+: set-string-hashcode ( n str -- ) 3 set-slot ; inline
 
-: reset-string-hashcode f swap set-string-hashcode ; inline
+: reset-string-hashcode ( str -- )
+    f swap set-string-hashcode ; inline
 
 : rehash-string ( str -- )
     1 over sequence-hashcode swap set-string-hashcode ; inline
index 2b7de36d562b8f0bfdd796e474af463092740305..36f427d5ad021e980977c1cb745d713140157604 100644 (file)
@@ -1,7 +1,7 @@
 USING: generic help.syntax help.markup kernel math parser words
 effects classes generic.standard classes.tuple generic.math
-generic.standard arrays io.files vocabs.loader io sequences
-assocs ;
+generic.standard arrays io.pathnames vocabs.loader io sequences
+assocs words.symbol words.alias words.constant ;
 IN: syntax
 
 ARTICLE: "parser-algorithm" "Parser algorithm"
@@ -144,7 +144,7 @@ ARTICLE: "syntax-byte-arrays" "Byte array syntax"
 
 ARTICLE: "syntax-pathnames" "Pathname syntax"
 { $subsection POSTPONE: P" }
-"Pathnames are documented in " { $link "pathnames" } "." ;
+"Pathnames are documented in " { $link "io.pathnames" } "." ;
 
 ARTICLE: "syntax-literals" "Literals"
 "Many different types of objects can be constructed at parse time via literal syntax. Numbers are a special case since support for reading them is built-in to the parser. All other literals are constructed via parsing words."
@@ -344,7 +344,41 @@ HELP: SYMBOL:
 { $description "Defines a new symbol word in the current vocabulary. Symbols push themselves on the stack when executed, and are used to identify variables (see " { $link "namespaces" } ") as well as for storing crufties in word properties (see " { $link "word-props" } ")." }
 { $examples { $example "USE: prettyprint" "IN: scratchpad" "SYMBOL: foo\nfoo ." "foo" } } ;
 
-{ define-symbol POSTPONE: SYMBOL: } related-words
+{ define-symbol POSTPONE: SYMBOL: POSTPONE: SYMBOLS: } related-words
+
+HELP: SYMBOLS:
+{ $syntax "SYMBOLS: words... ;" }
+{ $values { "words" "a sequence of new words to define" } }
+{ $description "Creates a new symbol for every token until the " { $snippet ";" } "." }
+{ $examples { $example "USING: prettyprint ;" "IN: scratchpad" "SYMBOLS: foo bar baz ;\nfoo . bar . baz ." "foo\nbar\nbaz" } } ;
+
+HELP: SINGLETONS:
+{ $syntax "SINGLETONS: words... ;" }
+{ $values { "words" "a sequence of new words to define" } }
+{ $description "Creates a new singleton for every token until the " { $snippet ";" } "." } ;
+
+HELP: ALIAS:
+{ $syntax "ALIAS: new-word existing-word" }
+{ $values { "new-word" word } { "existing-word" word } }
+{ $description "Creates a new inlined word that calls the existing word." }
+{ $examples
+    { $example "USING: prettyprint sequences ;"
+               "IN: alias.test"
+               "ALIAS: sequence-nth nth"
+               "0 { 10 20 30 } sequence-nth ."
+               "10"
+    }
+} ;
+
+{ define-alias POSTPONE: ALIAS: } related-words
+
+HELP: CONSTANT:
+{ $syntax "CONSTANT: word value" }
+{ $values { "word" word } { "value" object } }
+{ $description "Creates a word which pushes a value on the stack." }
+{ $examples { $code "CONSTANT: magic 1" "CONSTANT: science HEX: ff0f" } } ;
+
+{ define-constant POSTPONE: CONSTANT: } related-words
 
 HELP: \
 { $syntax "\\ word" }
@@ -376,6 +410,47 @@ HELP: USING:
 { $description "Adds a list of vocabularies to the front of the search path, with later vocabularies taking precedence." }
 { $errors "Throws an error if one of the vocabularies does not exist." } ;
 
+HELP: QUALIFIED:
+{ $syntax "QUALIFIED: vocab" }
+{ $description "Similar to " { $link POSTPONE: USE: } " but loads vocabulary with prefix." }
+{ $examples { $example
+    "USING: prettyprint ;"
+    "QUALIFIED: math"
+    "1 2 math:+ ." "3"
+} } ;
+
+HELP: QUALIFIED-WITH:
+{ $syntax "QUALIFIED-WITH: vocab word-prefix" }
+{ $description "Works like " { $link POSTPONE: QUALIFIED: } " but uses " { $snippet "word-prefix" } " as prefix." }
+{ $examples { $code
+    "USING: prettyprint ;"
+    "QUALIFIED-WITH: math m"
+    "1 2 m:+ ."
+    "3"
+} } ;
+
+HELP: FROM:
+{ $syntax "FROM: vocab => words ... ;" }
+{ $description "Imports " { $snippet "words" } " from " { $snippet "vocab" } "." }
+{ $examples { $code
+    "FROM: math.parser => bin> hex> ; ! imports only bin> and hex>" } } ;
+
+HELP: EXCLUDE:
+{ $syntax "EXCLUDE: vocab => words ... ;" }
+{ $description "Imports everything from " { $snippet "vocab" } " excluding " { $snippet "words" } "." }
+{ $examples { $code
+    "EXCLUDE: math.parser => bin> hex> ; ! imports everything but bin> and hex>" } } ;
+
+HELP: RENAME:
+{ $syntax "RENAME: word vocab => newname" }
+{ $description "Imports " { $snippet "word" } " from " { $snippet "vocab" } ", but renamed to " { $snippet "newname" } "." }
+{ $examples { $example
+    "USING: prettyprint ;"
+    "RENAME: + math => -"
+    "2 3 - ."
+    "5"
+} } ;
+
 HELP: IN:
 { $syntax "IN: vocabulary" }
 { $values { "vocabulary" "a new vocabulary name" } }
index 0b7d9d008f0bce0138e14ebb66957e0b8871c6eb..c81fc9201e64794e573a2309c099de384cb52845 100644 (file)
@@ -2,12 +2,13 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors alien arrays byte-arrays definitions generic
 hashtables kernel math namespaces parser lexer sequences strings
-strings.parser sbufs vectors words quotations io assocs
-splitting classes.tuple generic.standard generic.math
-generic.parser classes io.files vocabs classes.parser
-classes.union classes.intersection classes.mixin
-classes.predicate classes.singleton classes.tuple.parser
-compiler.units combinators effects.parser slots ;
+strings.parser sbufs vectors words words.symbol words.constant
+words.alias quotations io assocs splitting classes.tuple
+generic.standard generic.math generic.parser classes
+io.pathnames vocabs vocabs.parser classes.parser classes.union
+classes.intersection classes.mixin classes.predicate
+classes.singleton classes.tuple.parser compiler.units
+combinators effects.parser slots ;
 IN: bootstrap.syntax
 
 ! These words are defined as a top-level form, instead of with
@@ -22,7 +23,8 @@ IN: bootstrap.syntax
     "syntax" lookup t "delimiter" set-word-prop ;
 
 : define-syntax ( name quot -- )
-    [ "syntax" lookup dup ] dip define make-parsing ;
+    [ dup "syntax" lookup [ dup ] [ no-word-error ] ?if ] dip
+    define make-parsing ;
 
 [
     { "]" "}" ";" ">>" } [ define-delimiter ] each
@@ -51,6 +53,22 @@ IN: bootstrap.syntax
 
     "USING:" [ ";" parse-tokens add-use ] define-syntax
 
+    "QUALIFIED:" [ scan dup add-qualified ] define-syntax
+
+    "QUALIFIED-WITH:" [ scan scan add-qualified ] define-syntax
+
+    "FROM:" [
+        scan "=>" expect ";" parse-tokens swap add-words-from
+    ] define-syntax
+
+    "EXCLUDE:" [
+        scan "=>" expect ";" parse-tokens swap add-words-excluding
+    ] define-syntax
+
+    "RENAME:" [
+        scan scan "=>" expect scan add-renamed-word
+    ] define-syntax
+
     "HEX:" [ 16 parse-base ] define-syntax
     "OCT:" [ 8 parse-base ] define-syntax
     "BIN:" [ 2 parse-base ] define-syntax
@@ -97,6 +115,24 @@ IN: bootstrap.syntax
         CREATE-WORD define-symbol
     ] define-syntax
 
+    "SYMBOLS:" [
+        ";" parse-tokens
+        [ create-in dup reset-generic define-symbol ] each
+    ] define-syntax
+
+    "SINGLETONS:" [
+        ";" parse-tokens
+        [ create-class-in define-singleton-class ] each
+    ] define-syntax
+    
+    "ALIAS:" [
+        CREATE-WORD scan-word define-alias
+    ] define-syntax
+
+    "CONSTANT:" [
+        CREATE scan-object define-constant
+    ] define-syntax
+
     "DEFER:" [
         scan current-vocab create
         dup old-definitions get [ delete-at ] with each
@@ -169,8 +205,7 @@ IN: bootstrap.syntax
     ] define-syntax
 
     "C:" [
-        CREATE-WORD
-        scan-word [ boa ] curry define-inline
+        CREATE-WORD scan-word define-boa-word
     ] define-syntax
 
     "ERROR:" [
diff --git a/core/syntax/tags.txt b/core/syntax/tags.txt
deleted file mode 100755 (executable)
index e69de29..0000000
index 533bea76fcd4a35b9831cc64e8d0f670db2190b1..57bc824f59b0614b62433d2fdce1674eef3ff28a 100644 (file)
@@ -3,7 +3,7 @@ USING: vocabs.loader tools.test continuations vocabs math
 kernel arrays sequences namespaces io.streams.string
 parser source-files words assocs classes.tuple definitions
 debugger compiler.units tools.vocabs accessors eval
-combinators ;
+combinators vocabs.parser ;
 
 ! This vocab should not exist, but just in case...
 [ ] [
index 97fbfe8a0762a6026976ec501034bcde88620074..53f8fbadf6e7c588c29a3264cb6a13ec4dd1b43f 100644 (file)
@@ -1,9 +1,9 @@
 ! Copyright (C) 2007, 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: namespaces make sequences io.files kernel assocs words
-vocabs definitions parser continuations io hashtables sorting
-source-files arrays combinators strings system math.parser
-compiler.errors splitting init accessors sets ;
+USING: namespaces make sequences io io.files io.pathnames kernel
+assocs words vocabs definitions parser continuations hashtables
+sorting source-files arrays combinators strings system
+math.parser compiler.errors splitting init accessors sets ;
 IN: vocabs.loader
 
 SYMBOL: vocab-roots
diff --git a/core/vocabs/parser/authors.txt b/core/vocabs/parser/authors.txt
new file mode 100644 (file)
index 0000000..3095b9b
--- /dev/null
@@ -0,0 +1,3 @@
+Daniel Ehrenberg
+Bruno Deferrari
+Slava Pestov
diff --git a/core/vocabs/parser/parser-docs.factor b/core/vocabs/parser/parser-docs.factor
new file mode 100644 (file)
index 0000000..7186240
--- /dev/null
@@ -0,0 +1,80 @@
+USING: help.markup help.syntax parser ;
+IN: vocabs.parser
+
+ARTICLE: "vocabulary-search-shadow" "Shadowing word names"
+"If adding a vocabulary to the search path results in a word in another vocabulary becoming inaccessible due to the new vocabulary defining a word with the same name, we say that the old word has been " { $emphasis "shadowed" } "."
+$nl
+"Here is an example where shadowing occurs:"
+{ $code
+    "IN: foe"
+    "USING: sequences io ;"
+    ""
+    ": append"
+    "    \"foe::append calls sequences:append\" print  append ;"
+    ""
+    "IN: fee"
+    ""
+    ": append"
+    "    \"fee::append calls fee:append\" print  append ;"
+    ""
+    "IN: fox"
+    "USE: foe"
+    ""
+    ": append"
+    "    \"fox::append calls foe:append\" print  append ;"
+    ""
+    "\"1234\" \"5678\" append print"
+    ""
+    "USE: fox"
+    "\"1234\" \"5678\" append print"
+}
+"When placed in a source file and run, the above code produces the following output:"
+{ $code
+    "foe:append calls sequences:append"
+    "12345678"
+    "fee:append calls foe:append"
+    "foe:append calls sequences:append"
+    "12345678"
+} ;
+
+ARTICLE: "vocabulary-search-errors"  "Word lookup errors"
+"If the parser cannot not find a word in the current vocabulary search path, it attempts to look for the word in all loaded vocabularies."
+$nl
+"If " { $link auto-use? } " mode is off, a restartable error is thrown with a restart for each vocabulary in question, together with a restart which defers the word in the current vocabulary, as if " { $link POSTPONE: DEFER: } " was used."
+$nl
+"If " { $link auto-use? } " mode is on and only one vocabulary has a word with this name, the vocabulary is added to the search path and parsing continues."
+$nl
+"If any restarts were invoked, or if " { $link auto-use? } " is on, the parser will print the correct " { $link POSTPONE: USING: } " after parsing completes. This form can be copy and pasted back into the source file."
+{ $subsection auto-use? } ;
+
+ARTICLE: "vocabulary-search" "Vocabulary search path"
+"When the parser reads a token, it attempts to look up a word named by that token. The lookup is performed by searching each vocabulary in the search path, in order."
+$nl
+"For a source file the vocabulary search path starts off with one vocabulary:"
+{ $code "syntax" }
+"The " { $vocab-link "syntax" } " vocabulary consists of a set of parsing words for reading Factor data and defining new words."
+$nl
+"In the listener, the " { $vocab-link "scratchpad" } " is the default vocabulary for new word definitions. However, when loading source files, there is no default vocabulary. Defining words before declaring a vocabulary with " { $link POSTPONE: IN: } " results in an error."
+$nl
+"At the interactive listener, the default search path contains many more vocabularies. Details on the default search path and parser invocation are found in " { $link "parser" } "."
+$nl
+"Three parsing words deal with the vocabulary search path:"
+{ $subsection POSTPONE: IN: }
+{ $subsection POSTPONE: USE: }
+{ $subsection POSTPONE: USING: }
+"There are some additional parsing words give more control over word lookup than is offered by " { $link POSTPONE: USE: } " and " { $link POSTPONE: USING: } ":"
+{ $subsection POSTPONE: QUALIFIED: }
+{ $subsection POSTPONE: QUALIFIED-WITH: }
+{ $subsection POSTPONE: FROM: }
+{ $subsection POSTPONE: EXCLUDE: }
+{ $subsection POSTPONE: RENAME: }
+"These words are useful when there is no way to avoid using two vocabularies with identical word names in the same source file."
+$nl
+"Private words can be defined; note that this is just a convention and they can be called from other vocabularies anyway:"
+{ $subsection POSTPONE: <PRIVATE }
+{ $subsection POSTPONE: PRIVATE> }
+{ $subsection "vocabulary-search-errors" }
+{ $subsection "vocabulary-search-shadow" }
+{ $see-also "words" } ;
+
+ABOUT: "vocabulary-search"
diff --git a/core/vocabs/parser/parser.factor b/core/vocabs/parser/parser.factor
new file mode 100644 (file)
index 0000000..35feae3
--- /dev/null
@@ -0,0 +1,59 @@
+! Copyright (C) 2007, 2008 Daniel Ehrenberg, Bruno Deferrari,
+! Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: assocs hashtables kernel namespaces sequences
+sets strings vocabs sorting accessors arrays ;
+IN: vocabs.parser
+
+ERROR: no-word-error name ;
+
+: word-restarts ( name possibilities -- restarts )
+    natural-sort
+    [ [ vocabulary>> "Use the " " vocabulary" surround ] keep ] { } map>assoc
+    swap "Defer word in current vocabulary" swap 2array
+    suffix ;
+
+: <no-word-error> ( name possibilities -- error restarts )
+    [ drop \ no-word-error boa ] [ word-restarts ] 2bi ;
+
+SYMBOL: use
+SYMBOL: in
+
+: (use+) ( vocab -- )
+    vocab-words use get push ;
+
+: use+ ( vocab -- )
+    load-vocab (use+) ;
+
+: add-use ( seq -- ) [ use+ ] each ;
+
+: set-use ( seq -- )
+    [ vocab-words ] V{ } map-as sift use set ;
+
+: add-qualified ( vocab prefix -- )
+    [ load-vocab vocab-words ] [ CHAR: : suffix ] bi*
+    [ swap [ prepend ] dip ] curry assoc-map
+    use get push ;
+
+: partial-vocab ( words vocab -- assoc )
+    load-vocab vocab-words
+    [ dupd at [ no-word-error ] unless* ] curry { } map>assoc ;
+
+: add-words-from ( words vocab -- )
+    partial-vocab use get push ;
+
+: partial-vocab-excluding ( words vocab -- assoc )
+    load-vocab [ vocab-words keys swap diff ] keep partial-vocab ;
+
+: add-words-excluding ( words vocab -- )
+    partial-vocab-excluding use get push ;
+
+: add-renamed-word ( word vocab new-name -- )
+    [ load-vocab vocab-words dupd at [ ] [ no-word-error ] ?if ] dip
+    associate use get push ;
+
+: check-vocab-string ( name -- name )
+    dup string? [ "Vocabulary name must be a string" throw ] unless ;
+
+: set-in ( name -- )
+    check-vocab-string dup in set create-vocab (use+) ;
diff --git a/core/words/alias/alias-docs.factor b/core/words/alias/alias-docs.factor
new file mode 100644 (file)
index 0000000..d569647
--- /dev/null
@@ -0,0 +1,12 @@
+USING: help.markup help.syntax words.alias ;
+IN: words.alias
+
+ARTICLE: "words.alias" "Word aliasing"
+"There is a syntax for defining new names for existing words. This useful for C library bindings, for example in the Win32 API, where words need to be renamed for symmetry."
+$nl
+"Define a new word that aliases another word:"
+{ $subsection POSTPONE: ALIAS: }
+"Define an alias at run-time:"
+{ $subsection define-alias } ;
+
+ABOUT: "words.alias"
diff --git a/core/words/alias/alias.factor b/core/words/alias/alias.factor
new file mode 100644 (file)
index 0000000..0615e83
--- /dev/null
@@ -0,0 +1,16 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: quotations effects accessors sequences words kernel ;
+IN: words.alias
+
+PREDICATE: alias < word "alias" word-prop ;
+
+: define-alias ( new old -- )
+    [ [ 1quotation ] [ stack-effect ] bi define-inline ]
+    [ drop t "alias" set-word-prop ] 2bi ;
+
+M: alias reset-word
+    [ call-next-method ] [ f "alias" set-word-prop ] bi ;
+
+M: alias stack-effect
+    def>> first stack-effect ;
diff --git a/core/words/alias/authors.txt b/core/words/alias/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/core/words/alias/summary.txt b/core/words/alias/summary.txt
new file mode 100644 (file)
index 0000000..15690a7
--- /dev/null
@@ -0,0 +1 @@
+Defining multiple words with the same name
diff --git a/core/words/constant/constant.factor b/core/words/constant/constant.factor
new file mode 100644 (file)
index 0000000..43b7f37
--- /dev/null
@@ -0,0 +1,10 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors kernel sequences words ;
+IN: words.constant
+
+PREDICATE: constant < word ( obj -- ? )
+    def>> dup length 1 = [ first word? not ] [ drop f ] if ;
+
+: define-constant ( word value -- )
+    [ ] curry (( -- value )) define-inline ;
diff --git a/core/words/symbol/symbol-docs.factor b/core/words/symbol/symbol-docs.factor
new file mode 100644 (file)
index 0000000..1fcba9a
--- /dev/null
@@ -0,0 +1,28 @@
+USING: help.syntax help.markup words.symbol words compiler.units ;
+IN: words.symbol
+
+HELP: symbol
+{ $description "The class of symbols created by " { $link POSTPONE: SYMBOL: } "." } ;
+
+HELP: define-symbol
+{ $values { "word" word } }
+{ $description "Defines the word to push itself on the stack when executed. This is the run time equivalent of " { $link POSTPONE: SYMBOL: } "." }
+{ $notes "This word must be called from inside " { $link with-compilation-unit } "." }
+{ $side-effects "word" } ;
+
+ARTICLE: "words.symbol" "Symbols"
+"A symbol pushes itself on the stack when executed. By convention, symbols are used as variable names (" { $link "namespaces" } ")."
+{ $subsection symbol }
+{ $subsection symbol? }
+"Defining symbols at parse time:"
+{ $subsection POSTPONE: SYMBOL: }
+{ $subsection POSTPONE: SYMBOLS: }
+"Defining symbols at run time:"
+{ $subsection define-symbol }
+"Symbols are just compound definitions in disguise. The following two lines are equivalent:"
+{ $code
+    "SYMBOL: foo"
+    ": foo ( -- value ) \\ foo ;"
+} ;
+
+ABOUT: "words.symbol"
diff --git a/core/words/symbol/symbol.factor b/core/words/symbol/symbol.factor
new file mode 100644 (file)
index 0000000..a107808
--- /dev/null
@@ -0,0 +1,15 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel sequences accessors definitions
+words words.constant ;
+IN: words.symbol
+
+PREDICATE: symbol < constant ( obj -- ? )
+    [ def>> ] [ [ ] curry ] bi sequence= ;
+
+M: symbol definer drop \ SYMBOL: f ;
+
+M: symbol definition drop f ;
+
+: define-symbol ( word -- )
+    dup define-constant ;
index aaf14617b374f6a5627cf3e07ee6493e95227c6f..764df9924cded9bae3354bdf1376f3c82bdaf231 100644 (file)
@@ -33,21 +33,7 @@ $nl
 { $subsection define-inline }
 "Word definitions should declare their stack effect, unless the definition is completely trivial. See " { $link "effect-declaration" } "."
 $nl
-"All other types of word definitions, such as " { $link "symbols" } " and " { $link "generic" } ", are just special cases of the above." ;
-
-ARTICLE: "symbols" "Symbols"
-"A symbol pushes itself on the stack when executed. By convention, symbols are used as variable names (" { $link "namespaces" } ")."
-{ $subsection symbol }
-{ $subsection symbol? }
-"Defining symbols at parse time:"
-{ $subsection POSTPONE: SYMBOL: }
-"Defining symbols at run time:"
-{ $subsection define-symbol }
-"Symbols are just compound definitions in disguise. The following two lines are equivalent:"
-{ $code
-    "SYMBOL: foo"
-    ": foo \\ foo ;"
-} ;
+"All other types of word definitions, such as " { $link "words.symbol" } " and " { $link "generic" } ", are just special cases of the above." ;
 
 ARTICLE: "primitives" "Primitives"
 "Primitives are words defined in the Factor VM. They provide the essential low-level services to the rest of the system."
@@ -91,7 +77,8 @@ ARTICLE: "word-definition" "Defining words"
 }
 "The latter is a more dynamic feature that can be used to implement code generation and such, and in fact parse time defining words are implemented in terms of run time defining words."
 { $subsection "colon-definition" }
-{ $subsection "symbols" }
+{ $subsection "words.symbol" }
+{ $subsection "words.alias" }
 { $subsection "primitives" }
 { $subsection "deferred" }
 { $subsection "declarations" }
@@ -193,9 +180,6 @@ HELP: deferred
 HELP: primitive
 { $description "The class of primitive words." } ;
 
-HELP: symbol
-{ $description "The class of symbols created by " { $link POSTPONE: SYMBOL: } "." } ;
-
 HELP: word-prop
 { $values { "word" word } { "name" "a property name" } { "value" "a property value" } }
 { $description "Retrieves a word property. Word property names are conventionally strings." } ;
@@ -214,12 +198,6 @@ HELP: word-xt ( word -- start end )
 { $values { "word" word } { "start" "the word's start address" } { "end" "the word's end address" } }
 { $description "Outputs the machine code address of the word's definition." } ;
 
-HELP: define-symbol
-{ $values { "word" word } }
-{ $description "Defines the word to push itself on the stack when executed. This is the run time equivalent of " { $link POSTPONE: SYMBOL: } "." }
-{ $notes "This word must be called from inside " { $link with-compilation-unit } "." }
-{ $side-effects "word" } ;
-
 HELP: define
 { $values { "word" word } { "def" quotation } }
 { $description "Defines the word to call a quotation when executed. This is the run time equivalent of " { $link POSTPONE: : } "." }
@@ -344,6 +322,6 @@ HELP: make-inline
 { $side-effects "word" } ;
 
 HELP: define-inline
-{ $values { "word" word } { "quot" quotation } }
+{ $values { "word" word } { "def" quotation } { "effect" effect } }
 { $description "Defines a word and makes it " { $link POSTPONE: inline } "." }
 { $side-effects "word" } ;
index 09ebcb6b777668dd2c5a7c40ef4884aaedc00093..10c17a0e79a1048e5054c1bc434174864d302dd3 100644 (file)
@@ -1,7 +1,7 @@
 USING: arrays generic assocs kernel math namespaces
 sequences tools.test words definitions parser quotations
 vocabs continuations classes.tuple compiler.units
-io.streams.string accessors eval ;
+io.streams.string accessors eval words.symbol ;
 IN: words.tests
 
 [ 4 ] [
index 8c144b03a2bac8f3ac3b7eb96d80ce0832b8050a..c75711ea39c4e6217ac55776cc16547fa9803b91 100644 (file)
@@ -28,11 +28,6 @@ PREDICATE: deferred < word ( obj -- ? )
 M: deferred definer drop \ DEFER: f ;
 M: deferred definition drop f ;
 
-PREDICATE: symbol < word ( obj -- ? )
-    [ def>> ] [ [ ] curry ] bi sequence= ;
-M: symbol definer drop \ SYMBOL: f ;
-M: symbol definition drop f ;
-
 PREDICATE: primitive < word ( obj -- ? )
     [ def>> [ do-primitive ] tail? ]
     [ sub-primitive>> >boolean ]
@@ -192,11 +187,8 @@ SYMBOL: visited
 : make-foldable ( word -- )
     dup make-flushable t "foldable" set-word-prop ;
 
-: define-inline ( word quot -- )
-    dupd define make-inline ;
-
-: define-symbol ( word -- )
-    dup [ ] curry define-inline ;
+: define-inline ( word def effect -- )
+    [ define-declared ] [ 2drop make-inline ] 3bi ;
 
 GENERIC: reset-word ( word -- )
 
index 383812e602721e12807e57e9615d5d1aabca881a..fbdfa9c66bb41397f312da904873c51c41efbf1b 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 James Cash
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel sequences symbols fry words assocs linked-assocs tools.annotations
+USING: kernel sequences fry words assocs linked-assocs tools.annotations
 coroutines lexer parser quotations arrays namespaces continuations ;
 IN: advice
 
diff --git a/extra/assoc-heaps/assoc-heaps-docs.factor b/extra/assoc-heaps/assoc-heaps-docs.factor
deleted file mode 100644 (file)
index 8beaf9c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: help.markup help.syntax io.streams.string ;
-IN: assoc-heaps
-
-HELP: <assoc-heap>
-{ $description "Constructs a new " { $link assoc-heap } " from two existing data structures." } ;
-
-HELP: <unique-max-heap>
-{ $values
-    
-     { "unique-heap" assoc-heap } }
-{ $description "Creates a new " { $link assoc-heap } " where the assoc is a hashtable and the heap is a max-heap. Popping an element from the heap leaves this element in the hashtable to ensure that the element will not be processed again." } ;
-
-HELP: <unique-min-heap>
-{ $values
-     { "unique-heap" assoc-heap } }
-{ $description "Creates a new " { $link assoc-heap } " where the assoc is a hashtable and the heap is a min-heap. Popping an element from the heap leaves this element in the hashtable to ensure that the element will not be processed again." } ;
-
-{ <unique-max-heap> <unique-min-heap> } related-words
-
-HELP: assoc-heap
-{ $description "A data structure containing an assoc and a heap to get certain properties with better time constraints at the expense of more space and complexity. For instance, a hashtable and a heap can be combined into one assoc-heap to get a sorted data structure with O(1) lookup. Operations on assoc-heap may update both the assoc and the heap or leave them out of sync if it's advantageous." } ;
-
-ARTICLE: "assoc-heaps" "Associative heaps"
-"The " { $vocab-link "assoc-heaps" } " vocabulary combines exists to synthesize data structures with better time properties than either of the two component data structures alone." $nl
-"Associative heap constructor:"
-{ $subsection <assoc-heap> }
-"Unique heaps:"
-{ $subsection <unique-min-heap> }
-{ $subsection <unique-max-heap> } ;
-
-ABOUT: "assoc-heaps"
diff --git a/extra/assoc-heaps/assoc-heaps-tests.factor b/extra/assoc-heaps/assoc-heaps-tests.factor
deleted file mode 100644 (file)
index 6ea3fe1..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: tools.test assoc-heaps ;
-IN: assoc-heaps.tests
diff --git a/extra/assoc-heaps/assoc-heaps.factor b/extra/assoc-heaps/assoc-heaps.factor
deleted file mode 100644 (file)
index a495aed..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs hashtables heaps kernel ;
-IN: assoc-heaps
-
-TUPLE: assoc-heap assoc heap ;
-
-C: <assoc-heap> assoc-heap
-
-: <unique-min-heap> ( -- unique-heap )
-    H{ } clone <min-heap> <assoc-heap> ;
-
-: <unique-max-heap> ( -- unique-heap )
-    H{ } clone <max-heap> <assoc-heap> ;
-
-M: assoc-heap heap-push* ( value key assoc-heap -- entry )
-    pick over assoc>> key? [
-        3drop f
-    ] [
-        [ assoc>> swapd set-at ] [ heap>> heap-push* ] 3bi
-    ] if ;
-
-M: assoc-heap heap-pop ( assoc-heap -- value key )
-    heap>> heap-pop ;
-
-M: assoc-heap heap-peek ( assoc-heap -- value key )
-    heap>> heap-peek ;
-
-M: assoc-heap heap-empty? ( assoc-heap -- value key )
-    heap>> heap-empty? ;
diff --git a/extra/assoc-heaps/authors.txt b/extra/assoc-heaps/authors.txt
deleted file mode 100644 (file)
index b4bd0e7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
\ No newline at end of file
diff --git a/extra/assocs/lib/authors.txt b/extra/assocs/lib/authors.txt
deleted file mode 100644 (file)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/extra/assocs/lib/lib-tests.factor b/extra/assocs/lib/lib-tests.factor
deleted file mode 100644 (file)
index c7e1aa4..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-USING: kernel tools.test sequences vectors assocs.lib ;
-IN: assocs.lib.tests
-
-{ 1 1 } [ [ ?push ] histogram ] must-infer-as
-
-! substitute
-[ { 2 } ] [ { 1 } H{ { 1 2 } } [ ?at drop ] curry map ] unit-test
-[ { 3 } ] [ { 3 } H{ { 1 2 } } [ ?at drop ] curry map ] unit-test
-
-[ 2 ] [ 1 H{ { 1 2 } } [ ] [ ] if-at ] unit-test
-[ 3 ] [ 3 H{ { 1 2 } } [ ] [ ] if-at ] unit-test
-
-[ "hi" ] [ 1 H{ { 1 2 } } [ drop "hi" ] when-at ] unit-test
-[ 3 ] [ 3 H{ { 1 2 } } [ drop "hi" ] when-at ] unit-test
-[ 2 ] [ 1 H{ { 1 2 } } [ drop "hi" ] unless-at ] unit-test
-[ "hi" ] [ 3 H{ { 1 2 } } [ drop "hi" ] unless-at ] unit-test
-
diff --git a/extra/assocs/lib/lib.factor b/extra/assocs/lib/lib.factor
deleted file mode 100755 (executable)
index f1b018f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-USING: arrays assocs kernel vectors sequences namespaces
-       random math.parser math fry ;
-
-IN: assocs.lib
-
-: set-assoc-stack ( value key seq -- )
-    dupd [ key? ] with find-last nip set-at ;
-
-: at-default ( key assoc -- value/key )
-    dupd at [ nip ] when* ;
-
-: replace-at ( assoc value key -- assoc )
-    [ dupd 1vector ] dip rot set-at ;
-
-: peek-at* ( assoc key -- obj ? )
-    swap at* dup [ [ peek ] dip ] when ;
-
-: peek-at ( assoc key -- obj )
-    peek-at* drop ;
-
-: >multi-assoc ( assoc -- new-assoc )
-    [ 1vector ] assoc-map ;
-
-: multi-assoc-each ( assoc quot -- )
-    [ with each ] curry assoc-each ; inline
-
-: insert ( value variable -- ) namespace push-at ;
-
-: generate-key ( assoc -- str )
-    [ 32 random-bits >hex ] dip
-    2dup key? [ nip generate-key ] [ drop ] if ;
-
-: set-at-unique ( value assoc -- key )
-    dup generate-key [ swap set-at ] keep ;
-
-: histogram ( assoc quot -- assoc' )
-    H{ } clone [
-        swap [ change-at ] 2curry assoc-each
-    ] keep ; inline
-
-: ?at ( obj assoc -- value/obj ? )
-    dupd at* [ [ nip ] [ drop ] if ] keep ;
-
-: if-at ( obj assoc quot1 quot2 -- )
-    [ ?at ] 2dip if ; inline
-
-: when-at ( obj assoc quot -- ) [ ] if-at ; inline
-
-: unless-at ( obj assoc quot -- ) [ ] swap if-at ; inline
diff --git a/extra/assocs/lib/summary.txt b/extra/assocs/lib/summary.txt
deleted file mode 100644 (file)
index 24c2825..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Non-core assoc words
diff --git a/extra/assocs/lib/tags.txt b/extra/assocs/lib/tags.txt
deleted file mode 100644 (file)
index 42d711b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-collections
index 9210097cabcace5da5beb5ba343a304deb36579f..def71e7e6702560b2073dfbdbbf411fcd6a67996 100644 (file)
@@ -15,7 +15,7 @@ USING: kernel namespaces math quotations arrays hashtables sequences threads
        ui.gadgets.theme
        ui.gadgets.handler
        accessors
-       namespaces.lib assocs.lib vars
+       vars fry
        rewrite-closures automata math.geometry.rect newfx ;
 
 IN: automata.ui
@@ -24,9 +24,9 @@ IN: automata.ui
 
 : draw-point ( y x value -- ) 1 = [ swap glVertex2i ] [ 2drop ] if ;
 
-: draw-line ( y line -- ) 0 swap [ >r 2dup r> draw-point 1+ ] each 2drop ;
+: draw-line ( y line -- ) 0 swap [ [ 2dup ] dip draw-point 1+ ] each 2drop ;
 
-: (draw-bitmap) ( bitmap -- ) 0 swap [ >r dup r> draw-line 1+ ] each drop ;
+: (draw-bitmap) ( bitmap -- ) 0 swap [ [ dup ] dip draw-line 1+ ] each drop ;
 
 : draw-bitmap ( bitmap -- ) GL_POINTS glBegin (draw-bitmap) glEnd ;
 
@@ -46,9 +46,9 @@ VAR: slate
 
 ! Create a quotation that is appropriate for buttons and gesture handler.
 
-: view-action ( quot -- quot ) [ drop [ ] with-view ] make* closed-quot ;
+: view-action ( quot -- quot ) '[ drop _ with-view ] closed-quot ;
 
-: view-button ( label quot -- ) >r <label> r> view-action <bevel-button> ;
+: view-button ( label quot -- button ) [ <label> ] dip view-action <bevel-button> ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
diff --git a/extra/bake/authors.txt b/extra/bake/authors.txt
deleted file mode 100644 (file)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/extra/bake/bake-tests.factor b/extra/bake/bake-tests.factor
deleted file mode 100644 (file)
index 64329de..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-USING: kernel tools.test bake ;
-
-IN: bake.tests
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: unit-test* ( input output -- ) swap unit-test ;
-
-: must-be-t ( in -- ) [ t ] swap unit-test ;
-: must-be-f ( in -- ) [ f ] swap unit-test ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-[ 10 20 30 `{ , , , } ] [ { 10 20 30 } ] unit-test*
-
-[ 10 20 30 `{ , { , } , } ] [ { 10 { 20 } 30 } ] unit-test*
-
-[ 10 { 20 21 22 } 30 `{ , , , } ] [ { 10 { 20 21 22 } 30 } ] unit-test*
-
-[ 10 { 20 21 22 } 30 `{ , @ , } ] [ { 10 20 21 22 30 } ] unit-test*
-
-[ { 1 2 3 } `{ @ } ] [ { 1 2 3 } ] unit-test*
-
-[ { 1 2 3 } { 4 5 6 } { 7 8 9 } `{ @ @ @ } ]
-[ { 1 2 3 4 5 6 7 8 9 } ]
-unit-test*
-
diff --git a/extra/bake/bake.factor b/extra/bake/bake.factor
deleted file mode 100644 (file)
index ef4b9d2..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-
-USING: kernel parser namespaces sequences quotations arrays vectors splitting
-       strings words math generalizations
-       macros combinators.lib combinators.conditional newfx ;
-
-IN: bake
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: ,
-SYMBOL: @
-
-: comma? ( obj -- ? ) , = ;
-: atsym? ( obj -- ? ) @ = ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-DEFER: [bake]
-
-: broil-element ( obj -- quot )
-    {
-      { [ comma?    ] [ drop [ >r ]          ] }
-      { [ f =       ] [ [ >r ] prefix-on     ] }
-      { [ integer?  ] [ [ >r ] prefix-on     ] }
-      { [ string?   ] [ [ >r ] prefix-on     ] }
-      { [ sequence? ] [ [bake] [ >r ] append ] }
-      { [ word?     ] [ literalize [ >r ] prefix-on ] }
-      { [ drop t    ] [ [ >r ] prefix-on     ] }
-    }
-  1cond ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: constructor ( seq -- quot )
-    {
-      { [ array? ]     [ length [ narray ] prefix-on ] }
-!      { [ quotation? ] [ length [ ncurry ] prefix-on [ ] prefix ] }
-      { [ quotation? ] [ length [ narray >quotation ] prefix-on ] }
-      { [ vector? ]    [ length [ narray >vector    ] prefix-on ] }
-    }
-  1cond ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: [broil] ( seq -- quot )
-    [ reverse [ broil-element ] map concat ]
-    [ length  [ drop [ r> ]   ] map concat ]
-    [ constructor ]
-  tri append append
-  >quotation ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: saved-sequence
-
-: [connector] ( -- quot )
-  saved-sequence get quotation? [ [ compose ] ] [ [ append ] ] if ;
-
-: [starter] ( -- quot )
-  saved-sequence get
-    {
-      { [ quotation? ] [ drop [  [ ] ] ] }
-      { [ array?     ] [ drop [  { } ] ] }
-      { [ vector?    ] [ drop [ V{ } ] ] }
-    }
-  1cond ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: [simmer] ( seq -- quot )
-
-  dup saved-sequence set
-
-  { @ } split reverse
-    [ [ [bake] [connector] append [ >r ] append ] map concat ]
-    [ length [ drop [ r> ] [connector] append   ] map concat ]
-  bi
-
-  >r 1 invert-index pluck r> ! remove the last append/compose
-
-  [starter] prepend
-
-  append ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: [bake] ( seq -- quot ) [ @ member? ] [ [simmer] ] [ [broil] ] 1if ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-MACRO: bake ( seq -- quot ) [bake] ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-:  `{ \ } [ >array     ] parse-literal \ bake parsed ; parsing
-: `V{ \ } [ >vector    ] parse-literal \ bake parsed ; parsing
-:  `[ \ ] [ >quotation ] parse-literal \ bake parsed ; parsing
\ No newline at end of file
diff --git a/extra/bake/fry/fry-tests.factor b/extra/bake/fry/fry-tests.factor
deleted file mode 100755 (executable)
index 74408dc..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-
-USING: tools.test math prettyprint kernel io arrays vectors sequences
-       generalizations bake bake.fry ;
-
-IN: bake.fry.tests
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: unit-test* ( input output -- ) swap unit-test ;
-
-: must-be-t ( in -- ) [ t ] swap unit-test ;
-: must-be-f ( in -- ) [ f ] swap unit-test ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-[ [ 3 + ] ] [ 3 '[ , + ] ] unit-test
-
-[ [ 1 3 + ] ] [ 1 3 '[ , , + ] ] unit-test
-
-[ [ 1 + ] ] [ 1 [ + ] '[ , @ ] ] unit-test
-
-[ [ 1 + . ] ] [ 1 [ + ] '[ , @ . ] ] unit-test
-
-[ [ + - ] ] [ [ + ] [ - ] '[ @ @ ] ] unit-test
-
-[ [ "a" write "b" print ] ]
-[ "a" "b" '[ , write , print ] ] unit-test
-
-[ [ 1 2 + 3 4 - ] ]
-[ [ + ] [ - ] '[ 1 2 @ 3 4 @ ] ] unit-test
-
-[ 1/2 ] [
-    1 '[ , _ / ] 2 swap call
-] unit-test
-
-[ { { 1 "a" "A" } { 1 "b" "B" } { 1 "c" "C" } } ] [
-    1 '[ , _ _ 3array ]
-    { "a" "b" "c" } { "A" "B" "C" } rot 2map
-] unit-test
-
-[ { { 1 "a" } { 1 "b" } { 1 "c" } } ] [
-    '[ 1 _ 2array ]
-    { "a" "b" "c" } swap map
-] unit-test
-
-[ 1 2 ] [
-    1 2 '[ _ , ] call
-] unit-test
-
-[ { { 1 "a" 2 } { 1 "b" 2 } { 1 "c" 2 } } ] [
-    1 2 '[ , _ , 3array ]
-    { "a" "b" "c" } swap map
-] unit-test
-
-: funny-dip '[ @ _ ] call ; inline
-
-[ "hi" 3 ] [ "h" "i" 3 [ append ] funny-dip ] unit-test
-
-[ { 1 2 3 } ] [
-    3 1 '[ , [ , + ] map ] call
-] unit-test
-
-[ { 1 { 2 { 3 } } } ] [
-    1 2 3 '[ , [ , [ , 1array ] call 2array ] call 2array ] call
-] unit-test
-
-{ 1 1 } [ '[ [ [ , ] ] ] ] must-infer-as
-
-[ { { { 3 } } } ] [
-    3 '[ [ [ , 1array ] call 1array ] call 1array ] call
-] unit-test
-
-[ { { { 3 } } } ] [
-    3 '[ [ [ , 1array ] call 1array ] call 1array ] call
-] unit-test
-
-! [ 10 20 30 40 '[ , V{ , { , } } , ] ] [ [ 10 V{ 20 { 30 } } 40 ] ] unit-test*
-
-[ 10 20 30 40 '[ , V{ , { , } } , ] ]
-[ [ 10 20 30 >r r> 1 narray >r >r r> r> 2 narray >vector 40 ] ]
-unit-test*
-
-[ { 1 2 3 } { 4 5 6 } { 7 8 9 } '[ , { V{ @ } { , } } ] call ]
-[
-  { 1 2 3 }
-  { V{ 4 5 6 } { { 7 8 9 } } }
-]
-unit-test*
-
diff --git a/extra/bake/fry/fry.factor b/extra/bake/fry/fry.factor
deleted file mode 100644 (file)
index d82500e..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-
-USING: kernel combinators arrays vectors quotations sequences splitting
-       parser macros sequences.deep
-       combinators.short-circuit combinators.conditional bake newfx ;
-
-IN: bake.fry
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: _
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-DEFER: (shallow-fry)
-DEFER: shallow-fry
-
-: ((shallow-fry)) ( accum quot adder -- result )
-  >r shallow-fry r>
-  append swap dup empty?
-    [ drop ]
-    [ [ prepose ] curry append ]
-  if ; inline
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: (shallow-fry) ( accum quot -- result )
-  dup empty?
-    [ drop 1quotation ]
-    [
-      unclip
-        {
-          { \ , [ [ curry   ] ((shallow-fry)) ] }
-          { \ @ [ [ compose ] ((shallow-fry)) ] }
-          [ swap >r suffix r> (shallow-fry) ]
-        }
-      case
-    ]
-  if ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: shallow-fry ( quot -- quot' ) [ ] swap (shallow-fry) ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: deep-fry ( quot -- quot )
-  { _ } split1-last dup
-    [
-      shallow-fry [ >r ] rot
-      deep-fry    [ [ dip ] curry r> compose ] 4array concat
-    ]
-    [ drop shallow-fry ]
-  if ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: bakeable? ( obj -- ? ) { [ array? ] [ vector? ] } 1|| ;
-
-: fry-specifier? ( obj -- ? ) { , @ } member-of? ;
-
-: count-inputs ( quot -- n ) flatten [ fry-specifier? ] count ;
-
-: commas ( n -- seq ) , <repetition> ;
-
-: [fry] ( quot -- quot' )
-    [
-        {
-          { [ callable? ] [ [ count-inputs commas ] [ [fry]  ] bi append ] }
-          { [ bakeable? ] [ [ count-inputs commas ] [ [bake] ] bi append ] }
-          { [ drop t    ] [ 1quotation                                   ] }
-        }
-      1cond
-    ]
-  map concat deep-fry ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-MACRO: fry ( seq -- quot ) [fry] ;
-
-: '[ \ ] [ >quotation ] parse-literal \ fry parsed ; parsing
diff --git a/extra/bake/summary.txt b/extra/bake/summary.txt
deleted file mode 100644 (file)
index cfc944a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Bake is similar to make but with additional features
index a409c9781546b24bf1ea43d0ffc59e54d334f9f1..0f8b5581dfe582ff2d413527f2bd29a0b407e89d 100644 (file)
@@ -20,7 +20,7 @@ C: <transaction> transaction
 : balance>> ( account -- balance ) transactions>> total ;
 
 : open-account ( name interest-rate interest-payment-day opening-date opening-balance -- account )
-    >r [ <account> ] keep r> "Account Opened" <transaction> >>transaction ;
+    [ [ <account> ] keep ] dip "Account Opened" <transaction> >>transaction ;
 
 : daily-rate ( yearly-rate day -- daily-rate )
     days-in-year / ;
@@ -56,7 +56,7 @@ C: <transaction> transaction
 
 : each-day ( quot start end -- )
     2dup before? [
-        >r dup >r over >r swap call r> r> 1 days time+ r> each-day
+        [ dup [ over [ swap call ] dip ] dip 1 days time+ ] dip each-day
     ] [
         3drop
     ] if ;
index f562072f280e5d74c61b66029ad2699a6eefb4c1..8e3918656a42c14614c62c6cedef05a4e0845515 100644 (file)
@@ -10,8 +10,8 @@ C: <tree-node> tree-node
     dup 0 > [
         1 -
         [ drop ]
-        [ >r 2 * 1 - r> bottom-up-tree ]
-        [ >r 2 *     r> bottom-up-tree ] 2tri
+        [ [ 2 * 1 - ] dip bottom-up-tree ]
+        [ [ 2 *     ] dip bottom-up-tree ] 2tri
     ] [
         drop f f
     ] if <tree-node> ; inline recursive
index 7b8e2d34c98b55662ebf9d726310a7657fdda459..7e65059643f6ff17d237dee32baeed49b68cb77c 100644 (file)
@@ -29,7 +29,7 @@ IN: benchmark.knucleotide
 : small-groups ( x n -- b )
     swap
     [ length swap - 1+ ] 2keep
-    [ >r over + r> subseq ] 2curry map ;
+    [ [ over + ] dip subseq ] 2curry map ;
 
 : handle-table ( inputs n -- )
     small-groups
index 218f566eda96bd24a8db9ce94ac84d1614b67be0..edc848a0caabde94b9f3959382070980d670af05 100644 (file)
@@ -2,7 +2,7 @@ USING: math math.order kernel arrays byte-arrays sequences
 colors.hsv benchmark.mandel.params accessors colors ;
 IN: benchmark.mandel.colors
 
-: scale 255 * >fixnum ; inline
+: scale ( x -- y ) 255 * >fixnum ; inline
 
 : scale-rgb ( rgba -- n )
     [ red>> scale ] [ green>> scale ] [ blue>> scale ] tri 3byte-array ;
index 64a673c8ec9faa7df8520f6f5fec69a30dc17422..1da3d91c61ef4ac7bfa15702ba5140f2b3f6c152 100755 (executable)
@@ -1,12 +1,13 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: io kernel math math.functions sequences prettyprint
-io.files io.encodings io.encodings.ascii io.encodings.binary fry
-benchmark.mandel.params benchmark.mandel.colors ;
+io.files io.files.temp io.encodings io.encodings.ascii
+io.encodings.binary fry benchmark.mandel.params
+benchmark.mandel.colors ;
 IN: benchmark.mandel
 
-: x-inc width  200000 zoom-fact * / ; inline
-: y-inc height 150000 zoom-fact * / ; inline
+: x-inc ( -- x ) width  200000 zoom-fact * / ; inline
+: y-inc ( -- y ) height 150000 zoom-fact * / ; inline
 
 : c ( i j -- c )
     [ x-inc * center real-part x-inc width 2 / * - + >float ]
index 305fc2e33ba1e76f059346d44f715118f903870e..84c41ee69fabcc5788218032442315a13a2cdddd 100644 (file)
@@ -5,7 +5,7 @@ math.constants math.functions math.vectors prettyprint
 sequences hints arrays ;
 IN: benchmark.nbody
 
-: solar-mass 4 pi sq * ; inline
+: solar-mass ( -- x ) 4 pi sq * ; inline
 : days-per-year 365.24 ; inline
 
 TUPLE: body
index ddb70972b9df1757d47e6abdd71c9475a167c801..246a962a55b554e00e8b4b1e239a4dbb222162c1 100644 (file)
@@ -6,7 +6,7 @@ bit-arrays make io ;
     2dup length >= [
         3drop
     ] [
-        f 2over set-nth-unsafe >r over + r> clear-flags
+        f 2over set-nth-unsafe [ over + ] dip clear-flags
     ] if ; inline recursive
 
 : (nsieve-bits) ( count i seq -- count )
@@ -14,7 +14,7 @@ bit-arrays make io ;
         2dup nth-unsafe [
             over dup 2 * pick clear-flags
             rot 1+ -rot ! increment count
-        ] when >r 1+ r> (nsieve-bits)
+        ] when [ 1+ ] dip (nsieve-bits)
     ] [
         2drop
     ] if ; inline recursive
index 11745e4463f67bc22d96cffd74777d2d6cdf5ce3..bbeccf750b3fca290c370e98b9901cb377752cd4 100644 (file)
@@ -6,7 +6,7 @@ byte-arrays make io ;
     2dup length >= [
         3drop
     ] [
-        0 2over set-nth-unsafe >r over + r> clear-flags
+        0 2over set-nth-unsafe [ over + ] dip clear-flags
     ] if ; inline recursive
 
 : (nsieve) ( count i seq -- count )
@@ -14,7 +14,7 @@ byte-arrays make io ;
         2dup nth-unsafe 0 > [
             over dup 2 * pick clear-flags
             rot 1+ -rot ! increment count
-        ] when >r 1+ r> (nsieve)
+        ] when [ 1+ ] dip (nsieve)
     ] [
         2drop
     ] if ; inline recursive
index 76d991f7347f387d1192748b06a2e53222301cdc..6fbc144e8078ba76573de611446d0560cda9893e 100644 (file)
@@ -6,7 +6,7 @@ arrays make io ;
     2dup length >= [
         3drop
     ] [
-        f 2over set-nth-unsafe >r over + r> clear-flags
+        f 2over set-nth-unsafe [ over + ] dip clear-flags
     ] if ; inline recursive
 
 : (nsieve) ( count i seq -- count )
@@ -14,7 +14,7 @@ arrays make io ;
         2dup nth-unsafe [
             over dup 2 * pick clear-flags
             rot 1+ -rot ! increment count
-        ] when >r 1+ r> (nsieve)
+        ] when [ 1+ ] dip (nsieve)
     ] [
         2drop
     ] if ; inline recursive
index 985c9a59b24477dd9f542290990bbe040d8a0cd2..d2eb4cdab516be55c12187715c799d1585e000b2 100755 (executable)
@@ -1,4 +1,5 @@
-USING: io.files io.encodings.ascii random math.parser io math ;
+USING: io io.files io.files.temp io.encodings.ascii random
+math.parser math ;
 IN: benchmark.random
 
 : random-numbers-path ( -- path )
index 7fe46e9c367783af1786e7ac4b66b8246fbe61cd..c16e47846efb16c13f719e8e49d3b1ea4ad850e3 100755 (executable)
@@ -2,8 +2,9 @@
 ! http://www.ffconsultancy.com/free/ray_tracer/languages.html
 
 USING: arrays accessors specialized-arrays.double io io.files
-io.encodings.binary kernel math math.functions math.vectors
-math.parser make sequences sequences.private words hints ;
+io.files.temp io.encodings.binary kernel math math.functions
+math.vectors math.parser make sequences sequences.private words
+hints ;
 IN: benchmark.raytracer
 
 ! parameters
index 665cbba30d60d9b5f234f7cb25f18aab0fc5ffd5..3298706da305a6d62f20e68c75fa42fd359f5cc4 100755 (executable)
@@ -1,6 +1,8 @@
-USING: io io.files io.streams.duplex kernel sequences
-sequences.private strings vectors words memoize splitting
-grouping hints tr continuations io.encodings.ascii
+! Copyright (C) 2006, 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: io io.files io.files.temp io.streams.duplex kernel
+sequences sequences.private strings vectors words memoize
+splitting grouping hints tr continuations io.encodings.ascii
 unicode.case ;
 IN: benchmark.reverse-complement
 
index a61293cd995025e006dfb9293f2ff2a76276c973..a32a98a13308e0d2a0aa0f30ba47026e562c379f 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io.encodings.utf8 io.files kernel sequences xml ;
+USING: io.encodings.utf8 io.directories io.files kernel
+sequences xml ;
 IN: benchmark.xml
 
 : xml-benchmark ( -- )
diff --git a/extra/bind-in/bind-in.factor b/extra/bind-in/bind-in.factor
deleted file mode 100644 (file)
index 78c797d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-USING: kernel parser lexer locals.parser locals.types ;
-
-IN: bind-in
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: ->
-  "[" parse-tokens make-locals dup push-locals
-  \ ] (parse-lambda) <lambda>
-  parsed-lambda
-  \ call parsed ; parsing
\ No newline at end of file
diff --git a/extra/bitfields/authors.txt b/extra/bitfields/authors.txt
deleted file mode 100644 (file)
index f990dd0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Daniel Ehrenberg
diff --git a/extra/bitfields/bitfields-docs.factor b/extra/bitfields/bitfields-docs.factor
deleted file mode 100644 (file)
index ae67023..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-USING: help.markup help.syntax ;
-IN: bitfields
-
-HELP: BITFIELD:
-{ $syntax "BITFIELD: name slot:size... ;" }
-{ $values { "name" "name of bitfield" }  { "slot" "names of slots" } { "size" "sizes of slots" } }
-{ $description "Creates a new bitfield specification, with the constructor <name> and slot accessors of the form name-slot. Slots' values can be changed by words of the form with-name-slot, with the stack effect " { $code "( newvalue bitfield -- newbitfield )" } ". The slots have the amount of space specified, in bits, after the colon. The constructor and setters do not check to make sure there is no overflow, and any inappropriately high value (except in the first field) will corrupt the bitfield. To check overflow, use " { $link POSTPONE: SAFE-BITFIELD: } " instead. Padding can be included by writing the binary number to be used as a pad in the middle of the bitfield specification. The first slot written will have the most significant digits. Note that bitfields do not form a class; they are merely integers. For efficiency across platforms, it is often the best to keep the total size at or below 29, allowing fixnums to be used on all platforms." }
-{ $see-also define-bitfield } ;
-
-HELP: define-bitfield
-{ $values { "classname" "a string" } { "slots" "slot specifications" } }
-{ $description "Defines a bitfield constructor and slot accessors and setters. The workings of these are described in more detail at " { $link POSTPONE: BITFIELD: } ". The slot specifications should be an assoc. Any key which looks like a binary number will be treated as padding." } ;
-
-HELP: SAFE-BITFIELD:
-{ $syntax "SAFE-BITFIELD: name slot:size... ;" }
-{ $values { "name" "name of bitfield" } { "slot" "name of slots" } { "size" "size in bits of slots" } }
-{ $description "Defines a bitfield in the same way as " { $link POSTPONE: BITFIELD: } " but the constructor and slot setters check for overflow." } ;
diff --git a/extra/bitfields/bitfields-tests.factor b/extra/bitfields/bitfields-tests.factor
deleted file mode 100755 (executable)
index bbd4aa3..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-USING: tools.test bitfields kernel ;
-IN: bitfields.tests
-
-SAFE-BITFIELD: foo bar:5 baz:10 111 bing:2 ;
-
-[ 21 ] [ 21 852 3 <foo> foo-bar ] unit-test
-[ 852 ] [ 21 852 3 <foo> foo-baz ] unit-test
-[ 3 ] [ 21 852 3 <foo> foo-bing ] unit-test
-
-[ 23 ] [ 21 852 3 <foo> 23 swap with-foo-bar foo-bar ] unit-test
-[ 855 ] [ 21 852 3 <foo> 855 swap with-foo-baz foo-baz ] unit-test
-[ 1 ] [ 21 852 3 <foo> 1 swap with-foo-bing foo-bing ] unit-test
-
-[ 100 0 0 <foo> ] must-fail
-[ 0 5000 0 <foo> ] must-fail
-[ 0 0 10 <foo> ] must-fail
-
-[ 100 0 with-foo-bar ] must-fail
-[ 5000 0 with-foo-baz ] must-fail
-[ 10 0 with-foo-bing ] must-fail
-
-[ BIN: 00101100000000111111 ] [ BIN: 101 BIN: 1000000001 BIN: 11 <foo> ] unit-test
diff --git a/extra/bitfields/bitfields.factor b/extra/bitfields/bitfields.factor
deleted file mode 100755 (executable)
index 90e588b..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-USING: parser lexer kernel math sequences namespaces make assocs
-summary words splitting math.parser arrays sequences.next
-mirrors generalizations compiler.units ;
-IN: bitfields
-
-! Example:
-! BITFIELD: blah short:16 char:8 nothing:5 ;
-! defines <blah> blah-short blah-char blah-nothing.
-
-! An efficient bitfield has a sum of 29 bits or less
-! so it can fit in a fixnum.
-! No class is defined and there is no overflow checking.
-! The first field is the most significant.
-
-: >ranges ( slots/sizes -- slots/ranges )
-    ! range is { start length }
-    reverse 0 swap [
-        swap >r tuck >r [ + ] keep r> 2array r> swap
-    ] assoc-map nip reverse ;
-
-SYMBOL: safe-bitfields? ! default f; set at parsetime
-
-TUPLE: check< number bound ;
-M: check< summary drop "Number exceeds upper bound" ;
-
-: check< ( num cmp -- num )
-    2dup < [ drop ] [ \ check< boa throw ] if ;
-
-: ?check ( length -- )
-    safe-bitfields? get [ 2^ , \ check< , ] [ drop ] if ;
-
-: put-together ( lengths -- )
-    ! messy because of bounds checking
-    dup length 1- [ \ >r , ] times [ 0 swap ] % [
-        ?check [ \ bitor , , [ shift r> ] % ] when*
-    ] each-next \ bitor , ;
-
-: padding-name? ( string -- ? )
-    [ "10" member? ] all? ;
-
-: pad ( i name -- )
-    bin> , , \ -nrot , ;
-
-: add-padding ( names -- ) 
-    <enum>
-    [ dup padding-name? [ pad ] [ 2drop ] if ] assoc-each ;
-
-: [constructor] ( names lengths -- quot )
-    [ swap add-padding put-together ] [ ] make ;
-
-: define-constructor ( classname slots -- )
-    [ keys ] keep values [constructor]
-    >r in get constructor-word dup save-location r>
-    define ;
-
-: range>accessor ( range -- quot )
-    [
-        dup first neg , \ shift ,
-        second 2^ 1- , \ bitand ,
-    ] [ ] make ;
-
-: [accessors] ( lengths -- accessors )
-    [ range>accessor ] map ;
-
-: clear-range ( range -- num )
-    first2 dupd + [ 2^ 1- ] bi@ bitnot bitor ;
-
-: range>setter ( range -- quot )
-    [
-        \ >r , dup second ?check \ r> ,
-        dup clear-range ,
-        [ bitand >r ] %
-        first , [ shift r> bitor ] %
-    ] [ ] make ;
-
-: [setters] ( lengths -- setters )
-    [ range>setter ] map ;
-
-: parse-slots ( slotspecs -- slots )
-    [ ":" split1 string>number [ dup length ] unless* ] { } map>assoc ;
-
-: define-slots ( prefix names quots -- )
-    >r [ "-" glue create-in ] with map r>
-    [ define ] 2each ;
-
-: define-accessors ( classname slots -- )
-    dup values [accessors]
-    >r keys r> define-slots ;
-
-: define-setters ( classname slots -- )
-    >r "with-" prepend r>
-    dup values [setters]
-    >r keys r> define-slots ;
-
-: filter-pad ( slots -- slots )
-    [ drop padding-name? not ] assoc-filter ;
-
-: define-bitfield ( classname slots -- ) 
-    [
-        [ define-constructor ] 2keep
-        >ranges filter-pad [ define-setters ] 2keep define-accessors
-    ] with-compilation-unit ;
-
-: parse-bitfield ( -- )
-    scan ";" parse-tokens parse-slots define-bitfield ;
-
-: BITFIELD:
-    parse-bitfield ; parsing
-
-: SAFE-BITFIELD:
-    [ safe-bitfields? on parse-bitfield ] with-scope ; parsing
diff --git a/extra/bitfields/summary.txt b/extra/bitfields/summary.txt
deleted file mode 100644 (file)
index fa2f7ff..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Simple system for specifying packed bitfields
diff --git a/extra/bitfields/tags.txt b/extra/bitfields/tags.txt
deleted file mode 100644 (file)
index f427429..0000000
+++ /dev/null
@@ -1 +0,0 @@
-extensions
index 5bf4bf3ad3594ae0a6f87882aac6e131c40015b6..8cb5acf74bda955558c97b140c18cba07272c078 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays classes kernel sequences sets
-io prettyprint multi-methods symbols ;
+io prettyprint multi-methods ;
 IN: boolean-expr
 
 ! Demonstrates the use of Unicode symbols in source files, and
diff --git a/extra/bubble-chamber/bubble-chamber-docs.factor b/extra/bubble-chamber/bubble-chamber-docs.factor
deleted file mode 100644 (file)
index 72ffb63..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-USING: help.syntax help.markup ;
-
-USING: bubble-chamber.particle.muon
-       bubble-chamber.particle.quark
-       bubble-chamber.particle.hadron
-       bubble-chamber.particle.axion ;
-
-IN: bubble-chamber
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-HELP: muon
-
-  { $class-description
-    "The muon is a colorful particle with an entangled friend."
-    "It draws both itself and its horizontally symmetric partner."
-    "A high range of speed and almost no speed decay allow the"
-    "muon to reach the extents of the window, often forming rings"
-    "where theta has decayed but speed remains stable. The result"
-    "is color almost everywhere in the general direction of collision,"
-    "stabilized into fuzzy rings." } ;
-
-HELP: quark
-
-  { $class-description
-    "The quark draws as a translucent black. Their large numbers"
-    "create fields of blackness overwritten only by the glowing shadows of "
-    "Hadrons. "
-    "quarks are allowed to accelerate away with speed decay values above 1.0. "
-    "Each quark has an entangled friend. Both particles are drawn identically,"
-    "mirrored along the y-axis." } ;
-
-HELP: hadron
-
-  { $class-description
-    "Hadrons collide from totally random directions. "
-    "Those hadrons that do not exit the drawing area, "
-    "tend to stabilize into perfect circular orbits. "
-    "Each hadron draws with a slight glowing emboss. "
-    "The hadron itself is not drawn." } ;
-
-HELP: axion
-
-  { $class-description
-    "The axion particle draws a bold black path. Axions exist "
-    "in a slightly higher dimension and as such are drawn with "
-    "elevated embossed shadows. Axions are quick to stabilize "
-    "and fall into single pixel orbits axions automatically "
-    "recollide themselves after stabilizing." } ;
-
-{ muon quark hadron axion } related-words
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-ARTICLE: "bubble-chamber" "Bubble Chamber"
-
-"The " { $vocab-link "bubble-chamber" } 
-" is a generative painting system of imaginary "
-"colliding particles. A single super-massive collision produces a "
-"discrete universe of four particle types. Particles draw their "
-"positions over time as pixel exposures.\n"
-"\n"
-"Four types of particles exist. The behavior and graphic appearance of "
-"each particle type is unique.\n"
-  { $subsection muon }
-  { $subsection quark }
-  { $subsection hadron }
-  { $subsection axion } 
-"\n"
-"After you run the vocabulary, a window will appear. Click the "
-"mouse in a random area to fire 11 particles of each type. "
-"Another way to fire particles is to press the "
-"spacebar. This fires all the particles.\n"
-"\n"
-"Bubble Chamber was created by Jared Tarbell. "
-"It was originally implemented in Processing. "
-"It was ported to Factor by Eduardo Cavazos. "
-"The original work is on display here: "
-{ $url
-"http://www.complexification.net/gallery/machines/bubblechamber/" } ;
-
-ABOUT: "bubble-chamber"
-
index 4b0db46c35356d21d025359ab130624efcdf0e69..4bddd4b6328b770072307dcc95aef35d332fe8ef 100644 (file)
 
-USING: kernel namespaces sequences random math math.constants math.libm vars
-       ui
-       processing
-       processing.gadget
-       bubble-chamber.common
-       bubble-chamber.particle
-       bubble-chamber.particle.muon
-       bubble-chamber.particle.quark
-       bubble-chamber.particle.hadron
-       bubble-chamber.particle.axion ;
+USING: kernel syntax accessors sequences
+       arrays calendar
+       combinators.cleave combinators.short-circuit 
+       locals math math.constants math.functions math.libm
+       math.order math.points math.vectors
+       namespaces random sequences threads ui ui.gadgets ui.gestures
+       math.ranges
+       colors
+       colors.gray
+       vars
+       multi-methods
+       multi-method-syntax
+       processing.shapes
+       frame-buffer ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 IN: bubble-chamber
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-VARS: particles muons quarks hadrons axions ;
+! This is a Factor implementation of an art piece by Jared Tarbell:
+!
+!   http://complexification.net/gallery/machines/bubblechamber/
+!
+! Jared's version is written in Processing (Java)
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! processing
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: 2random ( a b -- num ) 2dup swap - 100 / <range> random ;
+
+: 1random ( b -- num ) 0 swap 2random ;
+
+: at-fraction ( seq fraction -- val ) over length 1- * swap nth ;
+
+: at-fraction-of ( fraction seq -- val ) swap at-fraction ;
+
+: mouse ( -- point ) hand-loc get ;
+
+: mouse-x ( -- x ) mouse first  ;
+: mouse-y ( -- y ) mouse second ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! bubble-chamber.particle
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+GENERIC: collide ( particle -- )
+GENERIC: move    ( particle -- )
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TUPLE: particle
+  bubble-chamber pos vel speed speed-d theta theta-d theta-dd myc mya ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: initialize-particle ( particle -- particle )
+
+  0 0 {2} >>pos
+  0 0 {2} >>vel
+
+  0 >>speed
+  0 >>speed-d
+  0 >>theta
+  0 >>theta-d
+  0 >>theta-dd
 
-VAR: boom
+  0 0 0 1 rgba boa >>myc
+  0 0 0 1 rgba boa >>mya ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: collide-all ( -- )
+: center ( particle -- point ) bubble-chamber>> size>> 2 v/n ;
 
-  2 pi * 1random >collision-theta
+DEFER: collision-theta
 
-  particles> [ collide ] each ;
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: move-by ( obj delta -- obj ) over pos>> v+ >>pos ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: collide-one ( -- )
+: theta-dd-small? ( par limit -- par ? ) [ dup theta-dd>> abs ] dip < ;
+
+: random-theta-dd  ( par a b -- par ) 2random >>theta-dd ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: turn ( particle -- particle )
+  dup
+    [ speed>> ] [ theta>> { sin cos } <arr> ] bi n*v
+  >>vel ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: step-theta     ( p -- p ) [ ] [ theta>>   ] [ theta-d>>  ] tri + >>theta   ;
+: step-theta-d   ( p -- p ) [ ] [ theta-d>> ] [ theta-dd>> ] tri + >>theta-d ;
+: step-speed-sub ( p -- p ) [ ] [ speed>>   ] [ speed-d>>  ] tri - >>speed   ;
+: step-speed-mul ( p -- p ) [ ] [ speed>>   ] [ speed-d>>  ] tri * >>speed   ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+:: out-of-bounds? ( PARTICLE -- ? )
+  [let | X      [ PARTICLE pos>> first                    ]
+         Y      [ PARTICLE pos>> second                   ]
+         WIDTH  [ PARTICLE bubble-chamber>> size>> first  ]
+         HEIGHT [ PARTICLE bubble-chamber>> size>> second ] |
+
+    [let | LEFT   [ WIDTH  neg ]
+           RIGHT  [ WIDTH  2 * ]
+           BOTTOM [ HEIGHT neg ]
+           TOP    [ HEIGHT 2 * ] |
+
+      { [ X LEFT < ] [ X RIGHT > ] [ Y BOTTOM < ] [ Y TOP > ] } 0|| ] ] ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! bubble-chamber.particle.axion
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TUPLE: <axion> < particle ;
+
+: axion ( -- <axion> ) <axion> new initialize-particle ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+METHOD: collide ( <axion> -- )
+
+  dup center          >>pos
+  2 pi *      1random >>theta
+  1.0   6.0   2random >>speed
+  0.998 1.000 2random >>speed-d
+  0                   >>theta-d
+  0                   >>theta-dd
+
+  [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
+
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: dy>alpha ( dy -- alpha ) neg 6 * 30 + 255.0 / ;
+
+! : axion-white ( dy -- dy ) dup 1 swap dy>alpha {2} \ stroke-color set ;
+! : axion-black ( dy -- dy ) dup 0 swap dy>alpha {2} \ stroke-color set ;
+
+: axion-white ( dy -- dy ) dup 1 swap dy>alpha gray boa \ stroke-color set ;
+: axion-black ( dy -- dy ) dup 0 swap dy>alpha gray boa \ stroke-color set ;
+
+: axion-point- ( particle dy -- particle ) [ dup pos>> ] dip v-y point ;
+: axion-point+ ( particle dy -- particle ) [ dup pos>> ] dip v+y point ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+METHOD: move ( <axion> -- )
+
+  T{ gray f 0.06 0.59 } \ stroke-color set
+  dup pos>>  point
+
+  1 4 [a,b] [ axion-white axion-point- ] each
+  1 4 [a,b] [ axion-black axion-point+ ] each
 
-  dim 2 / mouse-x - dim 2 / mouse-y - fatan2 >collision-theta
+  dup vel>> move-by
 
-  hadrons> random collide
-  quarks>  random collide
-  muons>   random collide ;
+  turn
+
+  step-theta
+  step-theta-d
+  step-speed-mul
+
+  [ ] [ speed-d>> 0.9999 * ] bi >>speed-d
+
+  1000 random 996 >
+    [
+      dup speed>>   neg     >>speed
+      dup speed-d>> neg 2 + >>speed-d
+
+      100 random 30 > [ collide ] [ drop ] if
+    ]
+    [ drop ]
+  if ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! bubble-chamber.particle.hadron
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TUPLE: <hadron> < particle ;
+
+: hadron ( -- <hadron> ) <hadron> new initialize-particle ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+METHOD: collide ( <hadron> -- )
+
+  dup center          >>pos
+  2 pi *      1random >>theta
+  0.5   3.5   2random >>speed
+  0.996 1.001 2random >>speed-d
+  0                   >>theta-d
+  0                   >>theta-dd
+
+  [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
+
+  0 1 0 1 rgba boa >>myc
 
-: mouse-pressed ( -- )
-  boom on
-  1 background ! kludge
-  11 [ drop collide-one ] each ;
+  drop ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: key-released ( -- )
-  key " " =
+METHOD: move ( <hadron> -- )
+
+  T{ gray f 1 0.11 } \ stroke-color set  dup pos>> 1 v-y point
+  T{ gray f 0 0.11 } \ stroke-color set  dup pos>> 1 v+y point
+
+  dup vel>> move-by
+
+  turn
+
+  step-theta
+  step-theta-d
+  step-speed-mul
+
+  1000 random 997 >
     [
-      boom on
-      1 background
-      collide-all
+      1.0     >>speed-d
+      0.00001 >>theta-dd
+
+      100 random 70 > [ dup collide ] when
     ]
-  when ;
+  when
 
+  dup out-of-bounds? [ collide ] [ drop ] if ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! bubble-chamber.particle.muon.colors
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: bubble-chamber ( -- )
+: good-colors ( -- seq )
+  {
+    T{ rgba f 0.23 0.14 0.17 1 }
+    T{ rgba f 0.23 0.14 0.15 1 }
+    T{ rgba f 0.21 0.14 0.15 1 }
+    T{ rgba f 0.51 0.39 0.33 1 }
+    T{ rgba f 0.49 0.33 0.20 1 }
+    T{ rgba f 0.55 0.45 0.32 1 }
+    T{ rgba f 0.69 0.63 0.51 1 }
+    T{ rgba f 0.64 0.39 0.18 1 }
+    T{ rgba f 0.73 0.42 0.20 1 }
+    T{ rgba f 0.71 0.45 0.29 1 }
+    T{ rgba f 0.79 0.45 0.22 1 }
+    T{ rgba f 0.82 0.56 0.34 1 }
+    T{ rgba f 0.88 0.72 0.49 1 }
+    T{ rgba f 0.85 0.69 0.40 1 }
+    T{ rgba f 0.96 0.92 0.75 1 }
+    T{ rgba f 0.99 0.98 0.87 1 }
+    T{ rgba f 0.85 0.82 0.69 1 }
+    T{ rgba f 0.99 0.98 0.87 1 }
+    T{ rgba f 0.82 0.82 0.79 1 }
+    T{ rgba f 0.65 0.69 0.67 1 }
+    T{ rgba f 0.53 0.60 0.55 1 }
+    T{ rgba f 0.57 0.53 0.68 1 }
+    T{ rgba f 0.47 0.42 0.56 1 }
+  } ;
 
-  1000 1000 size*
+: anti-colors ( -- seq ) good-colors <reversed> ; 
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: color-fraction ( particle -- particle fraction ) dup theta>> pi + 2 pi * / ;
+
+: set-good-color ( particle -- particle )
+  color-fraction dup 0 1 between?
+    [ good-colors at-fraction-of >>myc ]
+    [ drop ]
+  if ;
+
+: set-anti-color ( particle -- particle )
+  color-fraction dup 0 1 between?
+    [ anti-colors at-fraction-of >>mya ]
+    [ drop ]
+  if ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! bubble-chamber.particle.muon
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TUPLE: <muon> < particle ;
+
+: muon ( -- <muon> ) <muon> new initialize-particle ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+METHOD: collide ( <muon> -- )
+
+  dup center           >>pos
+  2 32 [a,b] random    >>speed
+  0.0001 0.001 2random >>speed-d
+
+  dup collision-theta  -0.1 0.1 2random + >>theta
+  0                                    >>theta-d
+  0                                    >>theta-dd
+
+  [ 0.001 theta-dd-small? ] [ -0.1 0.1 random-theta-dd ] [ ] while
+
+  set-good-color
+  set-anti-color
+
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+METHOD: move ( <muon> -- )
+
+  [let | MUON [ ] |
+
+    [let | WIDTH [ MUON bubble-chamber>> size>> first ] |
+
+      MUON
+
+      dup myc>> 0.16 >>alpha \ stroke-color set
+      dup pos>> point
+
+      dup mya>> 0.16 >>alpha \ stroke-color set
+      dup pos>> first2 [ WIDTH swap - ] dip 2array point
+
+      dup
+      [ speed>> ] [ theta>> { sin cos } <arr> ] bi n*v
+      move-by
+
+      step-theta
+      step-theta-d
+      step-speed-sub
+
+      dup out-of-bounds? [ collide ] [ drop ] if ] ] ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! bubble-chamber.particle.quark
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TUPLE: <quark> < particle ;
+
+: quark ( -- <quark> ) <quark> new initialize-particle ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
+METHOD: collide ( <quark> -- )
+
+  dup center                             >>pos
+  dup collision-theta -0.11 0.11 2random +  >>theta
+  0.5 3.0 2random                        >>speed
+
+  0.996 1.001 2random                    >>speed-d
+  0                                      >>theta-d
+  0                                      >>theta-dd
+
+  [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
+
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+METHOD: move ( <quark> -- )
+
+  [let | QUARK [ ] |
+
+    [let | WIDTH [ QUARK bubble-chamber>> size>> first ] |
+
+      QUARK
+    
+      dup myc>> 0.13 >>alpha \ stroke-color set
+      dup pos>>              point
+
+      dup pos>> first2 [ WIDTH swap - ] dip 2array point
+
+      [ ] [ vel>> ] bi move-by
+
+      turn
+
+      step-theta
+      step-theta-d
+      step-speed-mul
+
+      1000 random 997 >
+      [
+      dup speed>> neg    >>speed
+      2 over speed-d>> - >>speed-d
+      ]
+      when
+
+      dup out-of-bounds? [ collide ] [ drop ] if ] ] ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+USE: syntax ! Switch back to non-multi-method 'TUPLE:' syntax
+
+TUPLE: <bubble-chamber> < <frame-buffer>
+  paused particles collision-theta size ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+! : randomize-collision-theta ( bubble-chamber -- bubble-chamber )
+!   0  2 pi *  0.001  <range>  random >>collision-theta ;
+
+: randomize-collision-theta ( bubble-chamber -- bubble-chamber )
+  pi neg  pi  0.001 <range> random >>collision-theta ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: collision-theta ( particle -- theta ) bubble-chamber>> collision-theta>> ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+M: <bubble-chamber> pref-dim* ( gadget -- dim ) size>> ;
+
+M: <bubble-chamber> ungraft* ( <bubble-chamber> -- ) t >>paused drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: iterate-particle ( particle -- ) move ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+M:: <bubble-chamber> update-frame-buffer ( BUBBLE-CHAMBER -- )
+
+  BUBBLE-CHAMBER particles>> [ iterate-particle ] each ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: iterate-system ( <bubble-chamber> -- ) drop ;
+
+:: start-bubble-chamber-thread ( GADGET -- )
+  GADGET f >>paused drop
   [
-    1 background
-    no-stroke
+    [
+      GADGET paused>>
+        [ f ]
+        [ GADGET iterate-system GADGET relayout-1 1 milliseconds sleep t ]
+      if
+    ]
+    loop
+  ]
+  in-thread ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: bubble-chamber ( -- <bubble-chamber> )
+  <bubble-chamber> new-gadget
+    { 1000 1000 } >>size
+    randomize-collision-theta ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: bubble-chamber-window ( -- <bubble-chamber> )
+  bubble-chamber
+    dup start-bubble-chamber-thread
+    dup "Bubble Chamber" open-window ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+:: add-particle ( BUBBLE-CHAMBER PARTICLE -- bubble-chamber )
   
-    1789 [ drop <muon>   ] map >muons
-    1300 [ drop <quark>  ] map >quarks
-    1000 [ drop <hadron> ] map >hadrons
-    111  [ drop <axion>  ] map >axions
+  PARTICLE BUBBLE-CHAMBER >>bubble-chamber drop
+
+  BUBBLE-CHAMBER  BUBBLE-CHAMBER particles>> PARTICLE suffix  >>particles ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+:: mouse->collision-theta ( BUBBLE-CHAMBER -- BUBBLE-CHAMBER )
+  mouse
+  BUBBLE-CHAMBER size>> 2 v/n
+  v-
+  first2
+  fatan2
+  BUBBLE-CHAMBER (>>collision-theta)
+  BUBBLE-CHAMBER ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-    muons> quarks> hadrons> axions> 3append append >particles
+:: mouse-pressed ( BUBBLE-CHAMBER -- )
 
-    collide-one
-  ] setup
+  BUBBLE-CHAMBER mouse->collision-theta drop
 
+  11
   [
-    boom>
-      [ particles> [ move ] each ]
-    when
-  ] draw
+    BUBBLE-CHAMBER particles>> [ <hadron>? ] filter random [ collide ] when*
+    BUBBLE-CHAMBER particles>> [ <quark>?  ] filter random [ collide ] when*
+    BUBBLE-CHAMBER particles>> [ <muon>?   ] filter random [ collide ] when*
+  ]
+  times ;
 
-  [ mouse-pressed ] button-down
-  [ key-released  ] key-up ;
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+<bubble-chamber> H{ { T{ button-down } [ mouse-pressed ] } } set-gestures
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: collide-random-particle ( bubble-chamber -- bubble-chamber )
+  dup particles>> random collide ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: big-bang ( bubble-chamber -- bubble-chamber )
+  dup particles>> [ collide ] each ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: collide-one-of-each ( bubble-chamber -- bubble-chamber )
+  dup
+  particles>>
+  [ [ <muon>?   ] filter random collide ]
+  [ [ <quark>?  ] filter random collide ]
+  [ [ <hadron>? ] filter random collide ]
+  tri ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Some initial configurations
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: ten-hadrons ( -- )
+  bubble-chamber-window
+  10 [ drop hadron add-particle ] each
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: original ( -- )
+  
+  bubble-chamber-window
+  
+    1789 [ muon   add-particle ] times
+    1300 [ quark  add-particle ] times
+    1000 [ hadron add-particle ] times
+     111 [ axion  add-particle ] times
+
+    particles>>
+    [ [ <muon>?   ] filter random collide ]
+    [ [ <quark>?  ] filter random collide ]
+    [ [ <hadron>? ] filter random collide ]
+    tri ;
+    
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: hadron-chamber ( -- )
+  bubble-chamber-window
+  1000 [ hadron add-particle ] times
+  big-bang
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: quark-chamber ( -- )
+  bubble-chamber-window
+  100 [ quark add-particle ] times
+  big-bang
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: small ( -- )
+  <bubble-chamber> new-gadget
+    { 200 200 } >>size
+    randomize-collision-theta
+    dup start-bubble-chamber-thread
+    dup "Bubble Chamber" open-window
 
-: go ( -- ) [ bubble-chamber run ] with-ui ;
+    42 [ muon   add-particle ] times
+    30 [ quark  add-particle ] times
+    21 [ hadron add-particle ] times
+     7 [ axion  add-particle ] times
+
+    collide-one-of-each
+
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: medium ( -- )
+  <bubble-chamber> new-gadget
+    { 400 400 } >>size
+    randomize-collision-theta
+    dup start-bubble-chamber-thread
+    dup "Bubble Chamber" open-window
+
+    100 [ muon   add-particle ] times
+     81 [ quark  add-particle ] times
+     60 [ hadron add-particle ] times
+      9 [ axion  add-particle ] times
+
+    collide-one-of-each
+
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: large ( -- )
+  <bubble-chamber> new-gadget
+    { 600 600 } >>size
+    randomize-collision-theta
+    dup start-bubble-chamber-thread
+    dup "Bubble Chamber" open-window
+
+    550 [ muon   add-particle ] times
+    339 [ quark  add-particle ] times
+    100 [ hadron add-particle ] times
+     11 [ axion  add-particle ] times
+
+    collide-one-of-each
+
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Experimental
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: muon-chamber ( -- )
+  bubble-chamber-window
+  1000 [ muon add-particle ] times
+  dup particles>> [ collide randomize-collision-theta ] each
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: original-big-bang ( -- )
+  bubble-chamber
+    { 1000 1000 } >>size
+    dup start-bubble-chamber-thread
+    dup "Bubble Chamber" open-window
+
+  1789 [ muon   add-particle ] times
+  1300 [ quark  add-particle ] times
+  1000 [ hadron add-particle ] times
+   111 [ axion  add-particle ] times
+
+  big-bang
+
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: original-big-bang-variant ( -- )
+  bubble-chamber-window
+  1789 [ muon   add-particle ] times
+  1300 [ quark  add-particle ] times
+  1000 [ hadron add-particle ] times
+   111 [ axion  add-particle ] times
+  dup particles>> [ collide randomize-collision-theta ] each
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-MAIN: go
\ No newline at end of file
diff --git a/extra/bubble-chamber/common/common.factor b/extra/bubble-chamber/common/common.factor
deleted file mode 100644 (file)
index c9ce687..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-USING: kernel math accessors combinators.cleave vars ;
-
-IN: bubble-chamber.common
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-VAR: collision-theta
-
-: dim ( -- dim ) 1000 ;
-
-: center ( -- point ) dim 2 / dup {2} ; foldable
diff --git a/extra/bubble-chamber/hadron-chamber/hadron-chamber.factor b/extra/bubble-chamber/hadron-chamber/hadron-chamber.factor
new file mode 100644 (file)
index 0000000..4046724
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: ui bubble-chamber ;
+
+IN: bubble-chamber.hadron-chamber
+
+: main ( -- ) [ hadron-chamber ] with-ui ;
+
+MAIN: main
\ No newline at end of file
diff --git a/extra/bubble-chamber/hadron-chamber/tags.txt b/extra/bubble-chamber/hadron-chamber/tags.txt
new file mode 100644 (file)
index 0000000..cb5fc20
--- /dev/null
@@ -0,0 +1 @@
+demos
diff --git a/extra/bubble-chamber/large/large.factor b/extra/bubble-chamber/large/large.factor
new file mode 100644 (file)
index 0000000..8520277
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: ui bubble-chamber ;
+
+IN: bubble-chamber.large
+
+: main ( -- ) [ large ] with-ui ;
+
+MAIN: main
\ No newline at end of file
diff --git a/extra/bubble-chamber/large/tags.txt b/extra/bubble-chamber/large/tags.txt
new file mode 100644 (file)
index 0000000..cb5fc20
--- /dev/null
@@ -0,0 +1 @@
+demos
diff --git a/extra/bubble-chamber/medium/medium.factor b/extra/bubble-chamber/medium/medium.factor
new file mode 100644 (file)
index 0000000..35ee88e
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: ui bubble-chamber ;
+
+IN: bubble-chamber.medium
+
+: main ( -- ) [ medium ] with-ui ;
+
+MAIN: main
\ No newline at end of file
diff --git a/extra/bubble-chamber/medium/tags.txt b/extra/bubble-chamber/medium/tags.txt
new file mode 100644 (file)
index 0000000..cb5fc20
--- /dev/null
@@ -0,0 +1 @@
+demos
diff --git a/extra/bubble-chamber/original/original.factor b/extra/bubble-chamber/original/original.factor
new file mode 100644 (file)
index 0000000..4d1744e
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: ui bubble-chamber ;
+
+IN: bubble-chamber.original
+
+: main ( -- ) [ original ] with-ui ;
+
+MAIN: main
\ No newline at end of file
diff --git a/extra/bubble-chamber/original/tags.txt b/extra/bubble-chamber/original/tags.txt
new file mode 100644 (file)
index 0000000..cb5fc20
--- /dev/null
@@ -0,0 +1 @@
+demos
diff --git a/extra/bubble-chamber/particle/axion/axion.factor b/extra/bubble-chamber/particle/axion/axion.factor
deleted file mode 100644 (file)
index 2dafc36..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-
-USING: kernel sequences random accessors multi-methods
-       math math.constants math.ranges math.points combinators.cleave
-       processing processing.shapes
-       bubble-chamber.common bubble-chamber.particle ;
-
-IN: bubble-chamber.particle.axion
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-TUPLE: axion < particle ;
-
-: <axion> ( -- axion ) axion new initialize-particle ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-METHOD: collide { axion }
-
-  center              >>pos
-  2 pi *      1random >>theta
-  1.0   6.0   2random >>speed
-  0.998 1.000 2random >>speed-d
-  0                   >>theta-d
-  0                   >>theta-dd
-
-  [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
-
-  drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: dy>alpha ( dy -- alpha ) neg 6 * 30 + 255.0 / ;
-
-: axion-white ( dy -- dy ) dup 1 swap dy>alpha {2} stroke ;
-: axion-black ( dy -- dy ) dup 0 swap dy>alpha {2} stroke ;
-
-: axion-point- ( particle dy -- particle ) >r dup pos>> r> v-y point ;
-: axion-point+ ( particle dy -- particle ) >r dup pos>> r> v+y point ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-METHOD: move { axion }
-
-  { 0.06 0.59 } stroke
-  dup pos>>  point
-
-  1 4 [a,b] [ axion-white axion-point- ] each
-  1 4 [a,b] [ axion-black axion-point+ ] each
-
-  dup vel>> move-by
-
-  turn
-
-  step-theta
-  step-theta-d
-  step-speed-mul
-
-  [ ] [ speed-d>> 0.9999 * ] bi >>speed-d
-
-  1000 random 996 >
-    [
-      dup speed>>   neg     >>speed
-      dup speed-d>> neg 2 + >>speed-d
-
-      100 random 30 > [ collide ] [ drop ] if
-    ]
-    [ drop ]
-  if ;
diff --git a/extra/bubble-chamber/particle/hadron/hadron.factor b/extra/bubble-chamber/particle/hadron/hadron.factor
deleted file mode 100644 (file)
index 910df97..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-
-USING: kernel random math math.constants math.points accessors multi-methods
-       processing processing.shapes
-       bubble-chamber.common
-       bubble-chamber.particle colors ;
-
-IN: bubble-chamber.particle.hadron
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-TUPLE: hadron < particle ;
-
-: <hadron> ( -- hadron ) hadron new initialize-particle ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-METHOD: collide { hadron }
-
-  center              >>pos
-  2 pi *      1random >>theta
-  0.5   3.5   2random >>speed
-  0.996 1.001 2random >>speed-d
-  0                   >>theta-d
-  0                   >>theta-dd
-
-  [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
-
-  0 1 0 1 rgba boa >>myc
-
-  drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-METHOD: move { hadron }
-
-  { 1 0.11 } stroke
-  dup pos>> 1 v-y point
-  
-  { 0 0.11 } stroke
-  dup pos>> 1 v+y point
-
-  dup vel>> move-by
-
-  turn
-
-  step-theta
-  step-theta-d
-  step-speed-mul
-
-  1000 random 997 >
-    [
-      1.0     >>speed-d
-      0.00001 >>theta-dd
-
-      100 random 70 > [ dup collide ] when
-    ]
-  when
-
-  out-of-bounds? [ collide ] [ drop ] if ;
diff --git a/extra/bubble-chamber/particle/muon/colors/colors.factor b/extra/bubble-chamber/particle/muon/colors/colors.factor
deleted file mode 100644 (file)
index 644bed8..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-USING: kernel sequences math math.constants math.order accessors
-       processing
-       colors ;
-
-IN: bubble-chamber.particle.muon.colors
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: good-colors ( -- seq )
-  {
-    T{ rgba f 0.23 0.14 0.17 1 }
-    T{ rgba f 0.23 0.14 0.15 1 }
-    T{ rgba f 0.21 0.14 0.15 1 }
-    T{ rgba f 0.51 0.39 0.33 1 }
-    T{ rgba f 0.49 0.33 0.20 1 }
-    T{ rgba f 0.55 0.45 0.32 1 }
-    T{ rgba f 0.69 0.63 0.51 1 }
-    T{ rgba f 0.64 0.39 0.18 1 }
-    T{ rgba f 0.73 0.42 0.20 1 }
-    T{ rgba f 0.71 0.45 0.29 1 }
-    T{ rgba f 0.79 0.45 0.22 1 }
-    T{ rgba f 0.82 0.56 0.34 1 }
-    T{ rgba f 0.88 0.72 0.49 1 }
-    T{ rgba f 0.85 0.69 0.40 1 }
-    T{ rgba f 0.96 0.92 0.75 1 }
-    T{ rgba f 0.99 0.98 0.87 1 }
-    T{ rgba f 0.85 0.82 0.69 1 }
-    T{ rgba f 0.99 0.98 0.87 1 }
-    T{ rgba f 0.82 0.82 0.79 1 }
-    T{ rgba f 0.65 0.69 0.67 1 }
-    T{ rgba f 0.53 0.60 0.55 1 }
-    T{ rgba f 0.57 0.53 0.68 1 }
-    T{ rgba f 0.47 0.42 0.56 1 }
-  } ;
-
-: anti-colors ( -- seq ) good-colors <reversed> ; 
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: color-fraction ( particle -- particle fraction ) dup theta>> pi + 2 pi * / ;
-
-: set-good-color ( particle -- particle )
-  color-fraction dup 0 1 between?
-    [ good-colors at-fraction-of >>myc ]
-    [ drop ]
-  if ;
-
-: set-anti-color ( particle -- particle )
-  color-fraction dup 0 1 between?
-    [ anti-colors at-fraction-of >>mya ]
-    [ drop ]
-  if ;
diff --git a/extra/bubble-chamber/particle/muon/muon.factor b/extra/bubble-chamber/particle/muon/muon.factor
deleted file mode 100644 (file)
index c5ee71c..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-
-USING: kernel arrays sequences random
-       math
-       math.ranges
-       math.functions
-       math.vectors
-       multi-methods accessors
-       combinators.cleave
-       processing
-       processing.shapes
-       bubble-chamber.common
-       bubble-chamber.particle
-       bubble-chamber.particle.muon.colors ;
-
-IN: bubble-chamber.particle.muon
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-TUPLE: muon < particle ;
-
-: <muon> ( -- muon ) muon new initialize-particle ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-METHOD: collide { muon }
-
-  center               >>pos
-  2 32 [a,b] random    >>speed
-  0.0001 0.001 2random >>speed-d
-
-  collision-theta>  -0.1 0.1 2random + >>theta
-  0                                    >>theta-d
-  0                                    >>theta-dd
-
-  [ 0.001 theta-dd-small? ] [ -0.1 0.1 random-theta-dd ] [ ] while
-
-  set-good-color
-  set-anti-color
-
-  drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-METHOD: move { muon }
-
-  dup myc>> 0.16 >>alpha stroke
-  dup pos>> point
-
-  dup mya>> 0.16 >>alpha stroke
-  dup pos>> first2 >r dim swap - r> 2array point
-
-  dup
-    [ speed>> ] [ theta>> { sin cos } <arr> ] bi n*v
-  move-by
-
-  step-theta
-  step-theta-d
-  step-speed-sub
-
-  out-of-bounds? [ collide ] [ drop ] if ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
diff --git a/extra/bubble-chamber/particle/particle.factor b/extra/bubble-chamber/particle/particle.factor
deleted file mode 100644 (file)
index 8b13e9b..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-
-USING: kernel sequences combinators
-       math math.vectors math.functions multi-methods
-       accessors combinators.cleave processing
-       bubble-chamber.common colors ;
-
-IN: bubble-chamber.particle
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-GENERIC: collide ( particle -- )
-GENERIC: move    ( particle -- )
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-TUPLE: particle pos vel speed speed-d theta theta-d theta-dd myc mya ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: initialize-particle ( particle -- particle )
-
-  0 0 {2} >>pos
-  0 0 {2} >>vel
-
-  0 >>speed
-  0 >>speed-d
-  0 >>theta
-  0 >>theta-d
-  0 >>theta-dd
-
-  0 0 0 1 rgba boa >>myc
-  0 0 0 1 rgba boa >>mya ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: move-by ( obj delta -- obj ) over pos>> v+ >>pos ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: theta-dd-small? ( par limit -- par ? ) >r dup theta-dd>> abs r> < ;
-
-: random-theta-dd  ( par a b -- par ) 2random >>theta-dd ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: turn ( particle -- particle )
-  dup
-    [ speed>> ] [ theta>> { sin cos } <arr> ] bi n*v
-  >>vel ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: step-theta     ( p -- p ) [ ] [ theta>>   ] [ theta-d>>  ] tri + >>theta   ;
-: step-theta-d   ( p -- p ) [ ] [ theta-d>> ] [ theta-dd>> ] tri + >>theta-d ;
-: step-speed-sub ( p -- p ) [ ] [ speed>>   ] [ speed-d>>  ] tri - >>speed   ;
-: step-speed-mul ( p -- p ) [ ] [ speed>>   ] [ speed-d>>  ] tri * >>speed   ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: x ( particle -- x ) pos>> first  ;
-: y ( particle -- x ) pos>> second ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: out-of-bounds? ( particle -- particle ? )
-  dup
-  { [ x dim neg < ] [ x dim 2 * > ] [ y dim neg < ] [ y dim 2 * > ] } cleave
-  or or or ;
diff --git a/extra/bubble-chamber/particle/quark/quark.factor b/extra/bubble-chamber/particle/quark/quark.factor
deleted file mode 100644 (file)
index 194b97a..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-USING: kernel arrays sequences random math accessors multi-methods
-       processing processing.shapes
-       bubble-chamber.common
-       bubble-chamber.particle ;
-
-IN: bubble-chamber.particle.quark
-
-TUPLE: quark < particle ;
-
-: <quark> ( -- quark ) quark new initialize-particle ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-METHOD: collide { quark }
-
-  center                     >>pos
-  collision-theta> -0.11 0.11 2random +  >>theta
-  0.5 3.0 2random                        >>speed
-
-  0.996 1.001 2random                    >>speed-d
-  0                                      >>theta-d
-  0                                      >>theta-dd
-
-  [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
-
-  drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-METHOD: move { quark }
-
-  dup myc>> 0.13 >>alpha stroke
-  dup pos>>              point
-
-  dup pos>> first2 >r dim swap - r> 2array point
-
-  [ ] [ vel>> ] bi move-by
-
-  turn
-
-  step-theta
-  step-theta-d
-  step-speed-mul
-
-  1000 random 997 >
-    [
-      dup speed>> neg    >>speed
-      2 over speed-d>> - >>speed-d
-    ]
-  when
-
-  out-of-bounds? [ collide ] [ drop ] if ;
diff --git a/extra/bubble-chamber/quark-chamber/quark-chamber.factor b/extra/bubble-chamber/quark-chamber/quark-chamber.factor
new file mode 100644 (file)
index 0000000..99aa97b
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: ui bubble-chamber ;
+
+IN: bubble-chamber.quark-chamber
+
+: main ( -- ) [ quark-chamber ] with-ui ;
+
+MAIN: main
\ No newline at end of file
diff --git a/extra/bubble-chamber/quark-chamber/tags.txt b/extra/bubble-chamber/quark-chamber/tags.txt
new file mode 100644 (file)
index 0000000..cb5fc20
--- /dev/null
@@ -0,0 +1 @@
+demos
diff --git a/extra/bubble-chamber/small/small.factor b/extra/bubble-chamber/small/small.factor
new file mode 100644 (file)
index 0000000..d02e3ac
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: ui bubble-chamber ;
+
+IN: bubble-chamber.small
+
+: main ( -- ) [ small ] with-ui ;
+
+MAIN: main
\ No newline at end of file
diff --git a/extra/bubble-chamber/small/tags.txt b/extra/bubble-chamber/small/tags.txt
new file mode 100644 (file)
index 0000000..cb5fc20
--- /dev/null
@@ -0,0 +1 @@
+demos
diff --git a/extra/bubble-chamber/tags.txt b/extra/bubble-chamber/tags.txt
deleted file mode 100644 (file)
index cb5fc20..0000000
+++ /dev/null
@@ -1 +0,0 @@
-demos
diff --git a/extra/bubble-chamber/ten-hadrons/tags.txt b/extra/bubble-chamber/ten-hadrons/tags.txt
new file mode 100644 (file)
index 0000000..cb5fc20
--- /dev/null
@@ -0,0 +1 @@
+demos
diff --git a/extra/bubble-chamber/ten-hadrons/ten-hadrons.factor b/extra/bubble-chamber/ten-hadrons/ten-hadrons.factor
new file mode 100644 (file)
index 0000000..a29ecf8
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: ui bubble-chamber ;
+
+IN: bubble-chamber.ten-hadrons
+
+: main ( -- ) [ ten-hadrons ] with-ui ;
+
+MAIN: main
\ No newline at end of file
index e481b4716160f3e2a579cd4ce5468f99d6b7ffb3..b1e24243f08cd4e2de09b519e308561a1ae15725 100644 (file)
@@ -1,6 +1,6 @@
 USING: arrays bunny.model continuations destructors kernel
 multiline opengl opengl.shaders opengl.capabilities opengl.gl
-sequences sequences.lib accessors combinators ;
+sequences accessors combinators ;
 IN: bunny.cel-shaded
 
 STRING: vertex-shader-source
index 452adf56891cb7da3d46d14525df42d2812ed834..255e6eb343ffa845b42aba924e28522c7a76fb5c 100755 (executable)
@@ -1,9 +1,9 @@
 USING: accessors alien.c-types arrays combinators destructors
-http.client io io.encodings.ascii io.files kernel math
-math.matrices math.parser math.vectors opengl
+http.client io io.encodings.ascii io.files io.files.temp kernel
+math math.matrices math.parser math.vectors opengl
 opengl.capabilities opengl.gl opengl.demo-support sequences
-sequences.lib splitting vectors words
-specialized-arrays.float specialized-arrays.uint ;
+splitting vectors words specialized-arrays.float
+specialized-arrays.uint ;
 IN: bunny.model
 
 : numbers ( str -- seq )
@@ -23,15 +23,15 @@ IN: bunny.model
 
 : n ( vs triple -- n )
     swap [ nth ] curry map
-    dup third over first v- >r dup second swap first v- r> cross
+    [ [ second ] [ first ] bi v- ] [ [ third ] [ first ] bi v- ] bi cross
     vneg normalize ;
 
 : normal ( ns vs triple -- )
-    [ n ] keep [ rot [ v+ ] change-nth ] each-with2 ;
+    [ n ] keep [ rot [ v+ ] change-nth ] with with each ;
 
 : normals ( vs is -- ns )
     over length { 0.0 0.0 0.0 } <array> -rot
-    [ >r 2dup r> normal ] each drop
+    [ [ 2dup ] dip normal ] each drop
     [ normalize ] map ;
 
 : read-model ( stream -- model )
@@ -50,10 +50,10 @@ IN: bunny.model
     ] unless ;
 
 : (draw-triangle) ( ns vs triple -- )
-    [ dup roll nth gl-normal swap nth gl-vertex ] each-with2 ;
+    [ dup roll nth gl-normal swap nth gl-vertex ] with with each ;
 
 : draw-triangles ( ns vs is -- )
-    GL_TRIANGLES [ [ (draw-triangle) ] each-with2 ] do-state ;
+    GL_TRIANGLES [ [ (draw-triangle) ] with with each ] do-state ;
 
 TUPLE: bunny-dlist list ;
 TUPLE: bunny-buffers array element-array nv ni ;
index 3cf3f94d7385c3213974dcb38b3d66440a6fdfab..c91a895ce112973dc0e92a95ec758e0927451184 100755 (executable)
@@ -2,7 +2,7 @@ USING: arrays bunny.model bunny.cel-shaded continuations
 destructors kernel math multiline opengl opengl.shaders
 opengl.framebuffers opengl.gl opengl.demo-support fry
 opengl.capabilities sequences ui.gadgets combinators accessors
-macros ;
+macros locals ;
 IN: bunny.outlined
 
 STRING: outlined-pass1-fragment-shader-main-source
@@ -143,19 +143,17 @@ TUPLE: bunny-outlined
         pass1-program pass2-program f f f f f bunny-outlined boa
     ] [ drop f ] if ;
 
-: (framebuffer-texture) ( dim iformat xformat -- texture )
-    swapd >r >r >r
+:: (framebuffer-texture) ( dim iformat xformat -- texture )
     GL_TEXTURE0 glActiveTexture
     gen-texture GL_TEXTURE_2D over glBindTexture
     GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_CLAMP glTexParameteri
     GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_CLAMP glTexParameteri
     GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST glTexParameteri
     GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST glTexParameteri
-    GL_TEXTURE_2D 0 r> r> first2 0 r> GL_UNSIGNED_BYTE f glTexImage2D ;
+    GL_TEXTURE_2D 0 iformat dim first2 0 xformat GL_UNSIGNED_BYTE f glTexImage2D ;
 
-: (attach-framebuffer-texture) ( texture attachment -- )
-    swap >r >r
-    GL_FRAMEBUFFER_EXT r> GL_TEXTURE_2D r> 0 glFramebufferTexture2DEXT
+:: (attach-framebuffer-texture) ( texture attachment -- )
+    GL_FRAMEBUFFER_EXT attachment GL_TEXTURE_2D texture 0 glFramebufferTexture2DEXT
     gl-error ;
 
 : (make-framebuffer) ( color-texture normal-texture depth-texture -- framebuffer )
index ea92e798a7689b98c2eeea0b96b901798b731148..cec6702ce06238959f60514e0b65d68227a8a988 100644 (file)
@@ -25,7 +25,7 @@ TUPLE: cairo-demo-gadget < gadget image-array cairo-t ;
 M: cairo-demo-gadget draw-gadget* ( gadget -- )
     0 0 glRasterPos2i
     1.0 -1.0 glPixelZoom
-    >r 384 256 GL_RGBA GL_UNSIGNED_BYTE r>
+    [ 384 256 GL_RGBA GL_UNSIGNED_BYTE ] dip
     image-array>> glDrawPixels ;
 
 : create-surface ( gadget -- cairo_surface_t )
diff --git a/extra/cairo-samples/cairo-samples.factor b/extra/cairo-samples/cairo-samples.factor
new file mode 100644 (file)
index 0000000..a29e12c
--- /dev/null
@@ -0,0 +1,161 @@
+! Copyright (C) 2008 Matthew Willis
+! See http://factorcode.org/license.txt for BSD license.
+!
+! these samples are a subset of the samples on
+! http://cairographics.org/samples/
+USING: cairo cairo.ffi locals math.constants math
+io.backend kernel alien.c-types libc namespaces
+cairo.gadgets ui.gadgets accessors specialized-arrays.double ;
+
+IN: cairo-samples
+
+TUPLE: arc-gadget < cairo-gadget ;
+M:: arc-gadget render-cairo* ( gadget -- )
+    [let | xc [ 128.0 ]
+           yc [ 128.0 ]
+           radius [ 100.0 ]
+           angle1 [ pi 1/4 * ]
+           angle2 [ pi ] |
+        cr 10.0 cairo_set_line_width
+        cr xc yc radius angle1 angle2 cairo_arc
+        cr cairo_stroke
+        
+        ! draw helping lines
+        cr 1 0.2 0.2 0.6 cairo_set_source_rgba
+        cr 6.0 cairo_set_line_width
+        
+        cr xc yc 10.0 0 2 pi * cairo_arc
+        cr cairo_fill
+        
+        cr xc yc radius angle1 angle1 cairo_arc
+        cr xc yc cairo_line_to
+        cr xc yc radius angle2 angle2 cairo_arc
+        cr xc yc cairo_line_to
+        cr cairo_stroke
+    ] ;
+
+TUPLE: clip-gadget < cairo-gadget ;
+M: clip-gadget render-cairo* ( gadget -- )
+    drop
+    cr 128 128 76.8 0 2 pi * cairo_arc
+    cr cairo_clip
+    cr cairo_new_path
+    
+    cr 0 0 256 256 cairo_rectangle
+    cr cairo_fill
+    cr 0 1 0 cairo_set_source_rgb
+    cr 0 0 cairo_move_to
+    cr 256 256 cairo_line_to
+    cr 256 0 cairo_move_to
+    cr 0 256 cairo_line_to
+    cr 10 cairo_set_line_width
+    cr cairo_stroke ;
+
+TUPLE: clip-image-gadget < cairo-gadget ;
+M:: clip-image-gadget render-cairo* ( gadget -- )
+    [let* | png [ "resource:misc/icons/Factor_128x128.png"
+                  normalize-path cairo_image_surface_create_from_png ]
+            w [ png cairo_image_surface_get_width ]
+            h [ png cairo_image_surface_get_height ] |
+        cr 128 128 76.8 0 2 pi * cairo_arc
+        cr cairo_clip
+        cr cairo_new_path
+
+        cr 192.0 w / 192.0 h / cairo_scale
+        cr png 32 32 cairo_set_source_surface
+        cr cairo_paint
+        png cairo_surface_destroy
+    ] ;
+
+TUPLE: dash-gadget < cairo-gadget ;
+M:: dash-gadget render-cairo* ( gadget -- )
+    [let | dashes [ double-array{ 50 10 10 10 } underlying>> ]
+           ndash [ 4 ] |
+        cr dashes ndash -50 cairo_set_dash
+        cr 10 cairo_set_line_width
+        cr 128.0 25.6 cairo_move_to
+        cr 230.4 230.4 cairo_line_to
+        cr -102.4 0 cairo_rel_line_to
+        cr 51.2 230.4 51.2 128.0 128.0 128.0 cairo_curve_to
+        cr cairo_stroke
+    ] ;
+
+TUPLE: gradient-gadget < cairo-gadget ;
+M:: gradient-gadget render-cairo* ( gadget -- )
+    [let | pat [ 0 0 0 256 cairo_pattern_create_linear ]
+           radial [ 115.2 102.4 25.6 102.4 102.4 128.0
+                    cairo_pattern_create_radial ] |
+        pat 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
+        pat 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
+        cr 0 0 256 256 cairo_rectangle
+        cr pat cairo_set_source
+        cr cairo_fill
+        pat cairo_pattern_destroy
+        
+        radial 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
+        radial 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
+        cr radial cairo_set_source
+        cr 128.0 128.0 76.8 0 2 pi * cairo_arc
+        cr cairo_fill
+        radial cairo_pattern_destroy
+    ] ;
+
+TUPLE: text-gadget < cairo-gadget ;
+M: text-gadget render-cairo* ( gadget -- )
+    drop
+    cr "Serif" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_BOLD
+    cairo_select_font_face
+    cr 50 cairo_set_font_size
+    cr 10 135 cairo_move_to
+    cr "Hello" cairo_show_text
+    
+    cr 70 165 cairo_move_to
+    cr "factor" cairo_text_path
+    cr 0.5 0.5 1 cairo_set_source_rgb
+    cr cairo_fill_preserve
+    cr 0 0 0 cairo_set_source_rgb
+    cr 2.56 cairo_set_line_width
+    cr cairo_stroke
+    
+    ! draw helping lines
+    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
+    cr 10 135 5.12 0 2 pi * cairo_arc
+    cr cairo_close_path
+    cr 70 165 5.12 0 2 pi * cairo_arc
+    cr cairo_fill ;
+
+TUPLE: utf8-gadget < cairo-gadget ;
+M: utf8-gadget render-cairo* ( gadget -- )
+    drop
+    cr "Sans" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_NORMAL
+    cairo_select_font_face
+    cr 50 cairo_set_font_size
+    "cairo_text_extents_t" malloc-object
+    cr "日本語" pick cairo_text_extents
+    cr over
+    [ cairo_text_extents_t-width 2 / ]
+    [ cairo_text_extents_t-x_bearing ] bi +
+    128 swap - pick
+    [ cairo_text_extents_t-height 2 / ]
+    [ cairo_text_extents_t-y_bearing ] bi +
+    128 swap - cairo_move_to
+    free
+    cr "日本語" cairo_show_text
+    
+    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
+    cr 6 cairo_set_line_width
+    cr 128 0 cairo_move_to
+    cr 0 256 cairo_rel_line_to
+    cr 0 128 cairo_move_to
+    cr 256 0 cairo_rel_line_to
+    cr cairo_stroke ;
+ USING: quotations cairo.gadgets ui.gadgets.panes sequences ;
+ : samples ( -- )
+    {
+        arc-gadget clip-gadget clip-image-gadget dash-gadget
+        gradient-gadget text-gadget utf8-gadget
+    }
+    [ new-gadget { 256 256 } >>dim gadget. ] each ;
+ MAIN: samples
diff --git a/extra/cairo/authors.txt b/extra/cairo/authors.txt
deleted file mode 100644 (file)
index 68d35d1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Sampo Vuori
-Doug Coleman
diff --git a/extra/cairo/cairo.factor b/extra/cairo/cairo.factor
deleted file mode 100755 (executable)
index aa7d115..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: cairo.ffi kernel accessors sequences
-namespaces fry continuations destructors ;
-IN: cairo
-
-TUPLE: cairo-t alien ;
-C: <cairo-t> cairo-t
-M: cairo-t dispose ( alien -- ) alien>> cairo_destroy ;
-
-TUPLE: cairo-surface-t alien ;
-C: <cairo-surface-t> cairo-surface-t
-M: cairo-surface-t dispose ( alien -- ) alien>> cairo_surface_destroy ;
-
-: check-cairo ( cairo_status_t -- )
-    dup CAIRO_STATUS_SUCCESS = [ drop ]
-    [ cairo_status_to_string "Cairo error: " prepend throw ] if ;
-
-SYMBOL: cairo
-: cr ( -- cairo ) cairo get ;
-
-: (with-cairo) ( cairo-t quot -- )
-    >r alien>> cairo r> [ cr cairo_status check-cairo ]
-    compose with-variable ; inline
-    
-: with-cairo ( cairo quot -- )
-    >r <cairo-t> r> [ (with-cairo) ] curry with-disposal ; inline
-
-: (with-surface) ( cairo-surface-t quot -- )
-    >r alien>> r> [ cairo_surface_status check-cairo ] bi ; inline
-
-: with-surface ( cairo_surface quot -- )
-    >r <cairo-surface-t> r> [ (with-surface) ] curry with-disposal ; inline
-
-: with-cairo-from-surface ( cairo_surface quot -- )
-    '[ cairo_create _ with-cairo ] with-surface ; inline
diff --git a/extra/cairo/ffi/ffi.factor b/extra/cairo/ffi/ffi.factor
deleted file mode 100644 (file)
index db18320..0000000
+++ /dev/null
@@ -1,950 +0,0 @@
-! Copyright (c) 2007 Sampo Vuori
-! Copyright (c) 2008 Matthew Willis
-!
-! Adapted from cairo.h, version 1.5.14
-! License: http://factorcode.org/license.txt
-
-USING: system combinators alien alien.syntax kernel 
-alien.c-types accessors sequences arrays ui.gadgets ;
-
-IN: cairo.ffi
-<< "cairo" {
-    { [ os winnt? ] [ "libcairo-2.dll" ] }
-    { [ os macosx? ] [ "/opt/local/lib/libcairo.dylib" ] }
-    { [ os unix? ] [ "libcairo.so.2" ] }
-} cond "cdecl" add-library >>
-
-LIBRARY: cairo
-
-FUNCTION: int cairo_version ( ) ;
-FUNCTION: char* cairo_version_string ( ) ;
-
-TYPEDEF: int cairo_bool_t
-
-! I am leaving these and other void* types as opaque structures
-TYPEDEF: void* cairo_t
-TYPEDEF: void* cairo_surface_t
-
-C-STRUCT: cairo_matrix_t
-    { "double" "xx" }
-    { "double" "yx" }
-    { "double" "xy" }
-    { "double" "yy" }
-    { "double" "x0" }
-    { "double" "y0" } ;
-
-TYPEDEF: void* cairo_pattern_t
-
-TYPEDEF: void* cairo_destroy_func_t
-: cairo-destroy-func ( quot -- callback )
-    >r "void" { "void*" } "cdecl" r> alien-callback ; inline
-
-! See cairo.h for details
-C-STRUCT: cairo_user_data_key_t
-    { "int" "unused" } ;
-
-TYPEDEF: int cairo_status_t
-C-ENUM:
-    CAIRO_STATUS_SUCCESS
-    CAIRO_STATUS_NO_MEMORY
-    CAIRO_STATUS_INVALID_RESTORE
-    CAIRO_STATUS_INVALID_POP_GROUP
-    CAIRO_STATUS_NO_CURRENT_POINT
-    CAIRO_STATUS_INVALID_MATRIX
-    CAIRO_STATUS_INVALID_STATUS
-    CAIRO_STATUS_NULL_POINTER
-    CAIRO_STATUS_INVALID_STRING
-    CAIRO_STATUS_INVALID_PATH_DATA
-    CAIRO_STATUS_READ_ERROR
-    CAIRO_STATUS_WRITE_ERROR
-    CAIRO_STATUS_SURFACE_FINISHED
-    CAIRO_STATUS_SURFACE_TYPE_MISMATCH
-    CAIRO_STATUS_PATTERN_TYPE_MISMATCH
-    CAIRO_STATUS_INVALID_CONTENT
-    CAIRO_STATUS_INVALID_FORMAT
-    CAIRO_STATUS_INVALID_VISUAL
-    CAIRO_STATUS_FILE_NOT_FOUND
-    CAIRO_STATUS_INVALID_DASH
-    CAIRO_STATUS_INVALID_DSC_COMMENT
-    CAIRO_STATUS_INVALID_INDEX
-    CAIRO_STATUS_CLIP_NOT_REPRESENTABLE
-    CAIRO_STATUS_TEMP_FILE_ERROR
-    CAIRO_STATUS_INVALID_STRIDE ;
-
-TYPEDEF: int cairo_content_t
-: CAIRO_CONTENT_COLOR          HEX: 1000 ;
-: CAIRO_CONTENT_ALPHA          HEX: 2000 ;
-: CAIRO_CONTENT_COLOR_ALPHA    HEX: 3000 ;
-
-TYPEDEF: void* cairo_write_func_t
-: cairo-write-func ( quot -- callback )
-    >r "cairo_status_t" { "void*" "uchar*" "int" }
-    "cdecl" r> alien-callback ; inline
-                          
-TYPEDEF: void* cairo_read_func_t
-: cairo-read-func ( quot -- callback )
-    >r "cairo_status_t" { "void*" "uchar*" "int" }
-    "cdecl" r> alien-callback ; inline
-
-! Functions for manipulating state objects
-FUNCTION: cairo_t*
-cairo_create ( cairo_surface_t* target ) ;
-
-FUNCTION: cairo_t*
-cairo_reference ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_destroy ( cairo_t* cr ) ;
-
-FUNCTION: uint
-cairo_get_reference_count ( cairo_t* cr ) ;
-
-FUNCTION: void*
-cairo_get_user_data ( cairo_t* cr, cairo_user_data_key_t* key ) ;
-
-FUNCTION: cairo_status_t
-cairo_set_user_data ( cairo_t* cr, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
-
-FUNCTION: void
-cairo_save ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_restore ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_push_group ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_push_group_with_content  ( cairo_t* cr, cairo_content_t content ) ;
-
-FUNCTION: cairo_pattern_t*
-cairo_pop_group ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_pop_group_to_source ( cairo_t* cr ) ;
-
-! Modify state
-TYPEDEF: int cairo_operator_t
-C-ENUM:
-    CAIRO_OPERATOR_CLEAR
-
-    CAIRO_OPERATOR_SOURCE
-    CAIRO_OPERATOR_OVER
-    CAIRO_OPERATOR_IN
-    CAIRO_OPERATOR_OUT
-    CAIRO_OPERATOR_ATOP
-
-    CAIRO_OPERATOR_DEST
-    CAIRO_OPERATOR_DEST_OVER
-    CAIRO_OPERATOR_DEST_IN
-    CAIRO_OPERATOR_DEST_OUT
-    CAIRO_OPERATOR_DEST_ATOP
-
-    CAIRO_OPERATOR_XOR
-    CAIRO_OPERATOR_ADD
-    CAIRO_OPERATOR_SATURATE ;
-
-FUNCTION: void
-cairo_set_operator ( cairo_t* cr, cairo_operator_t op ) ;
-
-FUNCTION: void
-cairo_set_source ( cairo_t* cr, cairo_pattern_t* source ) ;
-
-FUNCTION: void
-cairo_set_source_rgb ( cairo_t* cr, double red, double green, double blue ) ;
-
-FUNCTION: void
-cairo_set_source_rgba ( cairo_t* cr, double red, double green, double blue, double alpha ) ;
-
-FUNCTION: void
-cairo_set_source_surface ( cairo_t* cr, cairo_surface_t* surface, double x, double y ) ;
-
-FUNCTION: void
-cairo_set_tolerance ( cairo_t* cr, double tolerance ) ;
-
-TYPEDEF: int cairo_antialias_t
-C-ENUM:
-    CAIRO_ANTIALIAS_DEFAULT
-    CAIRO_ANTIALIAS_NONE
-    CAIRO_ANTIALIAS_GRAY
-    CAIRO_ANTIALIAS_SUBPIXEL ;
-
-FUNCTION: void
-cairo_set_antialias ( cairo_t* cr, cairo_antialias_t antialias ) ;
-
-TYPEDEF: int cairo_fill_rule_t
-C-ENUM:
-    CAIRO_FILL_RULE_WINDING
-    CAIRO_FILL_RULE_EVEN_ODD ;
-
-FUNCTION: void
-cairo_set_fill_rule ( cairo_t* cr, cairo_fill_rule_t fill_rule ) ;
-
-FUNCTION: void
-cairo_set_line_width ( cairo_t* cr, double width ) ;
-
-TYPEDEF: int cairo_line_cap_t
-C-ENUM:
-    CAIRO_LINE_CAP_BUTT
-    CAIRO_LINE_CAP_ROUND
-    CAIRO_LINE_CAP_SQUARE ;
-
-FUNCTION: void
-cairo_set_line_cap ( cairo_t* cr, cairo_line_cap_t line_cap ) ;
-
-TYPEDEF: int cairo_line_join_t
-C-ENUM:
-    CAIRO_LINE_JOIN_MITER
-    CAIRO_LINE_JOIN_ROUND
-    CAIRO_LINE_JOIN_BEVEL ;
-
-FUNCTION: void
-cairo_set_line_join ( cairo_t* cr, cairo_line_join_t line_join ) ;
-
-FUNCTION: void
-cairo_set_dash ( cairo_t* cr, double* dashes, int num_dashes, double offset ) ;
-
-FUNCTION: void
-cairo_set_miter_limit ( cairo_t* cr, double limit ) ;
-
-FUNCTION: void
-cairo_translate ( cairo_t* cr, double tx, double ty ) ;
-
-FUNCTION: void
-cairo_scale ( cairo_t* cr, double sx, double sy ) ;
-
-FUNCTION: void
-cairo_rotate ( cairo_t* cr, double angle ) ;
-
-FUNCTION: void
-cairo_transform ( cairo_t* cr, cairo_matrix_t* matrix ) ;
-
-FUNCTION: void
-cairo_set_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
-
-FUNCTION: void
-cairo_identity_matrix ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_user_to_device ( cairo_t* cr, double* x, double* y ) ;
-
-FUNCTION: void
-cairo_user_to_device_distance ( cairo_t* cr, double* dx, double* dy ) ;
-
-FUNCTION: void
-cairo_device_to_user ( cairo_t* cr, double* x, double* y ) ;
-
-FUNCTION: void
-cairo_device_to_user_distance ( cairo_t* cr, double* dx, double* dy ) ;
-
-! Path creation functions
-FUNCTION: void
-cairo_new_path ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_move_to ( cairo_t* cr, double x, double y ) ;
-
-FUNCTION: void
-cairo_new_sub_path ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_line_to ( cairo_t* cr, double x, double y ) ;
-
-FUNCTION: void
-cairo_curve_to ( cairo_t* cr, double x1, double y1, double x2, double y2, double x3, double y3 ) ;
-
-FUNCTION: void
-cairo_arc ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ;
-
-FUNCTION: void
-cairo_arc_negative ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ;
-
-FUNCTION: void
-cairo_rel_move_to ( cairo_t* cr, double dx, double dy ) ;
-
-FUNCTION: void
-cairo_rel_line_to ( cairo_t* cr, double dx, double dy ) ;
-
-FUNCTION: void
-cairo_rel_curve_to ( cairo_t* cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3 ) ;
-
-FUNCTION: void
-cairo_rectangle ( cairo_t* cr, double x, double y, double width, double height ) ;
-
-FUNCTION: void
-cairo_close_path ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_path_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
-
-! Painting functions
-FUNCTION: void
-cairo_paint ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_paint_with_alpha ( cairo_t* cr, double alpha ) ;
-
-FUNCTION: void
-cairo_mask ( cairo_t* cr, cairo_pattern_t* pattern ) ;
-
-FUNCTION: void
-cairo_mask_surface ( cairo_t* cr, cairo_surface_t* surface, double surface_x, double surface_y ) ;
-
-FUNCTION: void
-cairo_stroke ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_stroke_preserve ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_fill ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_fill_preserve ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_copy_page ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_show_page ( cairo_t* cr ) ;
-
-! Insideness testing
-FUNCTION: cairo_bool_t
-cairo_in_stroke ( cairo_t* cr, double x, double y ) ;
-
-FUNCTION: cairo_bool_t
-cairo_in_fill ( cairo_t* cr, double x, double y ) ;
-
-! Rectangular extents
-FUNCTION: void
-cairo_stroke_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
-
-FUNCTION: void
-cairo_fill_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
-
-! Clipping
-FUNCTION: void
-cairo_reset_clip ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_clip ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_clip_preserve ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_clip_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
-
-C-STRUCT: cairo_rectangle_t
-    { "double" "x" }
-    { "double" "y" }
-    { "double" "width" }
-    { "double" "height" } ;
-    
-C-STRUCT: cairo_rectangle_list_t
-    { "cairo_status_t"     "status" }
-    { "cairo_rectangle_t*" "rectangles" }
-    { "int"                "num_rectangles" } ;
-
-FUNCTION: cairo_rectangle_list_t*
-cairo_copy_clip_rectangle_list ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_rectangle_list_destroy ( cairo_rectangle_list_t* rectangle_list ) ;
-
-! Font/Text functions
-
-TYPEDEF: void* cairo_scaled_font_t
-
-TYPEDEF: void* cairo_font_face_t
-
-C-STRUCT: cairo_glyph_t
-  { "ulong"     "index" }
-  { "double"    "x" }
-  { "double"    "y" } ;
-
-C-STRUCT: cairo_text_extents_t
-    { "double" "x_bearing" }
-    { "double" "y_bearing" }
-    { "double" "width" }
-    { "double" "height" }
-    { "double" "x_advance" }
-    { "double" "y_advance" } ;
-
-C-STRUCT: cairo_font_extents_t
-    { "double" "ascent" }
-    { "double" "descent" }
-    { "double" "height" }
-    { "double" "max_x_advance" }
-    { "double" "max_y_advance" } ;
-
-TYPEDEF: int cairo_font_slant_t
-C-ENUM:
-    CAIRO_FONT_SLANT_NORMAL
-    CAIRO_FONT_SLANT_ITALIC
-    CAIRO_FONT_SLANT_OBLIQUE ;
-
-TYPEDEF: int cairo_font_weight_t
-C-ENUM:
-    CAIRO_FONT_WEIGHT_NORMAL
-    CAIRO_FONT_WEIGHT_BOLD ;
-
-TYPEDEF: int cairo_subpixel_order_t
-C-ENUM:
-    CAIRO_SUBPIXEL_ORDER_DEFAULT
-    CAIRO_SUBPIXEL_ORDER_RGB
-    CAIRO_SUBPIXEL_ORDER_BGR
-    CAIRO_SUBPIXEL_ORDER_VRGB
-    CAIRO_SUBPIXEL_ORDER_VBGR ;
-
-TYPEDEF: int cairo_hint_style_t
-C-ENUM:
-    CAIRO_HINT_STYLE_DEFAULT
-    CAIRO_HINT_STYLE_NONE
-    CAIRO_HINT_STYLE_SLIGHT
-    CAIRO_HINT_STYLE_MEDIUM
-    CAIRO_HINT_STYLE_FULL ;
-
-TYPEDEF: int cairo_hint_metrics_t
-C-ENUM:
-    CAIRO_HINT_METRICS_DEFAULT
-    CAIRO_HINT_METRICS_OFF
-    CAIRO_HINT_METRICS_ON ;
-
-TYPEDEF: void* cairo_font_options_t
-
-FUNCTION: cairo_font_options_t*
-cairo_font_options_create ( ) ;
-
-FUNCTION: cairo_font_options_t*
-cairo_font_options_copy ( cairo_font_options_t* original ) ;
-
-FUNCTION: void
-cairo_font_options_destroy ( cairo_font_options_t* options ) ;
-
-FUNCTION: cairo_status_t
-cairo_font_options_status ( cairo_font_options_t* options ) ;
-
-FUNCTION: void
-cairo_font_options_merge ( cairo_font_options_t* options, cairo_font_options_t* other ) ;
-
-FUNCTION: cairo_bool_t
-cairo_font_options_equal ( cairo_font_options_t* options, cairo_font_options_t* other ) ;
-
-FUNCTION: ulong
-cairo_font_options_hash ( cairo_font_options_t* options ) ;
-
-FUNCTION: void
-cairo_font_options_set_antialias ( cairo_font_options_t* options, cairo_antialias_t antialias ) ;
-
-FUNCTION: cairo_antialias_t
-cairo_font_options_get_antialias ( cairo_font_options_t* options ) ;
-
-FUNCTION: void
-cairo_font_options_set_subpixel_order ( cairo_font_options_t* options, cairo_subpixel_order_t subpixel_order ) ;
-
-FUNCTION: cairo_subpixel_order_t
-cairo_font_options_get_subpixel_order ( cairo_font_options_t* options ) ;
-
-FUNCTION: void
-cairo_font_options_set_hint_style ( cairo_font_options_t* options, cairo_hint_style_t hint_style ) ;
-
-FUNCTION: cairo_hint_style_t
-cairo_font_options_get_hint_style ( cairo_font_options_t* options ) ;
-
-FUNCTION: void
-cairo_font_options_set_hint_metrics ( cairo_font_options_t* options, cairo_hint_metrics_t hint_metrics ) ;
-
-FUNCTION: cairo_hint_metrics_t
-cairo_font_options_get_hint_metrics ( cairo_font_options_t* options ) ;
-
-! This interface is for dealing with text as text, not caring about the
-!  font object inside the the cairo_t.
-
-FUNCTION: void
-cairo_select_font_face ( cairo_t* cr, char* family, cairo_font_slant_t slant, cairo_font_weight_t weight ) ;
-
-FUNCTION: void
-cairo_set_font_size ( cairo_t* cr, double size ) ;
-
-FUNCTION: void
-cairo_set_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
-
-FUNCTION: void
-cairo_get_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
-
-FUNCTION: void
-cairo_set_font_options ( cairo_t* cr, cairo_font_options_t* options ) ;
-
-FUNCTION: void
-cairo_get_font_options ( cairo_t* cr, cairo_font_options_t* options ) ;
-
-FUNCTION: void
-cairo_set_font_face ( cairo_t* cr, cairo_font_face_t* font_face ) ;
-
-FUNCTION: cairo_font_face_t*
-cairo_get_font_face ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_set_scaled_font ( cairo_t* cr, cairo_scaled_font_t* scaled_font ) ;
-
-FUNCTION: cairo_scaled_font_t*
-cairo_get_scaled_font ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_show_text ( cairo_t* cr, char* utf8 ) ;
-
-FUNCTION: void
-cairo_show_glyphs ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ;
-
-FUNCTION: void
-cairo_text_path  ( cairo_t* cr, char* utf8 ) ;
-
-FUNCTION: void
-cairo_glyph_path ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ;
-
-FUNCTION: void
-cairo_text_extents ( cairo_t* cr, char* utf8, cairo_text_extents_t* extents ) ;
-
-FUNCTION: void
-cairo_glyph_extents ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ;
-
-FUNCTION: void
-cairo_font_extents ( cairo_t* cr, cairo_font_extents_t* extents ) ;
-
-! Generic identifier for a font style
-
-FUNCTION: cairo_font_face_t*
-cairo_font_face_reference ( cairo_font_face_t* font_face ) ;
-
-FUNCTION: void
-cairo_font_face_destroy ( cairo_font_face_t* font_face ) ;
-
-FUNCTION: uint
-cairo_font_face_get_reference_count ( cairo_font_face_t* font_face ) ;
-
-FUNCTION: cairo_status_t
-cairo_font_face_status ( cairo_font_face_t* font_face ) ;
-
-TYPEDEF: int cairo_font_type_t
-C-ENUM:
-    CAIRO_FONT_TYPE_TOY
-    CAIRO_FONT_TYPE_FT
-    CAIRO_FONT_TYPE_WIN32
-    CAIRO_FONT_TYPE_QUARTZ ;
-
-FUNCTION: cairo_font_type_t
-cairo_font_face_get_type ( cairo_font_face_t* font_face ) ;
-
-FUNCTION: void* 
-cairo_font_face_get_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key ) ;
-
-FUNCTION: cairo_status_t
-cairo_font_face_set_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
-
-! Portable interface to general font features.
-
-FUNCTION: cairo_scaled_font_t*
-cairo_scaled_font_create ( cairo_font_face_t* font_face, cairo_matrix_t* font_matrix, cairo_matrix_t* ctm, cairo_font_options_t* options ) ;
-
-FUNCTION: cairo_scaled_font_t*
-cairo_scaled_font_reference ( cairo_scaled_font_t* scaled_font ) ;
-
-FUNCTION: void
-cairo_scaled_font_destroy ( cairo_scaled_font_t* scaled_font ) ;
-
-FUNCTION: uint
-cairo_scaled_font_get_reference_count ( cairo_scaled_font_t* scaled_font ) ;
-
-FUNCTION: cairo_status_t
-cairo_scaled_font_status ( cairo_scaled_font_t* scaled_font ) ;
-
-FUNCTION: cairo_font_type_t
-cairo_scaled_font_get_type ( cairo_scaled_font_t* scaled_font ) ;
-
-FUNCTION: void* 
-cairo_scaled_font_get_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key ) ;
-
-FUNCTION: cairo_status_t
-cairo_scaled_font_set_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
-
-FUNCTION: void
-cairo_scaled_font_extents ( cairo_scaled_font_t* scaled_font, cairo_font_extents_t* extents ) ;
-
-FUNCTION: void
-cairo_scaled_font_text_extents ( cairo_scaled_font_t* scaled_font, char* utf8, cairo_text_extents_t* extents ) ;
-
-FUNCTION: void
-cairo_scaled_font_glyph_extents ( cairo_scaled_font_t* scaled_font, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ;
-
-FUNCTION: cairo_font_face_t*
-cairo_scaled_font_get_font_face ( cairo_scaled_font_t* scaled_font ) ;
-
-FUNCTION: void
-cairo_scaled_font_get_font_matrix ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* font_matrix ) ;
-
-FUNCTION: void
-cairo_scaled_font_get_ctm ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* ctm ) ;
-
-FUNCTION: void
-cairo_scaled_font_get_font_options ( cairo_scaled_font_t* scaled_font, cairo_font_options_t* options ) ;
-
-! Query functions
-
-FUNCTION: cairo_operator_t
-cairo_get_operator ( cairo_t* cr ) ;
-
-FUNCTION: cairo_pattern_t*
-cairo_get_source ( cairo_t* cr ) ;
-
-FUNCTION: double
-cairo_get_tolerance ( cairo_t* cr ) ;
-
-FUNCTION: cairo_antialias_t
-cairo_get_antialias ( cairo_t* cr ) ;
-
-FUNCTION: cairo_bool_t
-cairo_has_current_point ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_get_current_point ( cairo_t* cr, double* x, double* y ) ;
-
-FUNCTION: cairo_fill_rule_t
-cairo_get_fill_rule ( cairo_t* cr ) ;
-
-FUNCTION: double
-cairo_get_line_width ( cairo_t* cr ) ;
-
-FUNCTION: cairo_line_cap_t
-cairo_get_line_cap ( cairo_t* cr ) ;
-
-FUNCTION: cairo_line_join_t
-cairo_get_line_join ( cairo_t* cr ) ;
-
-FUNCTION: double
-cairo_get_miter_limit ( cairo_t* cr ) ;
-
-FUNCTION: int
-cairo_get_dash_count ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_get_dash ( cairo_t* cr, double* dashes, double* offset ) ;
-
-FUNCTION: void
-cairo_get_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
-
-FUNCTION: cairo_surface_t*
-cairo_get_target ( cairo_t* cr ) ;
-
-FUNCTION: cairo_surface_t*
-cairo_get_group_target ( cairo_t* cr ) ;
-
-TYPEDEF: int cairo_path_data_type_t
-C-ENUM:
-    CAIRO_PATH_MOVE_TO
-    CAIRO_PATH_LINE_TO
-    CAIRO_PATH_CURVE_TO
-    CAIRO_PATH_CLOSE_PATH ;
-
-! NEED TO DO UNION HERE
-C-STRUCT: cairo_path_data_t-point
-    { "double" "x" }
-    { "double" "y" } ;
-
-C-STRUCT: cairo_path_data_t-header
-    { "cairo_path_data_type_t" "type" }
-    { "int" "length" } ;
-
-C-UNION: cairo_path_data_t "cairo_path_data_t-point" "cairo_path_data_t-header" ;
-
-C-STRUCT: cairo_path_t
-    { "cairo_status_t"      "status" }
-    { "cairo_path_data_t*"  "data" }
-    { "int"                 "num_data" } ;
-
-FUNCTION: cairo_path_t*
-cairo_copy_path ( cairo_t* cr ) ;
-
-FUNCTION: cairo_path_t*
-cairo_copy_path_flat ( cairo_t* cr ) ;
-
-FUNCTION: void
-cairo_append_path ( cairo_t* cr, cairo_path_t* path ) ;
-
-FUNCTION: void
-cairo_path_destroy ( cairo_path_t* path ) ;
-
-! Error status queries
-
-FUNCTION: cairo_status_t
-cairo_status ( cairo_t* cr ) ;
-
-FUNCTION: char* 
-cairo_status_to_string ( cairo_status_t status ) ;
-
-! Surface manipulation
-
-FUNCTION: cairo_surface_t*
-cairo_surface_create_similar ( cairo_surface_t* other, cairo_content_t content, int width, int height ) ;
-
-FUNCTION: cairo_surface_t*
-cairo_surface_reference ( cairo_surface_t* surface ) ;
-
-FUNCTION: void
-cairo_surface_finish ( cairo_surface_t* surface ) ;
-
-FUNCTION: void
-cairo_surface_destroy ( cairo_surface_t* surface ) ;
-
-FUNCTION: uint
-cairo_surface_get_reference_count ( cairo_surface_t* surface ) ;
-
-FUNCTION: cairo_status_t
-cairo_surface_status ( cairo_surface_t* surface ) ;
-
-TYPEDEF: int cairo_surface_type_t
-C-ENUM:
-    CAIRO_SURFACE_TYPE_IMAGE
-    CAIRO_SURFACE_TYPE_PDF
-    CAIRO_SURFACE_TYPE_PS
-    CAIRO_SURFACE_TYPE_XLIB
-    CAIRO_SURFACE_TYPE_XCB
-    CAIRO_SURFACE_TYPE_GLITZ
-    CAIRO_SURFACE_TYPE_QUARTZ
-    CAIRO_SURFACE_TYPE_WIN32
-    CAIRO_SURFACE_TYPE_BEOS
-    CAIRO_SURFACE_TYPE_DIRECTFB
-    CAIRO_SURFACE_TYPE_SVG
-    CAIRO_SURFACE_TYPE_OS2
-    CAIRO_SURFACE_TYPE_WIN32_PRINTING
-    CAIRO_SURFACE_TYPE_QUARTZ_IMAGE ;
-
-FUNCTION: cairo_surface_type_t
-cairo_surface_get_type ( cairo_surface_t* surface ) ;
-
-FUNCTION: cairo_content_t
-cairo_surface_get_content ( cairo_surface_t* surface ) ;
-
-FUNCTION: cairo_status_t
-cairo_surface_write_to_png ( cairo_surface_t* surface, char* filename ) ;
-
-FUNCTION: cairo_status_t
-cairo_surface_write_to_png_stream ( cairo_surface_t* surface, cairo_write_func_t write_func, void* closure ) ;
-
-FUNCTION: void* 
-cairo_surface_get_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key ) ;
-
-FUNCTION: cairo_status_t
-cairo_surface_set_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
-
-FUNCTION: void
-cairo_surface_get_font_options ( cairo_surface_t* surface, cairo_font_options_t* options ) ;
-
-FUNCTION: void
-cairo_surface_flush ( cairo_surface_t* surface ) ;
-
-FUNCTION: void
-cairo_surface_mark_dirty ( cairo_surface_t* surface ) ;
-
-FUNCTION: void
-cairo_surface_mark_dirty_rectangle ( cairo_surface_t* surface, int x, int y, int width, int height ) ;
-
-FUNCTION: void
-cairo_surface_set_device_offset ( cairo_surface_t* surface, double x_offset, double y_offset ) ;
-
-FUNCTION: void
-cairo_surface_get_device_offset ( cairo_surface_t* surface, double* x_offset, double* y_offset ) ;
-
-FUNCTION: void
-cairo_surface_set_fallback_resolution ( cairo_surface_t* surface, double x_pixels_per_inch, double y_pixels_per_inch ) ;
-
-FUNCTION: void
-cairo_surface_copy_page ( cairo_surface_t* surface ) ;
-
-FUNCTION: void
-cairo_surface_show_page ( cairo_surface_t* surface ) ;
-
-! Image-surface functions
-
-TYPEDEF: int cairo_format_t
-C-ENUM:
-    CAIRO_FORMAT_ARGB32
-    CAIRO_FORMAT_RGB24
-    CAIRO_FORMAT_A8
-    CAIRO_FORMAT_A1
-    CAIRO_FORMAT_RGB16_565 ;
-
-FUNCTION: cairo_surface_t*
-cairo_image_surface_create ( cairo_format_t format, int width, int height ) ;
-
-FUNCTION: int
-cairo_format_stride_for_width ( cairo_format_t format, int width ) ;
-
-FUNCTION: cairo_surface_t*
-cairo_image_surface_create_for_data ( uchar* data, cairo_format_t format, int width, int height, int stride ) ;
-
-FUNCTION: uchar*
-cairo_image_surface_get_data ( cairo_surface_t* surface ) ;
-
-FUNCTION: cairo_format_t
-cairo_image_surface_get_format ( cairo_surface_t* surface ) ;
-
-FUNCTION: int
-cairo_image_surface_get_width ( cairo_surface_t* surface ) ;
-
-FUNCTION: int
-cairo_image_surface_get_height ( cairo_surface_t* surface ) ;
-
-FUNCTION: int
-cairo_image_surface_get_stride ( cairo_surface_t* surface ) ;
-
-FUNCTION: cairo_surface_t*
-cairo_image_surface_create_from_png ( char* filename ) ;
-
-FUNCTION: cairo_surface_t*
-cairo_image_surface_create_from_png_stream ( cairo_read_func_t read_func, void* closure ) ;
-
-! Pattern creation functions
-
-FUNCTION: cairo_pattern_t*
-cairo_pattern_create_rgb ( double red, double green, double blue ) ;
-
-FUNCTION: cairo_pattern_t*
-cairo_pattern_create_rgba ( double red, double green, double blue, double alpha ) ;
-
-FUNCTION: cairo_pattern_t*
-cairo_pattern_create_for_surface ( cairo_surface_t* surface ) ;
-
-FUNCTION: cairo_pattern_t*
-cairo_pattern_create_linear ( double x0, double y0, double x1, double y1 ) ;
-
-FUNCTION: cairo_pattern_t*
-cairo_pattern_create_radial ( double cx0, double cy0, double radius0, double cx1, double cy1, double radius1 ) ;
-
-FUNCTION: cairo_pattern_t*
-cairo_pattern_reference ( cairo_pattern_t* pattern ) ;
-
-FUNCTION: void
-cairo_pattern_destroy ( cairo_pattern_t* pattern ) ;
-
-FUNCTION: uint
-cairo_pattern_get_reference_count ( cairo_pattern_t* pattern ) ;
-
-FUNCTION: cairo_status_t
-cairo_pattern_status ( cairo_pattern_t* pattern ) ;
-
-FUNCTION: void*
-cairo_pattern_get_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key ) ;
-
-FUNCTION: cairo_status_t
-cairo_pattern_set_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
-
-TYPEDEF: int cairo_pattern_type_t
-C-ENUM:
-    CAIRO_PATTERN_TYPE_SOLID
-    CAIRO_PATTERN_TYPE_SURFACE
-    CAIRO_PATTERN_TYPE_LINEAR
-    CAIRO_PATTERN_TYPE_RADIA ;
-
-FUNCTION: cairo_pattern_type_t
-cairo_pattern_get_type ( cairo_pattern_t* pattern ) ;
-
-FUNCTION: void
-cairo_pattern_add_color_stop_rgb ( cairo_pattern_t* pattern, double offset, double red, double green, double blue ) ;
-
-FUNCTION: void
-cairo_pattern_add_color_stop_rgba ( cairo_pattern_t* pattern, double offset, double red, double green, double blue, double alpha ) ;
-
-FUNCTION: void
-cairo_pattern_set_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ;
-
-FUNCTION: void
-cairo_pattern_get_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ;
-
-TYPEDEF: int cairo_extend_t
-C-ENUM:
-    CAIRO_EXTEND_NONE
-    CAIRO_EXTEND_REPEAT
-    CAIRO_EXTEND_REFLECT
-    CAIRO_EXTEND_PAD ;
-
-FUNCTION: void
-cairo_pattern_set_extend ( cairo_pattern_t* pattern, cairo_extend_t extend ) ;
-
-FUNCTION: cairo_extend_t
-cairo_pattern_get_extend ( cairo_pattern_t* pattern ) ;
-
-TYPEDEF: int cairo_filter_t
-C-ENUM:
-    CAIRO_FILTER_FAST
-    CAIRO_FILTER_GOOD
-    CAIRO_FILTER_BEST
-    CAIRO_FILTER_NEAREST
-    CAIRO_FILTER_BILINEAR
-    CAIRO_FILTER_GAUSSIAN ;
-
-FUNCTION: void
-cairo_pattern_set_filter ( cairo_pattern_t* pattern, cairo_filter_t filter ) ;
-
-FUNCTION: cairo_filter_t
-cairo_pattern_get_filter ( cairo_pattern_t* pattern ) ;
-
-FUNCTION: cairo_status_t
-cairo_pattern_get_rgba ( cairo_pattern_t* pattern, double* red, double* green, double* blue, double* alpha ) ;
-
-FUNCTION: cairo_status_t
-cairo_pattern_get_surface ( cairo_pattern_t* pattern, cairo_surface_t* *surface ) ;
-
-FUNCTION: cairo_status_t
-cairo_pattern_get_color_stop_rgba ( cairo_pattern_t* pattern, int index, double* offset, double* red, double* green, double* blue, double* alpha ) ;
-
-FUNCTION: cairo_status_t
-cairo_pattern_get_color_stop_count ( cairo_pattern_t* pattern, int* count ) ;
-
-FUNCTION: cairo_status_t
-cairo_pattern_get_linear_points ( cairo_pattern_t* pattern, double* x0, double* y0, double* x1, double* y1 ) ;
-
-FUNCTION: cairo_status_t
-cairo_pattern_get_radial_circles ( cairo_pattern_t* pattern, double* x0, double* y0, double* r0, double* x1, double* y1, double* r1 ) ;
-
-! Matrix functions
-
-FUNCTION: void
-cairo_matrix_init ( cairo_matrix_t* matrix, double  xx, double  yx, double  xy, double  yy, double  x0, double  y0 ) ;
-
-FUNCTION: void
-cairo_matrix_init_identity ( cairo_matrix_t* matrix ) ;
-
-FUNCTION: void
-cairo_matrix_init_translate ( cairo_matrix_t* matrix, double tx, double ty ) ;
-
-FUNCTION: void
-cairo_matrix_init_scale ( cairo_matrix_t* matrix, double sx, double sy ) ;
-
-FUNCTION: void
-cairo_matrix_init_rotate ( cairo_matrix_t* matrix, double radians ) ;
-
-FUNCTION: void
-cairo_matrix_translate ( cairo_matrix_t* matrix, double tx, double ty ) ;
-
-FUNCTION: void
-cairo_matrix_scale ( cairo_matrix_t* matrix, double sx, double sy ) ;
-
-FUNCTION: void
-cairo_matrix_rotate ( cairo_matrix_t* matrix, double radians ) ;
-
-FUNCTION: cairo_status_t
-cairo_matrix_invert ( cairo_matrix_t* matrix ) ;
-
-FUNCTION: void
-cairo_matrix_multiply ( cairo_matrix_t* result, cairo_matrix_t* a, cairo_matrix_t* b ) ;
-
-FUNCTION: void
-cairo_matrix_transform_distance ( cairo_matrix_t* matrix, double* dx, double* dy ) ;
-
-FUNCTION: void
-cairo_matrix_transform_point ( cairo_matrix_t* matrix, double* x, double* y ) ;
-
-! Functions to be used while debugging (not intended for use in production code)
-FUNCTION: void
-cairo_debug_reset_static_data ( ) ;
diff --git a/extra/cairo/gadgets/gadgets.factor b/extra/cairo/gadgets/gadgets.factor
deleted file mode 100644 (file)
index 8ed7a3c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-! Copyright (C) 2008 Matthew Willis.
-! See http://factorcode.org/license.txt for BSD license.
-USING: sequences math kernel byte-arrays cairo.ffi cairo
-io.backend ui.gadgets accessors opengl.gl arrays fry
-classes ui.render namespaces ;
-
-IN: cairo.gadgets
-
-: width>stride ( width -- stride ) 4 * ;
-    
-GENERIC: render-cairo* ( gadget -- )
-
-: render-cairo ( gadget -- byte-array )
-    dup dim>> first2 over width>stride
-    [ * nip <byte-array> dup CAIRO_FORMAT_ARGB32 ] 
-    [ cairo_image_surface_create_for_data ] 3bi
-    rot '[ _ render-cairo* ] with-cairo-from-surface ; inline
-
-TUPLE: cairo-gadget < gadget ;
-
-: <cairo-gadget> ( dim -- gadget )
-    cairo-gadget new-gadget
-        swap >>dim ;
-
-M: cairo-gadget draw-gadget*
-    [ dim>> ] [ render-cairo ] bi
-    origin get first2 glRasterPos2i
-    1.0 -1.0 glPixelZoom
-    >r first2 GL_BGRA GL_UNSIGNED_BYTE r>
-    glDrawPixels ;
-
-: copy-surface ( surface -- )
-    cr swap 0 0 cairo_set_source_surface
-    cr cairo_paint ;
diff --git a/extra/cairo/samples/samples.factor b/extra/cairo/samples/samples.factor
deleted file mode 100644 (file)
index bdd02c9..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-! Copyright (C) 2008 Matthew Willis
-! See http://factorcode.org/license.txt for BSD license.
-!
-! these samples are a subset of the samples on
-! http://cairographics.org/samples/
-USING: cairo cairo.ffi locals math.constants math
-io.backend kernel alien.c-types libc namespaces
-cairo.gadgets ui.gadgets accessors specialized-arrays.double ;
-
-IN: cairo.samples
-
-TUPLE: arc-gadget < cairo-gadget ;
-M:: arc-gadget render-cairo* ( gadget -- )
-    [let | xc [ 128.0 ]
-           yc [ 128.0 ]
-           radius [ 100.0 ]
-           angle1 [ pi 1/4 * ]
-           angle2 [ pi ] |
-        cr 10.0 cairo_set_line_width
-        cr xc yc radius angle1 angle2 cairo_arc
-        cr cairo_stroke
-        
-        ! draw helping lines
-        cr 1 0.2 0.2 0.6 cairo_set_source_rgba
-        cr 6.0 cairo_set_line_width
-        
-        cr xc yc 10.0 0 2 pi * cairo_arc
-        cr cairo_fill
-        
-        cr xc yc radius angle1 angle1 cairo_arc
-        cr xc yc cairo_line_to
-        cr xc yc radius angle2 angle2 cairo_arc
-        cr xc yc cairo_line_to
-        cr cairo_stroke
-    ] ;
-
-TUPLE: clip-gadget < cairo-gadget ;
-M: clip-gadget render-cairo* ( gadget -- )
-    drop
-    cr 128 128 76.8 0 2 pi * cairo_arc
-    cr cairo_clip
-    cr cairo_new_path
-    
-    cr 0 0 256 256 cairo_rectangle
-    cr cairo_fill
-    cr 0 1 0 cairo_set_source_rgb
-    cr 0 0 cairo_move_to
-    cr 256 256 cairo_line_to
-    cr 256 0 cairo_move_to
-    cr 0 256 cairo_line_to
-    cr 10 cairo_set_line_width
-    cr cairo_stroke ;
-
-TUPLE: clip-image-gadget < cairo-gadget ;
-M:: clip-image-gadget render-cairo* ( gadget -- )
-    [let* | png [ "resource:misc/icons/Factor_128x128.png"
-                  normalize-path cairo_image_surface_create_from_png ]
-            w [ png cairo_image_surface_get_width ]
-            h [ png cairo_image_surface_get_height ] |
-        cr 128 128 76.8 0 2 pi * cairo_arc
-        cr cairo_clip
-        cr cairo_new_path
-
-        cr 192.0 w / 192.0 h / cairo_scale
-        cr png 32 32 cairo_set_source_surface
-        cr cairo_paint
-        png cairo_surface_destroy
-    ] ;
-
-TUPLE: dash-gadget < cairo-gadget ;
-M:: dash-gadget render-cairo* ( gadget -- )
-    [let | dashes [ double-array{ 50 10 10 10 } underlying>> ]
-           ndash [ 4 ] |
-        cr dashes ndash -50 cairo_set_dash
-        cr 10 cairo_set_line_width
-        cr 128.0 25.6 cairo_move_to
-        cr 230.4 230.4 cairo_line_to
-        cr -102.4 0 cairo_rel_line_to
-        cr 51.2 230.4 51.2 128.0 128.0 128.0 cairo_curve_to
-        cr cairo_stroke
-    ] ;
-
-TUPLE: gradient-gadget < cairo-gadget ;
-M:: gradient-gadget render-cairo* ( gadget -- )
-    [let | pat [ 0 0 0 256 cairo_pattern_create_linear ]
-           radial [ 115.2 102.4 25.6 102.4 102.4 128.0
-                    cairo_pattern_create_radial ] |
-        pat 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
-        pat 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
-        cr 0 0 256 256 cairo_rectangle
-        cr pat cairo_set_source
-        cr cairo_fill
-        pat cairo_pattern_destroy
-        
-        radial 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
-        radial 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
-        cr radial cairo_set_source
-        cr 128.0 128.0 76.8 0 2 pi * cairo_arc
-        cr cairo_fill
-        radial cairo_pattern_destroy
-    ] ;
-
-TUPLE: text-gadget < cairo-gadget ;
-M: text-gadget render-cairo* ( gadget -- )
-    drop
-    cr "Serif" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_BOLD
-    cairo_select_font_face
-    cr 50 cairo_set_font_size
-    cr 10 135 cairo_move_to
-    cr "Hello" cairo_show_text
-    
-    cr 70 165 cairo_move_to
-    cr "factor" cairo_text_path
-    cr 0.5 0.5 1 cairo_set_source_rgb
-    cr cairo_fill_preserve
-    cr 0 0 0 cairo_set_source_rgb
-    cr 2.56 cairo_set_line_width
-    cr cairo_stroke
-    
-    ! draw helping lines
-    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
-    cr 10 135 5.12 0 2 pi * cairo_arc
-    cr cairo_close_path
-    cr 70 165 5.12 0 2 pi * cairo_arc
-    cr cairo_fill ;
-
-TUPLE: utf8-gadget < cairo-gadget ;
-M: utf8-gadget render-cairo* ( gadget -- )
-    drop
-    cr "Sans" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_NORMAL
-    cairo_select_font_face
-    cr 50 cairo_set_font_size
-    "cairo_text_extents_t" malloc-object
-    cr "日本語" pick cairo_text_extents
-    cr over
-    [ cairo_text_extents_t-width 2 / ]
-    [ cairo_text_extents_t-x_bearing ] bi +
-    128 swap - pick
-    [ cairo_text_extents_t-height 2 / ]
-    [ cairo_text_extents_t-y_bearing ] bi +
-    128 swap - cairo_move_to
-    free
-    cr "日本語" cairo_show_text
-    
-    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
-    cr 6 cairo_set_line_width
-    cr 128 0 cairo_move_to
-    cr 0 256 cairo_rel_line_to
-    cr 0 128 cairo_move_to
-    cr 256 0 cairo_rel_line_to
-    cr cairo_stroke ;
- USING: quotations cairo.gadgets ui.gadgets.panes sequences ;
- : samples ( -- )
-    {
-        arc-gadget clip-gadget clip-image-gadget dash-gadget
-        gradient-gadget text-gadget utf8-gadget
-    }
-    [ new-gadget { 256 256 } >>dim gadget. ] each ;
- MAIN: samples
diff --git a/extra/cairo/summary.txt b/extra/cairo/summary.txt
deleted file mode 100644 (file)
index f6cb370..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Cairo graphics library binding
diff --git a/extra/cairo/tags.txt b/extra/cairo/tags.txt
deleted file mode 100644 (file)
index bb863cf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-bindings
index e1c89374fd2cae73de6f188dd9ea41d6e3084ca9..3168b4b27d8bff6a90a9e3fd885506cec465ce11 100644 (file)
@@ -1,12 +1,12 @@
 
 USING: kernel alien.c-types combinators namespaces make arrays
-       sequences sequences.lib namespaces.lib splitting
+       sequences splitting
        math math.functions math.vectors math.trig
        opengl.gl opengl.glu opengl ui ui.gadgets.slate
        vars colors self self.slots
        random-weighted colors.hsv cfdg.gl accessors
        ui.gadgets.handler ui.gestures assocs ui.gadgets macros
-       qualified specialized-arrays.double ;
+       specialized-arrays.double ;
 
 QUALIFIED: syntax
 
@@ -60,7 +60,7 @@ VAR: color-stack
 : double-nth* ( c-array indices -- seq )
   swap byte-array>double-array [ nth ] curry map ;
 
-: check-size ( modelview -- num ) { 0 1 4 5 } double-nth* [ abs ] map biggest ;
+: check-size ( modelview -- num ) { 0 1 4 5 } double-nth* [ abs ] map supremum ;
 
 VAR: threshold
 
index e57116a25b7ad1a6bc5c9f6adf8796eacc57d157..4a036b68665ede0577648e0cfc39ef17d904b8a3 100755 (executable)
@@ -1,6 +1,6 @@
 
 USING: kernel combinators words quotations arrays sequences locals macros
-       shuffle combinators.lib generalizations fry ;
+       shuffle generalizations fry ;
 
 IN: combinators.cleave
 
diff --git a/extra/combinators/lib/authors.txt b/extra/combinators/lib/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/extra/combinators/lib/lib-docs.factor b/extra/combinators/lib/lib-docs.factor
deleted file mode 100755 (executable)
index cde3b4d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-USING: help.syntax help.markup kernel prettyprint sequences
-quotations math ;
-IN: combinators.lib
-
-HELP: generate
-{ $values { "generator" quotation } { "predicate" quotation } { "obj" object } }
-{ $description "Loop until the generator quotation generates an object that satisfies predicate quotation." }
-{ $unchecked-example
-    "! Generate a random 20-bit prime number congruent to 3 (mod 4)"
-    "USING: combinators.lib math math.miller-rabin prettyprint ;"
-    "[ 20 random-prime ] [ 4 mod 3 = ] generate ."
-    "526367"
-} ;
-
-HELP: %chance
-{ $values { "quot" quotation } { "n" integer } }
-{ $description "Calls the quotation " { $snippet "n" } " percent of the time." }
-{ $unchecked-example
-    "USING: io ;"
-    "[ \"hello, world!  maybe.\" print ] 50 %chance"
-    ""
-} ;
diff --git a/extra/combinators/lib/lib-tests.factor b/extra/combinators/lib/lib-tests.factor
deleted file mode 100755 (executable)
index 9489798..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-USING: combinators.lib kernel math random sequences tools.test continuations
-    arrays vectors ;
-IN: combinators.lib.tests
-
-[ 6 -1 ] [ 5 0 1 [ + ] [ - ] bi, bi* ] unit-test
-[ 6 -1 1 ] [ 5 0 1 1 [ + ] [ - ] [ * ] tri, tri* ] unit-test
-
-[ 5 4 ] [ 5 0 1 [ + ] [ - ] bi*, bi ] unit-test
-[ 5 4 5 ] [ 5 0 1 1 [ + ] [ - ] [ * ] tri*, tri ] unit-test
-
-[ 5 6 ] [ 5 0 1 [ + ] bi@, bi ] unit-test
-[ 5 6 7 ] [ 5 0 1 2 [ + ] tri@, tri ] unit-test
-
-[ 5 ] [ [ 10 random ] [ 5 = ] generate ] unit-test
-[ t ] [ [ 10 random ] [ even? ] generate even? ] unit-test
-
-[ { "foo" "xbarx" } ]
-[
-    { "oof" "bar" } { [ reverse ] [ "x" dup surround ] } parallel-call
-] unit-test
-
-{ 1 1 } [
-    [ even? ] [ drop 1 ] [ drop 2 ] ifte
-] must-infer-as
diff --git a/extra/combinators/lib/lib.factor b/extra/combinators/lib/lib.factor
deleted file mode 100755 (executable)
index 5e78d18..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-! Copyright (C) 2007, 2008 Slava Pestov, Chris Double,
-!                          Doug Coleman, Eduardo Cavazos,
-!                          Daniel Ehrenberg.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel combinators fry namespaces make quotations hashtables
-sequences assocs arrays stack-checker effects math math.ranges
-generalizations macros continuations random locals accessors ;
-
-IN: combinators.lib
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! Currying cleave combinators
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: bi, ( obj quot quot -- quot' quot' )
-    [ [ curry ] curry ] bi@ bi ; inline
-: tri, ( obj quot quot quot -- quot' quot' quot' )
-    [ [ curry ] curry ] tri@ tri ; inline
-
-: bi*, ( obj obj quot quot -- quot' quot' )
-    [ [ curry ] curry ] bi@ bi* ; inline
-: tri*, ( obj obj obj quot quot quot -- quot' quot' quot' )
-    [ [ curry ] curry ] tri@ tri* ; inline
-
-: bi@, ( obj obj quot -- quot' quot' )
-    [ curry ] curry bi@ ; inline
-: tri@, ( obj obj obj quot -- quot' quot' quot' )
-    [ curry ] curry tri@ ; inline
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! Generalized versions of core combinators
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: quad ( x p q r s -- ) [ keep ] 3dip [ keep ] 2dip [ keep ] dip call ; inline
-
-: 4slip ( quot a b c d -- a b c d ) 4 nslip ; inline
-
-: 4keep ( w x y z quot -- w x y z ) 4 nkeep ; inline 
-
-: 2with ( param1 param2 obj quot -- obj curry )
-    with with ; inline
-
-: 3with ( param1 param2 param3 obj quot -- obj curry )
-    with with with ; inline
-
-: with* ( obj assoc quot -- assoc curry )
-    swapd [ [ -rot ] dip call ] 2curry ; inline
-
-: 2with* ( obj1 obj2 assoc quot -- assoc curry )
-    with* with* ; inline
-
-: 3with* ( obj1 obj2 obj3 assoc quot -- assoc curry )
-    with* with* with* ; inline
-
-: assoc-each-with ( obj assoc quot -- )
-    with* assoc-each ; inline
-
-: assoc-map-with ( obj assoc quot -- assoc )
-    with* assoc-map ; inline
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! ifte
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-MACRO: preserving ( predicate -- quot )
-    dup infer in>>
-    dup 1+
-    '[ _ _ nkeep _ nrot ] ;
-
-MACRO: ifte ( quot quot quot -- )
-    '[ _ preserving _ _ if ] ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! switch
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-MACRO: switch ( quot -- )
-    [ [ [ preserving ] curry ] dip ] assoc-map
-    [ cond ] curry ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-! Conceptual implementation:
-
-! : pcall ( seq quots -- seq ) [ call ] 2map ;
-
-MACRO: parallel-call ( quots -- )
-    [ '[ [ unclip @ ] dip [ push ] keep ] ] map concat
-    '[ V{ } clone @ nip >array ] ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! map-call and friends
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: (make-call-with) ( quots -- quot ) 
-    [ [ keep ] curry ] map concat [ drop ] append ;
-
-MACRO: map-call-with ( quots -- )
-    [ (make-call-with) ] keep length [ narray ] curry compose ;
-
-: (make-call-with2) ( quots -- quot )
-    [ [ 2dup >r >r ] prepend [ r> r> ] append ] map concat
-    [ 2drop ] append ;
-
-MACRO: map-call-with2 ( quots -- )
-    [
-        [ [ 2dup >r >r ] prepend [ r> r> ] append ] map concat
-        [ 2drop ] append    
-    ] keep length [ narray ] curry append ;
-
-MACRO: map-exec-with ( words -- )
-    [ 1quotation ] map [ map-call-with ] curry ;
-
-MACRO: construct-slots ( assoc tuple-class -- tuple ) 
-    [ new ] curry swap [
-        [ dip ] curry swap 1quotation [ keep ] curry compose
-    ] { } assoc>map concat compose ;
-
-: 2quot-with ( obj seq quot1 quot2 -- seq quot1 quot2 )
-    >r pick >r with r> r> swapd with ;
-
-MACRO: multikeep ( word out-indexes -- ... )
-    [
-        dup >r [ \ npick \ >r 3array % ] each
-        %
-        r> [ drop \ r> , ] each
-    ] [ ] make ;
-
-: do-while ( pred body tail -- )
-    [ tuck 2slip ] dip while ; inline
-
-: generate ( generator predicate -- obj )
-    '[ dup @ dup [ nip ] unless not ]
-    swap [ ] do-while ;
-
-MACRO: predicates ( seq -- quot/f )
-    dup [ 1quotation [ drop ] prepend ] map
-    [ [ [ dup ] prepend ] map ] dip zip [ drop f ] suffix
-    [ cond ] curry ;
-
-: %chance ( quot n -- ) 100 random > swap when ; inline
index 4d6479db915d00bb1bfb9fa31de98a05d29a5148..1879c52826035660476ec8fb72ae773d5932d481 100755 (executable)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2007, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io.files io.launcher io.styles io.encodings.ascii
-prettyprint io hashtables kernel sequences assocs system sorting
-math.parser sets ;
+USING: io.files io.launcher io.directories io.pathnames
+io.encodings.ascii io prettyprint hashtables kernel sequences
+assocs system sorting math.parser sets ;
 IN: contributors
 
 : changelog ( -- authors )
diff --git a/extra/cords/authors.txt b/extra/cords/authors.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/extra/cords/cords-tests.factor b/extra/cords/cords-tests.factor
deleted file mode 100644 (file)
index 0058c8f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-IN: cords.tests
-USING: cords strings tools.test kernel sequences ;
-
-[ "hello world" ] [ "hello" " world" cord-append dup like ] unit-test
-[ "hello world" ] [ { "he" "llo" " world" } cord-concat dup like ] unit-test
diff --git a/extra/cords/cords.factor b/extra/cords/cords.factor
deleted file mode 100644 (file)
index 9157444..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs sequences sorting binary-search math
-math.order arrays combinators kernel ;
-IN: cords
-
-<PRIVATE
-
-TUPLE: simple-cord first second ;
-
-M: simple-cord length
-    [ first>> length ] [ second>> length ] bi + ;
-
-M: simple-cord virtual-seq first>> ;
-
-M: simple-cord virtual@
-    2dup first>> length <
-    [ first>> ] [ [ first>> length - ] [ second>> ] bi ] if ;
-
-TUPLE: multi-cord count seqs ;
-
-M: multi-cord length count>> ;
-
-M: multi-cord virtual@
-    dupd
-    seqs>> [ first <=> ] with search nip
-    [ first - ] [ second ] bi ;
-
-M: multi-cord virtual-seq
-    seqs>> [ f ] [ first second ] if-empty ;
-
-: <cord> ( seqs -- cord )
-    dup length 2 = [
-        first2 simple-cord boa
-    ] [
-        [ 0 [ length + ] accumulate ] keep zip multi-cord boa
-    ] if ;
-
-PRIVATE>
-
-UNION: cord simple-cord multi-cord ;
-
-INSTANCE: cord virtual-sequence
-
-INSTANCE: multi-cord virtual-sequence
-
-: cord-append ( seq1 seq2 -- cord )
-    {
-        { [ over empty? ] [ nip ] }
-        { [ dup empty? ] [ drop ] }
-        { [ 2dup [ cord? ] both? ] [ [ seqs>> values ] bi@ append <cord> ] }
-        { [ over cord? ] [ [ seqs>> values ] dip suffix <cord> ] }
-        { [ dup cord? ] [ seqs>> values swap prefix <cord> ] }
-        [ 2array <cord> ]
-    } cond ;
-
-: cord-concat ( seqs -- cord )
-    {
-        { [ dup empty? ] [ drop f ] }
-        { [ dup length 1 = ] [ first ] }
-        [
-            [
-                {
-                    { [ dup cord? ] [ seqs>> values ] }
-                    { [ dup empty? ] [ drop { } ] }
-                    [ 1array ]
-                } cond
-            ] map concat <cord>
-        ]
-    } cond ;
diff --git a/extra/cords/summary.txt b/extra/cords/summary.txt
deleted file mode 100644 (file)
index 3c69862..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Virtual sequence concatenation
diff --git a/extra/cords/tags.txt b/extra/cords/tags.txt
deleted file mode 100644 (file)
index 42d711b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-collections
index e07e9725d0d9c34da52e6c33678994d87a941dfe..f4ac97354dc65bfd8ece9054fbe43448094020db 100644 (file)
@@ -16,6 +16,6 @@ test1 dup *coresume . dup *coresume . dup *coresume . dup *coresume 2drop
 : test3 ( -- co )
   [ [ coyield* ] each ] cocreate ;
 
-{ "c" "b" "a" } [ test3 { "a" "b" "c" } over coresume >r dup *coresume >r *coresume r> r> ] unit-test
+{ "c" "b" "a" } [ test3 { "a" "b" "c" } over coresume [ dup *coresume [ *coresume ] dip ] dip ] unit-test
 
 { 4+2/3 } [ [ 1+ coyield 2 * coyield 3 / coreset ] cocreate 1 5 [ over coresume ] times nip ] unit-test
\ No newline at end of file
index b480c18913200d47f76145dd31222cfc68a8c0a2..62103bf5103fa159346fe53d616fc6c8977d0082 100755 (executable)
@@ -10,15 +10,15 @@ IN: crypto.hmac
     initialize-sha1 process-sha1-block
     stream>sha1 get-sha1
     initialize-sha1
-    >r process-sha1-block r>
-    process-sha1-block get-sha1 ;
+    [ process-sha1-block ]
+    [ process-sha1-block ] bi* get-sha1 ;
 
 : md5-hmac ( Ko Ki -- hmac )
     initialize-md5 process-md5-block
     stream>md5 get-md5
     initialize-md5
-    >r process-md5-block r>
-    process-md5-block get-md5 ;
+    [ process-md5-block ]
+    [ process-md5-block ] bi* get-md5 ;
 
 : seq-bitxor ( seq seq -- seq )
     [ bitxor ] 2map ;
index 32a913ef233ff69031874c5bc924568a5420162b..e292981876dcd60a9ad6d882183da8398432e436 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel base64 checksums.md5 symbols sequences checksums
+USING: kernel base64 checksums.md5 sequences checksums
 locals prettyprint math math.bitwise grouping io combinators
 fry make combinators.short-circuit math.functions splitting ;
 IN: crypto.passwd-md5
index b1fdf2463e5b183eb6e2ab713d3eee47dc7e1263..dd0042455cc3d66e6ce6fefc0a94ca7a2afc574e 100755 (executable)
@@ -11,7 +11,7 @@ M: descriptive-error summary
 \r
 <PRIVATE\r
 : rethrower ( word inputs -- quot )\r
-    [ length ] keep [ >r narray r> swap 2array flip ] 2curry\r
+    [ length ] keep [ [ narray ] dip swap 2array flip ] 2curry\r
     [ 2 ndip descriptive-error ] 2curry ;\r
 \r
 : [descriptive] ( word def -- newdef )\r
index be3ba40ac008da4261d74951333af733e414683e..ca37691ba7fd9921908253d50291a9544c728101 100644 (file)
@@ -7,7 +7,6 @@ USING: kernel byte-arrays combinators strings arrays sequences splitting
        accessors
        combinators.cleave
        newfx
-       symbols
        ;
 
 IN: dns
@@ -414,11 +413,12 @@ SYMBOLS: NO-ERROR FORMAT-ERROR SERVER-FAILURE NAME-ERROR NOT-IMPLEMENTED
         [ 6 + get-double ]
       }
         2cleave
-      >r >r >r
-      get-question-section r>
-      get-rr-section       r>
-      get-rr-section       r>
-      get-rr-section
+      {
+        [ get-question-section ]
+        [ get-rr-section ]
+        [ get-rr-section ]
+        [ get-rr-section ]
+      } spread
       2drop
     ]
   }
@@ -426,7 +426,7 @@ SYMBOLS: NO-ERROR FORMAT-ERROR SERVER-FAILURE NAME-ERROR NOT-IMPLEMENTED
 
 : ba->message ( ba -- message ) parse-message ;
 
-: with-message-bytes ( ba quot -- ) >r ba->message r> call message->ba ; inline
+: with-message-bytes ( ba quot -- ) [ ba->message ] dip call message->ba ; inline
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
index ad16db7b4157a55e40def0551110bdab5bcde1b3..d8a8adc88e7b583981b0698404b18b8e42fb2a2d 100644 (file)
@@ -1,8 +1,8 @@
 
 USING: kernel combinators sequences sets math threads namespaces continuations
        debugger io io.sockets unicode.case accessors destructors
-       combinators.cleave combinators.lib combinators.short-circuit 
-       newfx bake bake.fry
+       combinators.cleave combinators.short-circuit 
+       newfx fry
        dns dns.util dns.misc ;
 
 IN: dns.server
@@ -204,5 +204,5 @@ DEFER: query->rrs
   [ receive-packet handle-request ] [ receive-loop ] bi ;
 
 : loop ( addr-spec -- )
-  [ <datagram> '[ , [ receive-loop ] with-disposal ] try ] [ loop ] bi ;
+  [ <datagram> '[ _ [ receive-loop ] with-disposal ] try ] [ loop ] bi ;
 
index 9ae738994054df9f22d657bcbae7416d2d982037..5b2e63838ab56d78b52fc80fcb399c71af82e9c1 100644 (file)
@@ -1,14 +1,12 @@
 
-USING: kernel sequences sorting math math.order macros bake bake.fry ;
+USING: kernel sequences sorting math math.order macros fry ;
 
 IN: dns.util
 
 : tri-chain ( obj p q r -- x y z )
-  >r >r call dup r> call dup r> call ; inline
+  [ [ call dup ] dip call dup ] dip call ; inline
 
-MACRO: 1if ( test then else -- ) '[ dup @ , , if ] ;
-
-! : 1if ( test then else -- ) >r >r >r dup r> call r> r> if ; inline ;
+MACRO: 1if ( test then else -- ) '[ dup @ _ _ if ] ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
index c0636c5fd7b118909d38cdcb1f546223cc6e24b9..512817bc4d54216e636f1c4a50642b2003c70d9a 100644 (file)
@@ -6,7 +6,7 @@ make math.parser io accessors ;
 IN: faq
 
 : find-after ( seq quot -- elem after )
-    over >r find r> rot 1+ tail ; inline
+    over [ find ] dip rot 1+ tail ; inline
 
 : tag-named*? ( tag name -- ? )
     assure-name swap tag-named? ;
@@ -18,7 +18,7 @@ C: <q/a> q/a
 : li>q/a ( li -- q/a )
     [ "br" tag-named*? not ] filter
     [ "strong" tag-named*? ] find-after
-    >r children>> r> <q/a> ;
+    [ children>> ] dip <q/a> ;
 
 : q/a>li ( q/a -- li )
     [ question>> "strong" build-tag* f "br" build-tag* 2array ] keep
@@ -48,7 +48,7 @@ C: <question-list> question-list
     title>> [ "title" pick set-at ] when* ;
 
 : html>question-list ( h3 ol -- question-list )
-    >r [ children>string ] [ f ] if* r>
+    [ [ children>string ] [ f ] if* ] dip
     children-tags [ li>q/a ] map <question-list> ;
 
 : question-list>h3 ( id question-list -- h3 )
@@ -58,8 +58,7 @@ C: <question-list> question-list
     ] [ drop f ] if* ;
 
 : question-list>html ( question-list start id -- h3/f ol )
-    -rot >r [ question-list>h3 ] keep
-    seq>> [ q/a>li ] map "ol" build-tag* r>
+    -rot [ [ question-list>h3 ] keep seq>> [ q/a>li ] map "ol" build-tag* ] dip
     number>string "start" pick set-at
     "margin-left: 5em" "style" pick set-at ;
 
@@ -69,7 +68,7 @@ C: <faq> faq
 
 : html>faq ( div -- faq )
     unclip swap { "h3" "ol" } [ tags-named ] with map
-    first2 >r f prefix r> [ html>question-list ] 2map <faq> ;
+    first2 [ f prefix ] dip [ html>question-list ] 2map <faq> ;
 
 : header, ( faq -- )
     dup header>> ,
index c308c94054db8b7860f73a5806a1c3587b71041e..cf733dbbfd8aa3a3f1a497c71fe25ba93b052e88 100755 (executable)
@@ -2,7 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors kernel peg strings sequences math math.parser
 namespaces make words quotations arrays hashtables io
-io.streams.string assocs ascii peg.parsers accessors ;
+io.streams.string assocs ascii peg.parsers accessors
+words.symbol ;
 IN: fjsc
 
 TUPLE: ast-number value ;
diff --git a/extra/frame-buffer/frame-buffer.factor b/extra/frame-buffer/frame-buffer.factor
new file mode 100644 (file)
index 0000000..708c0d8
--- /dev/null
@@ -0,0 +1,112 @@
+
+USING: accessors alien.c-types combinators grouping kernel
+       locals math math.geometry.rect math.vectors opengl.gl sequences
+       ui.gadgets ui.render ;
+
+IN: frame-buffer
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TUPLE: <frame-buffer> < gadget pixels last-dim ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+GENERIC: update-frame-buffer ( <frame-buffer> -- )
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: init-frame-buffer-pixels ( frame-buffer -- )
+  dup
+    rect-dim product "uint[4]" <c-array>
+  >>pixels
+  drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: frame-buffer ( -- <frame-buffer> ) <frame-buffer> new-gadget ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+:: draw-pixels ( FRAME-BUFFER -- )
+
+  FRAME-BUFFER rect-dim first2
+  GL_RGBA
+  GL_UNSIGNED_INT
+  FRAME-BUFFER pixels>>
+  glDrawPixels ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+:: read-pixels ( FRAME-BUFFER -- )
+
+  0
+  0
+  FRAME-BUFFER rect-dim first2
+  GL_RGBA
+  GL_UNSIGNED_INT
+  FRAME-BUFFER pixels>>
+  glReadPixels ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+:: copy-row ( OLD NEW -- )
+  
+  [let | LEN [ OLD NEW min-length ] |
+
+    OLD LEN head-slice 0 NEW copy ] ;
+
+: copy-pixels ( old-pixels old-width new-pixels new-width -- )
+  [ 16 * <sliced-groups> ] 2bi@
+  [ copy-row ] 2each ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: update-last-dim ( frame-buffer -- ) dup rect-dim >>last-dim drop ;
+
+M:: <frame-buffer> layout* ( FRAME-BUFFER -- )
+
+  {
+    {
+      [ FRAME-BUFFER last-dim>> f = ]
+      [
+        FRAME-BUFFER init-frame-buffer-pixels
+
+        FRAME-BUFFER update-last-dim
+      ]
+    }
+    {
+      [ FRAME-BUFFER [ rect-dim ] [ last-dim>> ] bi = not ]
+      [
+        [let | OLD-PIXELS [ FRAME-BUFFER pixels>>         ]
+               OLD-WIDTH  [ FRAME-BUFFER last-dim>> first ] |
+
+          FRAME-BUFFER init-frame-buffer-pixels
+
+          FRAME-BUFFER update-last-dim
+
+          [let | NEW-PIXELS [ FRAME-BUFFER pixels>>         ]
+                 NEW-WIDTH  [ FRAME-BUFFER last-dim>> first ] |
+
+            OLD-PIXELS OLD-WIDTH NEW-PIXELS NEW-WIDTH copy-pixels ] ]
+      ]
+    }
+    { [ t ] [ ] }
+  }
+  cond ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+M:: <frame-buffer> draw-gadget* ( FRAME-BUFFER -- )
+
+  FRAME-BUFFER rect-dim { 0 1 } v* first2 glRasterPos2i
+
+  FRAME-BUFFER draw-pixels
+
+  FRAME-BUFFER update-frame-buffer
+
+  glFlush
+
+  FRAME-BUFFER read-pixels ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
index d9db83b5e35df51e365e48683a87e4d33589d020..58efe2d8ce3c85d1a977b302f2f670e547e6f0d6 100644 (file)
@@ -1,11 +1,13 @@
 ! Copyright (C) 2008 Jose Antonio Ortega Ruiz.
 ! See http://factorcode.org/license.txt for BSD license.
 
-USING: accessors arrays classes classes.tuple compiler.units
-combinators continuations debugger definitions eval help
-io io.files io.streams.string kernel lexer listener listener.private
-make math namespaces parser prettyprint prettyprint.config
-quotations sequences strings source-files vectors vocabs.loader ;
+USING: accessors arrays assocs classes classes.tuple
+combinators compiler.units continuations debugger definitions
+eval help io io.files io.pathnames io.streams.string kernel
+lexer listener listener.private make math memoize namespaces
+parser prettyprint prettyprint.config quotations sequences sets
+sorting source-files strings tools.vocabs vectors vocabs
+vocabs.loader vocabs.parser ;
 
 IN: fuel
 
@@ -87,6 +89,14 @@ SYMBOL: :restarts
 M: condition fuel-pprint
     [ error>> ] [ fuel-restarts ] bi 2array condition prefix fuel-pprint ;
 
+M: lexer-error fuel-pprint
+    {
+        [ line>> ]
+        [ column>> ]
+        [ line-text>> ]
+        [ fuel-restarts ]
+    } cleave 4array lexer-error prefix fuel-pprint ;
+
 M: source-file-error fuel-pprint
     [ file>> ] [ error>> ] bi 2array source-file-error prefix
     fuel-pprint ;
@@ -102,7 +112,7 @@ M: source-file fuel-pprint path>> fuel-pprint ;
     error get
     fuel-eval-result get-global
     fuel-eval-output get-global
-    3array fuel-pprint ;
+    3array fuel-pprint flush nl "EOT:" write ;
 
 : fuel-forget-error ( -- ) f error set-global ; inline
 : fuel-forget-result ( -- ) f fuel-eval-result set-global ; inline
@@ -151,10 +161,37 @@ M: source-file fuel-pprint path>> fuel-pprint ;
 : fuel-end-eval ( -- ) [ ] (fuel-end-eval) ; inline
 
 : fuel-get-edit-location ( defspec -- )
-    where [ first2 [ (normalize-path) ] dip 2array fuel-eval-set-result ] when* ;
+    where [
+       first2 [ (normalize-path) ] dip 2array fuel-eval-set-result
+    ] when* ; inline
+
+: fuel-get-vocab-location ( vocab -- )
+    >vocab-link fuel-get-edit-location ; inline
+
+: (fuel-get-vocabs) ( -- seq )
+    all-vocabs-seq [ vocab-name ] map ; inline
+
+: fuel-get-vocabs ( -- )
+    (fuel-get-vocabs) fuel-eval-set-result ; inline
+
+MEMO: (fuel-vocab-words) ( name -- seq )
+    >vocab-link words [ name>> ] map ;
+
+: fuel-current-words ( -- seq )
+    use get [ keys ] map concat ; inline
+
+: fuel-vocabs-words ( names -- seq )
+    prune [ (fuel-vocab-words) ] map concat ; inline
+
+: (fuel-get-words) ( prefix names/f -- seq )
+    [ fuel-vocabs-words ] [ fuel-current-words ] if* natural-sort
+    swap [ drop-prefix nip length 0 = ] curry filter ;
+
+: fuel-get-words ( prefix names -- )
+    (fuel-get-words) fuel-eval-set-result ; inline
 
 : fuel-run-file ( path -- ) run-file ; inline
 
-: fuel-startup ( -- ) "listener" run ; inline
+: fuel-startup ( -- ) "listener" run-file ; inline
 
 MAIN: fuel-startup
diff --git a/extra/game-input/backend/authors.txt b/extra/game-input/backend/authors.txt
deleted file mode 100644 (file)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/game-input/backend/backend.factor b/extra/game-input/backend/backend.factor
deleted file mode 100644 (file)
index df61179..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-USING: eval multiline system combinators ;
-IN: game-input.backend
-
-STRING: set-backend-for-macosx
-USING: namespaces parser game-input.backend.iokit ;
-<< "game-input" (use+) >>
-iokit-game-input-backend game-input-backend set-global
-;
-
-STRING: set-backend-for-windows
-USING: namespaces parser game-input.backend.dinput ;
-<< "game-input" (use+) >>
-dinput-game-input-backend game-input-backend set-global
-;
-
-{
-    { [ os macosx? ] [ set-backend-for-macosx eval ] }
-    { [ os windows? ] [ set-backend-for-windows eval ] }
-    { [ t ] [ ] }
-} cond
-
diff --git a/extra/game-input/backend/dinput/authors.txt b/extra/game-input/backend/dinput/authors.txt
deleted file mode 100755 (executable)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/game-input/backend/dinput/dinput.factor b/extra/game-input/backend/dinput/dinput.factor
deleted file mode 100755 (executable)
index b66a722..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-USING: windows.dinput windows.dinput.constants parser symbols
-alien.c-types windows.ole32 namespaces assocs kernel arrays
-vectors windows.kernel32 windows.com windows.dinput shuffle
-windows.user32 windows.messages sequences combinators
-math.geometry.rect ui.windows accessors math windows alien
-alien.strings io.encodings.utf16 io.encodings.utf16n
-continuations byte-arrays locals
-game-input.backend.dinput.keys-array ;
-<< "game-input" (use+) >>
-IN: game-input.backend.dinput
-
-SINGLETON: dinput-game-input-backend
-
-SYMBOLS: +dinput+ +keyboard-device+ +keyboard-state+
-    +controller-devices+ +controller-guids+
-    +device-change-window+ +device-change-handle+ ;
-
-: create-dinput ( -- )
-    f GetModuleHandle DIRECTINPUT_VERSION IDirectInput8W-iid
-    f <void*> [ f DirectInput8Create ole32-error ] keep *void*
-    +dinput+ set-global ;
-
-: delete-dinput ( -- )
-    +dinput+ global [ com-release f ] change-at ;
-
-: device-for-guid ( guid -- device )
-    +dinput+ get swap f <void*>
-    [ f IDirectInput8W::CreateDevice ole32-error ] keep *void* ;
-
-: set-coop-level ( device -- )
-    +device-change-window+ get DISCL_BACKGROUND DISCL_NONEXCLUSIVE bitor
-    IDirectInputDevice8W::SetCooperativeLevel ole32-error ;
-
-: set-data-format ( device format-symbol -- )
-    get IDirectInputDevice8W::SetDataFormat ole32-error ;
-
-: configure-keyboard ( keyboard -- )
-    [ c_dfDIKeyboard_HID set-data-format ] [ set-coop-level ] bi ;
-: configure-controller ( controller -- )
-    [ c_dfDIJoystick2 set-data-format ] [ set-coop-level ] bi ;
-
-: find-keyboard ( -- )
-    GUID_SysKeyboard device-for-guid
-    [ configure-keyboard ]
-    [ +keyboard-device+ set-global ] bi
-    256 <byte-array> <keys-array> keyboard-state boa
-    +keyboard-state+ set-global ;
-
-: device-info ( device -- DIDEVICEIMAGEINFOW )
-    "DIDEVICEINSTANCEW" <c-object>
-    "DIDEVICEINSTANCEW" heap-size over set-DIDEVICEINSTANCEW-dwSize
-    [ IDirectInputDevice8W::GetDeviceInfo ole32-error ] keep ;
-: device-caps ( device -- DIDEVCAPS )
-    "DIDEVCAPS" <c-object>
-    "DIDEVCAPS" heap-size over set-DIDEVCAPS-dwSize
-    [ IDirectInputDevice8W::GetCapabilities ole32-error ] keep ;
-
-: <guid> ( memory -- byte-array )
-    "GUID" heap-size memory>byte-array ;
-
-: device-guid ( device -- guid )
-    device-info DIDEVICEINSTANCEW-guidInstance <guid> ;
-
-: device-attached? ( device -- ? )
-    +dinput+ get swap device-guid
-    IDirectInput8W::GetDeviceStatus S_OK = ;
-
-: find-device-axes-callback ( -- alien )
-    [ ! ( lpddoi pvRef -- BOOL )
-        +controller-devices+ get at
-        swap DIDEVICEOBJECTINSTANCEW-guidType <guid> {
-            { [ dup GUID_XAxis = ] [ drop 0.0 >>x ] }
-            { [ dup GUID_YAxis = ] [ drop 0.0 >>y ] }
-            { [ dup GUID_ZAxis = ] [ drop 0.0 >>z ] }
-            { [ dup GUID_RxAxis = ] [ drop 0.0 >>rx ] }
-            { [ dup GUID_RyAxis = ] [ drop 0.0 >>ry ] }
-            { [ dup GUID_RzAxis = ] [ drop 0.0 >>rz ] }
-            { [ dup GUID_Slider = ] [ drop 0.0 >>slider ] }
-            [ drop ]
-        } cond drop
-        DIENUM_CONTINUE
-    ] LPDIENUMDEVICEOBJECTSCALLBACKW ;
-
-: find-device-axes ( device controller-state -- controller-state )
-    swap [ +controller-devices+ get set-at ] 2keep
-    find-device-axes-callback over DIDFT_AXIS
-    IDirectInputDevice8W::EnumObjects ole32-error ;
-
-: controller-state-template ( device -- controller-state )
-    controller-state new
-    over device-caps
-    [ DIDEVCAPS-dwButtons f <array> >>buttons ]
-    [ DIDEVCAPS-dwPOVs zero? f pov-neutral ? >>pov ] bi
-    find-device-axes ;
-
-: device-known? ( guid -- ? )
-    +controller-guids+ get key? ; inline
-
-: (add-controller) ( guid -- )
-    device-for-guid {
-        [ configure-controller ]
-        [ controller-state-template ]
-        [ dup device-guid +controller-guids+ get set-at ]
-        [ +controller-devices+ get set-at ]
-    } cleave ;
-
-: add-controller ( guid -- )
-    dup <guid> device-known? [ drop ] [ (add-controller) ] if ;
-
-: remove-controller ( device -- )
-    [ +controller-devices+ get delete-at ]
-    [ device-guid +controller-guids+ get delete-at ]
-    [ com-release ] tri ;
-
-: find-controller-callback ( -- alien )
-    [ ! ( lpddi pvRef -- BOOL )
-        drop DIDEVICEINSTANCEW-guidInstance add-controller
-        DIENUM_CONTINUE
-    ] LPDIENUMDEVICESCALLBACKW ;
-
-: find-controllers ( -- )
-    +dinput+ get DI8DEVCLASS_GAMECTRL find-controller-callback
-    f DIEDFL_ATTACHEDONLY IDirectInput8W::EnumDevices ole32-error ;
-
-: set-up-controllers ( -- )
-    4 <vector> +controller-devices+ set-global
-    4 <vector> +controller-guids+ set-global
-    find-controllers ;
-
-: find-and-remove-detached-devices ( -- )
-    +controller-devices+ get keys
-    [ device-attached? not ] filter
-    [ remove-controller ] each ;
-
-: device-interface? ( dbt-broadcast-hdr -- ? )
-    DEV_BROADCAST_HDR-dbch_devicetype DBT_DEVTYP_DEVICEINTERFACE = ;
-
-: device-arrived ( dbt-broadcast-hdr -- )
-    device-interface? [ find-controllers ] when ;
-
-: device-removed ( dbt-broadcast-hdr -- )
-    device-interface? [ find-and-remove-detached-devices ] when ;
-
-: handle-wm-devicechange ( hWnd uMsg wParam lParam -- )
-    [ 2drop ] 2dip swap {
-        { [ dup DBT_DEVICEARRIVAL = ]         [ drop <alien> device-arrived ] }
-        { [ dup DBT_DEVICEREMOVECOMPLETE = ]  [ drop <alien> device-removed ] }
-        [ 2drop ]
-    } cond ;
-
-TUPLE: window-rect < rect window-loc ;
-: <zero-window-rect> ( -- window-rect )
-    window-rect new
-    { 0 0 } >>window-loc
-    { 0 0 } >>loc
-    { 0 0 } >>dim ;
-
-: (device-notification-filter) ( -- DEV_BROADCAST_DEVICEW )
-    "DEV_BROADCAST_DEVICEW" <c-object>
-    "DEV_BROADCAST_DEVICEW" heap-size over set-DEV_BROADCAST_DEVICEW-dbcc_size
-    DBT_DEVTYP_DEVICEINTERFACE over set-DEV_BROADCAST_DEVICEW-dbcc_devicetype ;
-
-: create-device-change-window ( -- )
-    <zero-window-rect> create-window
-    [
-        (device-notification-filter)
-        DEVICE_NOTIFY_WINDOW_HANDLE DEVICE_NOTIFY_ALL_INTERFACE_CLASSES bitor
-        RegisterDeviceNotification
-        +device-change-handle+ set-global
-    ]
-    [ +device-change-window+ set-global ] bi ;
-
-: close-device-change-window ( -- )
-    +device-change-handle+ global
-    [ UnregisterDeviceNotification drop f ] change-at
-    +device-change-window+ global
-    [ DestroyWindow win32-error=0/f f ] change-at ;
-
-: add-wm-devicechange ( -- )
-    [ 4dup handle-wm-devicechange DefWindowProc ]
-    WM_DEVICECHANGE add-wm-handler ;
-
-: remove-wm-devicechange ( -- )
-    WM_DEVICECHANGE wm-handlers get-global delete-at ;
-
-: release-controllers ( -- )
-    +controller-devices+ global [
-        [ drop com-release ] assoc-each f
-    ] change-at
-    f +controller-guids+ set-global ;
-
-: release-keyboard ( -- )
-    +keyboard-device+ global
-    [ com-release f ] change-at
-    f +keyboard-state+ set-global ;
-
-M: dinput-game-input-backend (open-game-input)
-    create-dinput
-    create-device-change-window
-    find-keyboard
-    set-up-controllers
-    add-wm-devicechange ;
-
-M: dinput-game-input-backend (close-game-input)
-    remove-wm-devicechange
-    release-controllers
-    release-keyboard
-    close-device-change-window
-    delete-dinput ;
-
-M: dinput-game-input-backend (reset-game-input)
-    {
-        +dinput+ +keyboard-device+ +keyboard-state+
-        +controller-devices+ +controller-guids+
-        +device-change-window+ +device-change-handle+
-    } [ f swap set-global ] each ;
-
-M: dinput-game-input-backend get-controllers
-    +controller-devices+ get
-    [ drop controller boa ] { } assoc>map ;
-
-M: dinput-game-input-backend product-string
-    handle>> device-info DIDEVICEINSTANCEW-tszProductName
-    utf16n alien>string ;
-
-M: dinput-game-input-backend product-id
-    handle>> device-info DIDEVICEINSTANCEW-guidProduct <guid> ;
-M: dinput-game-input-backend instance-id
-    handle>> device-guid ;
-
-:: with-acquisition ( device acquired-quot succeeded-quot failed-quot -- result/f )
-    device IDirectInputDevice8W::Acquire succeeded? [
-        device acquired-quot call
-        succeeded-quot call
-    ] failed-quot if ; inline
-
-: pov-values
-    {
-        pov-up pov-up-right pov-right pov-down-right
-        pov-down pov-down-left pov-left pov-up-left
-    } ; inline
-
-: >axis ( long -- float )
-    32767 - 32767.0 /f ;
-: >slider ( long -- float )
-    65535.0 /f ;
-: >pov ( long -- symbol )
-    dup HEX: FFFF bitand HEX: FFFF =
-    [ drop pov-neutral ]
-    [ 2750 + 4500 /i pov-values nth ] if ;
-: >buttons ( alien length -- array )
-    memory>byte-array <keys-array> ;
-
-: (fill-if) ( controller-state DIJOYSTATE2 ? quot -- )
-    [ drop ] compose [ 2drop ] if ; inline
-
-: fill-controller-state ( controller-state DIJOYSTATE2 -- controller-state )
-    {
-        [ over x>> [ DIJOYSTATE2-lX >axis >>x ] (fill-if) ]
-        [ over y>> [ DIJOYSTATE2-lY >axis >>y ] (fill-if) ]
-        [ over z>> [ DIJOYSTATE2-lZ >axis >>z ] (fill-if) ]
-        [ over rx>> [ DIJOYSTATE2-lRx >axis >>rx ] (fill-if) ]
-        [ over ry>> [ DIJOYSTATE2-lRy >axis >>ry ] (fill-if) ]
-        [ over rz>> [ DIJOYSTATE2-lRz >axis >>rz ] (fill-if) ]
-        [ over slider>> [ DIJOYSTATE2-rglSlider *long >slider >>slider ] (fill-if) ]
-        [ over pov>> [ DIJOYSTATE2-rgdwPOV *uint >pov >>pov ] (fill-if) ]
-        [ DIJOYSTATE2-rgbButtons over buttons>> length >buttons >>buttons ]
-    } 2cleave ;
-
-: get-device-state ( device byte-array -- )
-    [ dup IDirectInputDevice8W::Poll ole32-error ] dip
-    [ length ] keep
-    IDirectInputDevice8W::GetDeviceState ole32-error ;
-
-: (read-controller) ( handle template -- state )
-    swap [ "DIJOYSTATE2" heap-size <byte-array> [ get-device-state ] keep ]
-    [ fill-controller-state ] [ drop f ] with-acquisition ;
-
-M: dinput-game-input-backend read-controller
-    handle>> dup +controller-devices+ get at
-    [ (read-controller) ] [ drop f ] if* ;
-
-M: dinput-game-input-backend calibrate-controller
-    handle>> f 0 IDirectInputDevice8W::RunControlPanel ole32-error ;
-
-M: dinput-game-input-backend read-keyboard
-    +keyboard-device+ get
-    [ +keyboard-state+ get [ keys>> underlying>> get-device-state ] keep ]
-    [ ] [ f ] with-acquisition ;
diff --git a/extra/game-input/backend/dinput/keys-array/keys-array.factor b/extra/game-input/backend/dinput/keys-array/keys-array.factor
deleted file mode 100755 (executable)
index b2dbe9a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-USING: sequences sequences.private math alien.c-types
-accessors ;
-IN: game-input.backend.dinput.keys-array
-
-TUPLE: keys-array underlying ;
-C: <keys-array> keys-array
-
-: >key ( byte -- ? )
-    HEX: 80 bitand c-bool> ;
-
-M: keys-array length underlying>> length ;
-M: keys-array nth-unsafe underlying>> nth-unsafe >key ;
-
-INSTANCE: keys-array sequence
-
diff --git a/extra/game-input/backend/dinput/summary.txt b/extra/game-input/backend/dinput/summary.txt
deleted file mode 100755 (executable)
index f758a5f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-DirectInput backend for game-input
diff --git a/extra/game-input/backend/dinput/tags.txt b/extra/game-input/backend/dinput/tags.txt
deleted file mode 100755 (executable)
index 82506ff..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-unportable
-games
diff --git a/extra/game-input/backend/iokit/authors.txt b/extra/game-input/backend/iokit/authors.txt
deleted file mode 100644 (file)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/game-input/backend/iokit/iokit.factor b/extra/game-input/backend/iokit/iokit.factor
deleted file mode 100755 (executable)
index 5267dd6..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-USING: cocoa cocoa.plists core-foundation iokit iokit.hid
-kernel cocoa.enumeration destructors math.parser cocoa.application 
-sequences locals combinators.short-circuit threads
-symbols namespaces assocs vectors arrays combinators
-core-foundation.run-loop accessors sequences.private
-alien.c-types math parser ;
-<< "game-input" (use+) >>
-IN: game-input.backend.iokit
-
-SINGLETON: iokit-game-input-backend
-
-: hid-manager-matching ( matching-seq -- alien )
-    f 0 IOHIDManagerCreate
-    [ swap >plist IOHIDManagerSetDeviceMatchingMultiple ]
-    keep ;
-
-: devices-from-hid-manager ( manager -- vector )
-    [
-        IOHIDManagerCopyDevices
-        [ &CFRelease NSFastEnumeration>vector ] [ f ] if*
-    ] with-destructors ;
-
-: game-devices-matching-seq
-    {
-        H{ { "DeviceUsage" 4 } { "DeviceUsagePage" 1 } } ! joysticks
-        H{ { "DeviceUsage" 5 } { "DeviceUsagePage" 1 } } ! gamepads
-        H{ { "DeviceUsage" 6 } { "DeviceUsagePage" 1 } } ! keyboards
-    } ; inline
-
-: buttons-matching-hash
-    H{ { "UsagePage" 9 } { "Type" 2 } } ; inline
-: keys-matching-hash
-    H{ { "UsagePage" 7 } { "Type" 2 } } ; inline
-: x-axis-matching-hash
-    H{ { "UsagePage" 1 } { "Usage" HEX: 30 } { "Type" 1 } } ; inline
-: y-axis-matching-hash
-    H{ { "UsagePage" 1 } { "Usage" HEX: 31 } { "Type" 1 } } ; inline
-: z-axis-matching-hash
-    H{ { "UsagePage" 1 } { "Usage" HEX: 32 } { "Type" 1 } } ; inline
-: rx-axis-matching-hash
-    H{ { "UsagePage" 1 } { "Usage" HEX: 33 } { "Type" 1 } } ; inline
-: ry-axis-matching-hash
-    H{ { "UsagePage" 1 } { "Usage" HEX: 34 } { "Type" 1 } } ; inline
-: rz-axis-matching-hash
-    H{ { "UsagePage" 1 } { "Usage" HEX: 35 } { "Type" 1 } } ; inline
-: slider-matching-hash
-    H{ { "UsagePage" 1 } { "Usage" HEX: 36 } { "Type" 1 } } ; inline
-: hat-switch-matching-hash
-    H{ { "UsagePage" 1 } { "Usage" HEX: 39 } { "Type" 1 } } ; inline
-
-: device-elements-matching ( device matching-hash -- vector )
-    [
-        >plist 0 IOHIDDeviceCopyMatchingElements
-        [ &CFRelease NSFastEnumeration>vector ] [ f ] if*
-    ] with-destructors ;
-
-: button-count ( device -- button-count )
-    buttons-matching-hash device-elements-matching length ;
-
-: ?axis ( device hash -- axis/f )
-    device-elements-matching [ f ] [ first ] if-empty ;
-
-: ?x-axis ( device -- ? )
-    x-axis-matching-hash ?axis ;
-: ?y-axis ( device -- ? )
-    y-axis-matching-hash ?axis ;
-: ?z-axis ( device -- ? )
-    z-axis-matching-hash ?axis ;
-: ?rx-axis ( device -- ? )
-    rx-axis-matching-hash ?axis ;
-: ?ry-axis ( device -- ? )
-    ry-axis-matching-hash ?axis ;
-: ?rz-axis ( device -- ? )
-    rz-axis-matching-hash ?axis ;
-: ?slider ( device -- ? )
-    slider-matching-hash ?axis ;
-: ?hat-switch ( device -- ? )
-    hat-switch-matching-hash ?axis ;
-
-: hid-manager-matching-game-devices ( -- alien )
-    game-devices-matching-seq hid-manager-matching ;
-
-: device-property ( device key -- value )
-    <NSString> IOHIDDeviceGetProperty plist> ;
-: element-property ( element key -- value )
-    <NSString> IOHIDElementGetProperty plist> ;
-: set-element-property ( element key value -- )
-    [ <NSString> ] [ >plist ] bi* IOHIDElementSetProperty drop ;
-: transfer-element-property ( element from-key to-key -- )
-    [ dupd element-property ] dip swap set-element-property ;
-
-: controller-device? ( device -- ? )
-    {
-        [ 1 4 IOHIDDeviceConformsTo ]
-        [ 1 5 IOHIDDeviceConformsTo ]
-    } 1|| ;
-
-: element-usage ( element -- {usage-page,usage} )
-    [ IOHIDElementGetUsagePage ] [ IOHIDElementGetUsage ] bi
-    2array ;
-
-: button? ( {usage-page,usage} -- ? )
-    first 9 = ; inline
-: keyboard-key? ( {usage-page,usage} -- ? )
-    first 7 = ; inline
-: x-axis? ( {usage-page,usage} -- ? )
-    { 1 HEX: 30 } = ; inline
-: y-axis? ( {usage-page,usage} -- ? )
-    { 1 HEX: 31 } = ; inline
-: z-axis? ( {usage-page,usage} -- ? )
-    { 1 HEX: 32 } = ; inline
-: rx-axis? ( {usage-page,usage} -- ? )
-    { 1 HEX: 33 } = ; inline
-: ry-axis? ( {usage-page,usage} -- ? )
-    { 1 HEX: 34 } = ; inline
-: rz-axis? ( {usage-page,usage} -- ? )
-    { 1 HEX: 35 } = ; inline
-: slider? ( {usage-page,usage} -- ? )
-    { 1 HEX: 36 } = ; inline
-: hat-switch? ( {usage-page,usage} -- ? )
-    { 1 HEX: 39 } = ; inline
-
-: pov-values
-    {
-        pov-up pov-up-right pov-right pov-down-right
-        pov-down pov-down-left pov-left pov-up-left
-        pov-neutral
-    } ; inline
-
-: button-value ( value -- f/(0,1] )
-    IOHIDValueGetIntegerValue dup zero? [ drop f ] when ;
-: axis-value ( value -- [-1,1] )
-    kIOHIDValueScaleTypeCalibrated IOHIDValueGetScaledValue ;
-: pov-value ( value -- pov-direction )
-    IOHIDValueGetIntegerValue pov-values ?nth [ pov-neutral ] unless* ;
-
-: record-controller ( controller-state value -- )
-    dup IOHIDValueGetElement element-usage {
-        { [ dup button? ] [ [ button-value ] [ second 1- ] bi* rot buttons>> set-nth ] } 
-        { [ dup x-axis? ] [ drop axis-value >>x drop ] }
-        { [ dup y-axis? ] [ drop axis-value >>y drop ] }
-        { [ dup z-axis? ] [ drop axis-value >>z drop ] }
-        { [ dup rx-axis? ] [ drop axis-value >>rx drop ] }
-        { [ dup ry-axis? ] [ drop axis-value >>ry drop ] }
-        { [ dup rz-axis? ] [ drop axis-value >>rz drop ] }
-        { [ dup slider? ] [ drop axis-value >>slider drop ] }
-        { [ dup hat-switch? ] [ drop pov-value >>pov drop ] }
-        [ 3drop ]
-    } cond ;
-
-SYMBOLS: +hid-manager+ +keyboard-state+ +controller-states+ ;
-
-: ?set-nth ( value nth seq -- )
-    2dup bounds-check? [ set-nth-unsafe ] [ 3drop ] if ;
-
-: record-keyboard ( value -- )
-    dup IOHIDValueGetElement element-usage keyboard-key? [
-        [ IOHIDValueGetIntegerValue c-bool> ]
-        [ IOHIDValueGetElement IOHIDElementGetUsage ] bi
-        +keyboard-state+ get ?set-nth
-    ] [ drop ] if ;
-
-: default-calibrate-saturation ( element -- )
-    [ kIOHIDElementMinKey kIOHIDElementCalibrationSaturationMinKey transfer-element-property ]
-    [ kIOHIDElementMaxKey kIOHIDElementCalibrationSaturationMaxKey transfer-element-property ]
-    bi ;
-
-: default-calibrate-axis ( element -- )
-    [ kIOHIDElementCalibrationMinKey -1.0 set-element-property ]
-    [ kIOHIDElementCalibrationMaxKey 1.0 set-element-property ]
-    [ default-calibrate-saturation ]
-    tri ;
-
-: default-calibrate-slider ( element -- )
-    [ kIOHIDElementCalibrationMinKey 0.0 set-element-property ]
-    [ kIOHIDElementCalibrationMaxKey 1.0 set-element-property ]
-    [ default-calibrate-saturation ]
-    tri ;
-
-: (default) ( ? quot -- )
-    [ f ] if* ; inline
-
-: <device-controller-state> ( device -- controller-state )
-    {
-        [ ?x-axis [ default-calibrate-axis 0.0 ] (default) ]
-        [ ?y-axis [ default-calibrate-axis 0.0 ] (default) ]
-        [ ?z-axis [ default-calibrate-axis 0.0 ] (default) ]
-        [ ?rx-axis [ default-calibrate-axis 0.0 ] (default) ]
-        [ ?ry-axis [ default-calibrate-axis 0.0 ] (default) ]
-        [ ?rz-axis [ default-calibrate-axis 0.0 ] (default) ]
-        [ ?slider [ default-calibrate-slider 0.0 ] (default) ]
-        [ ?hat-switch pov-neutral and ]
-        [ button-count f <array> ]
-    } cleave controller-state boa ;
-
-: device-matched-callback ( -- alien )
-    [| context result sender device |
-        device controller-device? [
-            device <device-controller-state>
-            device +controller-states+ get set-at
-        ] when
-    ] IOHIDDeviceCallback ;
-
-: device-removed-callback ( -- alien )
-    [| context result sender device |
-        device +controller-states+ get delete-at
-    ] IOHIDDeviceCallback ;
-
-: device-input-callback ( -- alien )
-    [| context result sender value |
-        sender controller-device?
-        [ sender +controller-states+ get at value record-controller ]
-        [ value record-keyboard ]
-        if
-    ] IOHIDValueCallback ;
-
-: initialize-variables ( manager -- )
-    +hid-manager+ set-global
-    4 <vector> +controller-states+ set-global
-    256 f <array> +keyboard-state+ set-global ;
-
-M: iokit-game-input-backend (open-game-input)
-    hid-manager-matching-game-devices {
-        [ initialize-variables ]
-        [ device-matched-callback f IOHIDManagerRegisterDeviceMatchingCallback ]
-        [ device-removed-callback f IOHIDManagerRegisterDeviceRemovalCallback ]
-        [ device-input-callback f IOHIDManagerRegisterInputValueCallback ]
-        [ 0 IOHIDManagerOpen mach-error ]
-        [
-            CFRunLoopGetMain CFRunLoopDefaultMode
-            IOHIDManagerScheduleWithRunLoop
-        ]
-    } cleave ;
-
-M: iokit-game-input-backend (reset-game-input)
-    { +hid-manager+ +keyboard-state+ +controller-states+ }
-    [ f swap set-global ] each ;
-
-M: iokit-game-input-backend (close-game-input)
-    +hid-manager+ get-global [
-        +hid-manager+ global [ 
-            [
-                CFRunLoopGetMain CFRunLoopDefaultMode
-                IOHIDManagerUnscheduleFromRunLoop
-            ]
-            [ 0 IOHIDManagerClose drop ]
-            [ CFRelease ] tri
-            f
-        ] change-at
-        f +keyboard-state+ set-global
-        f +controller-states+ set-global
-    ] when ;
-
-M: iokit-game-input-backend get-controllers ( -- sequence )
-    +controller-states+ get keys [ controller boa ] map ;
-
-: ?join ( pre post sep -- string )
-    2over start [ swap 2nip ] [ [ 2array ] dip join ] if ;
-
-M: iokit-game-input-backend product-string ( controller -- string )
-    handle>>
-    [ kIOHIDManufacturerKey device-property ]
-    [ kIOHIDProductKey      device-property ] bi " " ?join ;
-M: iokit-game-input-backend product-id ( controller -- integer )
-    handle>>
-    [ kIOHIDVendorIDKey  device-property ]
-    [ kIOHIDProductIDKey device-property ] bi 2array ;
-M: iokit-game-input-backend instance-id ( controller -- integer )
-    handle>> kIOHIDLocationIDKey device-property ;
-
-M: iokit-game-input-backend read-controller ( controller -- controller-state )
-    handle>> +controller-states+ get at clone ;
-
-M: iokit-game-input-backend read-keyboard ( -- keyboard-state )
-    +keyboard-state+ get clone keyboard-state boa ;
-
-M: iokit-game-input-backend calibrate-controller ( controller -- )
-    drop ;
diff --git a/extra/game-input/backend/iokit/summary.txt b/extra/game-input/backend/iokit/summary.txt
deleted file mode 100644 (file)
index 8fc5d82..0000000
+++ /dev/null
@@ -1 +0,0 @@
-IOKit HID Manager backend for game-input
diff --git a/extra/game-input/backend/iokit/tags.txt b/extra/game-input/backend/iokit/tags.txt
deleted file mode 100755 (executable)
index 82506ff..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-unportable
-games
diff --git a/extra/game-input/backend/summary.txt b/extra/game-input/backend/summary.txt
deleted file mode 100644 (file)
index 6a77f8e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Platform-specific backends for game-input
diff --git a/extra/game-input/backend/tags.txt b/extra/game-input/backend/tags.txt
deleted file mode 100755 (executable)
index 84d4140..0000000
+++ /dev/null
@@ -1 +0,0 @@
-games
diff --git a/extra/game-input/dinput/authors.txt b/extra/game-input/dinput/authors.txt
new file mode 100755 (executable)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/extra/game-input/dinput/dinput.factor b/extra/game-input/dinput/dinput.factor
new file mode 100755 (executable)
index 0000000..328e4ff
--- /dev/null
@@ -0,0 +1,290 @@
+USING: windows.dinput windows.dinput.constants parser
+alien.c-types windows.ole32 namespaces assocs kernel arrays
+vectors windows.kernel32 windows.com windows.dinput shuffle
+windows.user32 windows.messages sequences combinators locals
+math.geometry.rect ui.windows accessors math windows alien
+alien.strings io.encodings.utf16 io.encodings.utf16n
+continuations byte-arrays game-input.dinput.keys-array
+game-input ;
+IN: game-input.dinput
+
+SINGLETON: dinput-game-input-backend
+
+dinput-game-input-backend game-input-backend set-global
+
+SYMBOLS: +dinput+ +keyboard-device+ +keyboard-state+
+    +controller-devices+ +controller-guids+
+    +device-change-window+ +device-change-handle+ ;
+
+: create-dinput ( -- )
+    f GetModuleHandle DIRECTINPUT_VERSION IDirectInput8W-iid
+    f <void*> [ f DirectInput8Create ole32-error ] keep *void*
+    +dinput+ set-global ;
+
+: delete-dinput ( -- )
+    +dinput+ global [ com-release f ] change-at ;
+
+: device-for-guid ( guid -- device )
+    +dinput+ get swap f <void*>
+    [ f IDirectInput8W::CreateDevice ole32-error ] keep *void* ;
+
+: set-coop-level ( device -- )
+    +device-change-window+ get DISCL_BACKGROUND DISCL_NONEXCLUSIVE bitor
+    IDirectInputDevice8W::SetCooperativeLevel ole32-error ;
+
+: set-data-format ( device format-symbol -- )
+    get IDirectInputDevice8W::SetDataFormat ole32-error ;
+
+: configure-keyboard ( keyboard -- )
+    [ c_dfDIKeyboard_HID set-data-format ] [ set-coop-level ] bi ;
+: configure-controller ( controller -- )
+    [ c_dfDIJoystick2 set-data-format ] [ set-coop-level ] bi ;
+
+: find-keyboard ( -- )
+    GUID_SysKeyboard device-for-guid
+    [ configure-keyboard ]
+    [ +keyboard-device+ set-global ] bi
+    256 <byte-array> <keys-array> keyboard-state boa
+    +keyboard-state+ set-global ;
+
+: device-info ( device -- DIDEVICEIMAGEINFOW )
+    "DIDEVICEINSTANCEW" <c-object>
+    "DIDEVICEINSTANCEW" heap-size over set-DIDEVICEINSTANCEW-dwSize
+    [ IDirectInputDevice8W::GetDeviceInfo ole32-error ] keep ;
+: device-caps ( device -- DIDEVCAPS )
+    "DIDEVCAPS" <c-object>
+    "DIDEVCAPS" heap-size over set-DIDEVCAPS-dwSize
+    [ IDirectInputDevice8W::GetCapabilities ole32-error ] keep ;
+
+: <guid> ( memory -- byte-array )
+    "GUID" heap-size memory>byte-array ;
+
+: device-guid ( device -- guid )
+    device-info DIDEVICEINSTANCEW-guidInstance <guid> ;
+
+: device-attached? ( device -- ? )
+    +dinput+ get swap device-guid
+    IDirectInput8W::GetDeviceStatus S_OK = ;
+
+: find-device-axes-callback ( -- alien )
+    [ ! ( lpddoi pvRef -- BOOL )
+        +controller-devices+ get at
+        swap DIDEVICEOBJECTINSTANCEW-guidType <guid> {
+            { [ dup GUID_XAxis = ] [ drop 0.0 >>x ] }
+            { [ dup GUID_YAxis = ] [ drop 0.0 >>y ] }
+            { [ dup GUID_ZAxis = ] [ drop 0.0 >>z ] }
+            { [ dup GUID_RxAxis = ] [ drop 0.0 >>rx ] }
+            { [ dup GUID_RyAxis = ] [ drop 0.0 >>ry ] }
+            { [ dup GUID_RzAxis = ] [ drop 0.0 >>rz ] }
+            { [ dup GUID_Slider = ] [ drop 0.0 >>slider ] }
+            [ drop ]
+        } cond drop
+        DIENUM_CONTINUE
+    ] LPDIENUMDEVICEOBJECTSCALLBACKW ;
+
+: find-device-axes ( device controller-state -- controller-state )
+    swap [ +controller-devices+ get set-at ] 2keep
+    find-device-axes-callback over DIDFT_AXIS
+    IDirectInputDevice8W::EnumObjects ole32-error ;
+
+: controller-state-template ( device -- controller-state )
+    controller-state new
+    over device-caps
+    [ DIDEVCAPS-dwButtons f <array> >>buttons ]
+    [ DIDEVCAPS-dwPOVs zero? f pov-neutral ? >>pov ] bi
+    find-device-axes ;
+
+: device-known? ( guid -- ? )
+    +controller-guids+ get key? ; inline
+
+: (add-controller) ( guid -- )
+    device-for-guid {
+        [ configure-controller ]
+        [ controller-state-template ]
+        [ dup device-guid +controller-guids+ get set-at ]
+        [ +controller-devices+ get set-at ]
+    } cleave ;
+
+: add-controller ( guid -- )
+    dup <guid> device-known? [ drop ] [ (add-controller) ] if ;
+
+: remove-controller ( device -- )
+    [ +controller-devices+ get delete-at ]
+    [ device-guid +controller-guids+ get delete-at ]
+    [ com-release ] tri ;
+
+: find-controller-callback ( -- alien )
+    [ ! ( lpddi pvRef -- BOOL )
+        drop DIDEVICEINSTANCEW-guidInstance add-controller
+        DIENUM_CONTINUE
+    ] LPDIENUMDEVICESCALLBACKW ;
+
+: find-controllers ( -- )
+    +dinput+ get DI8DEVCLASS_GAMECTRL find-controller-callback
+    f DIEDFL_ATTACHEDONLY IDirectInput8W::EnumDevices ole32-error ;
+
+: set-up-controllers ( -- )
+    4 <vector> +controller-devices+ set-global
+    4 <vector> +controller-guids+ set-global
+    find-controllers ;
+
+: find-and-remove-detached-devices ( -- )
+    +controller-devices+ get keys
+    [ device-attached? not ] filter
+    [ remove-controller ] each ;
+
+: device-interface? ( dbt-broadcast-hdr -- ? )
+    DEV_BROADCAST_HDR-dbch_devicetype DBT_DEVTYP_DEVICEINTERFACE = ;
+
+: device-arrived ( dbt-broadcast-hdr -- )
+    device-interface? [ find-controllers ] when ;
+
+: device-removed ( dbt-broadcast-hdr -- )
+    device-interface? [ find-and-remove-detached-devices ] when ;
+
+: handle-wm-devicechange ( hWnd uMsg wParam lParam -- )
+    [ 2drop ] 2dip swap {
+        { [ dup DBT_DEVICEARRIVAL = ]         [ drop <alien> device-arrived ] }
+        { [ dup DBT_DEVICEREMOVECOMPLETE = ]  [ drop <alien> device-removed ] }
+        [ 2drop ]
+    } cond ;
+
+TUPLE: window-rect < rect window-loc ;
+: <zero-window-rect> ( -- window-rect )
+    window-rect new
+    { 0 0 } >>window-loc
+    { 0 0 } >>loc
+    { 0 0 } >>dim ;
+
+: (device-notification-filter) ( -- DEV_BROADCAST_DEVICEW )
+    "DEV_BROADCAST_DEVICEW" <c-object>
+    "DEV_BROADCAST_DEVICEW" heap-size over set-DEV_BROADCAST_DEVICEW-dbcc_size
+    DBT_DEVTYP_DEVICEINTERFACE over set-DEV_BROADCAST_DEVICEW-dbcc_devicetype ;
+
+: create-device-change-window ( -- )
+    <zero-window-rect> create-window
+    [
+        (device-notification-filter)
+        DEVICE_NOTIFY_WINDOW_HANDLE DEVICE_NOTIFY_ALL_INTERFACE_CLASSES bitor
+        RegisterDeviceNotification
+        +device-change-handle+ set-global
+    ]
+    [ +device-change-window+ set-global ] bi ;
+
+: close-device-change-window ( -- )
+    +device-change-handle+ global
+    [ UnregisterDeviceNotification drop f ] change-at
+    +device-change-window+ global
+    [ DestroyWindow win32-error=0/f f ] change-at ;
+
+: add-wm-devicechange ( -- )
+    [ 4dup handle-wm-devicechange DefWindowProc ]
+    WM_DEVICECHANGE add-wm-handler ;
+
+: remove-wm-devicechange ( -- )
+    WM_DEVICECHANGE wm-handlers get-global delete-at ;
+
+: release-controllers ( -- )
+    +controller-devices+ global [
+        [ drop com-release ] assoc-each f
+    ] change-at
+    f +controller-guids+ set-global ;
+
+: release-keyboard ( -- )
+    +keyboard-device+ global
+    [ com-release f ] change-at
+    f +keyboard-state+ set-global ;
+
+M: dinput-game-input-backend (open-game-input)
+    create-dinput
+    create-device-change-window
+    find-keyboard
+    set-up-controllers
+    add-wm-devicechange ;
+
+M: dinput-game-input-backend (close-game-input)
+    remove-wm-devicechange
+    release-controllers
+    release-keyboard
+    close-device-change-window
+    delete-dinput ;
+
+M: dinput-game-input-backend (reset-game-input)
+    {
+        +dinput+ +keyboard-device+ +keyboard-state+
+        +controller-devices+ +controller-guids+
+        +device-change-window+ +device-change-handle+
+    } [ f swap set-global ] each ;
+
+M: dinput-game-input-backend get-controllers
+    +controller-devices+ get
+    [ drop controller boa ] { } assoc>map ;
+
+M: dinput-game-input-backend product-string
+    handle>> device-info DIDEVICEINSTANCEW-tszProductName
+    utf16n alien>string ;
+
+M: dinput-game-input-backend product-id
+    handle>> device-info DIDEVICEINSTANCEW-guidProduct <guid> ;
+M: dinput-game-input-backend instance-id
+    handle>> device-guid ;
+
+:: with-acquisition ( device acquired-quot succeeded-quot failed-quot -- result/f )
+    device IDirectInputDevice8W::Acquire succeeded? [
+        device acquired-quot call
+        succeeded-quot call
+    ] failed-quot if ; inline
+
+: pov-values
+    {
+        pov-up pov-up-right pov-right pov-down-right
+        pov-down pov-down-left pov-left pov-up-left
+    } ; inline
+
+: >axis ( long -- float )
+    32767 - 32767.0 /f ;
+: >slider ( long -- float )
+    65535.0 /f ;
+: >pov ( long -- symbol )
+    dup HEX: FFFF bitand HEX: FFFF =
+    [ drop pov-neutral ]
+    [ 2750 + 4500 /i pov-values nth ] if ;
+: >buttons ( alien length -- array )
+    memory>byte-array <keys-array> ;
+
+: (fill-if) ( controller-state DIJOYSTATE2 ? quot -- )
+    [ drop ] compose [ 2drop ] if ; inline
+
+: fill-controller-state ( controller-state DIJOYSTATE2 -- controller-state )
+    {
+        [ over x>> [ DIJOYSTATE2-lX >axis >>x ] (fill-if) ]
+        [ over y>> [ DIJOYSTATE2-lY >axis >>y ] (fill-if) ]
+        [ over z>> [ DIJOYSTATE2-lZ >axis >>z ] (fill-if) ]
+        [ over rx>> [ DIJOYSTATE2-lRx >axis >>rx ] (fill-if) ]
+        [ over ry>> [ DIJOYSTATE2-lRy >axis >>ry ] (fill-if) ]
+        [ over rz>> [ DIJOYSTATE2-lRz >axis >>rz ] (fill-if) ]
+        [ over slider>> [ DIJOYSTATE2-rglSlider *long >slider >>slider ] (fill-if) ]
+        [ over pov>> [ DIJOYSTATE2-rgdwPOV *uint >pov >>pov ] (fill-if) ]
+        [ DIJOYSTATE2-rgbButtons over buttons>> length >buttons >>buttons ]
+    } 2cleave ;
+
+: get-device-state ( device byte-array -- )
+    [ dup IDirectInputDevice8W::Poll ole32-error ] dip
+    [ length ] keep
+    IDirectInputDevice8W::GetDeviceState ole32-error ;
+
+: (read-controller) ( handle template -- state )
+    swap [ "DIJOYSTATE2" heap-size <byte-array> [ get-device-state ] keep ]
+    [ fill-controller-state ] [ drop f ] with-acquisition ;
+
+M: dinput-game-input-backend read-controller
+    handle>> dup +controller-devices+ get at
+    [ (read-controller) ] [ drop f ] if* ;
+
+M: dinput-game-input-backend calibrate-controller
+    handle>> f 0 IDirectInputDevice8W::RunControlPanel ole32-error ;
+
+M: dinput-game-input-backend read-keyboard
+    +keyboard-device+ get
+    [ +keyboard-state+ get [ keys>> underlying>> get-device-state ] keep ]
+    [ ] [ f ] with-acquisition ;
diff --git a/extra/game-input/dinput/keys-array/keys-array.factor b/extra/game-input/dinput/keys-array/keys-array.factor
new file mode 100755 (executable)
index 0000000..12ad072
--- /dev/null
@@ -0,0 +1,15 @@
+USING: sequences sequences.private math alien.c-types
+accessors ;
+IN: game-input.dinput.keys-array
+
+TUPLE: keys-array underlying ;
+C: <keys-array> keys-array
+
+: >key ( byte -- ? )
+    HEX: 80 bitand c-bool> ;
+
+M: keys-array length underlying>> length ;
+M: keys-array nth-unsafe underlying>> nth-unsafe >key ;
+
+INSTANCE: keys-array sequence
+
diff --git a/extra/game-input/dinput/summary.txt b/extra/game-input/dinput/summary.txt
new file mode 100755 (executable)
index 0000000..f758a5f
--- /dev/null
@@ -0,0 +1 @@
+DirectInput backend for game-input
diff --git a/extra/game-input/dinput/tags.txt b/extra/game-input/dinput/tags.txt
new file mode 100755 (executable)
index 0000000..82506ff
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+games
index 18ec04df1f4474c6625d976bf36a24435c8df859..46e3ba9e8dafc0522a33b528cc4bea5db32e7f64 100755 (executable)
@@ -1,5 +1,5 @@
-USING: arrays accessors continuations kernel symbols
-combinators.lib sequences namespaces init vocabs ;
+USING: arrays accessors continuations kernel system
+sequences namespaces init vocabs vocabs.loader combinators ;
 IN: game-input
 
 SYMBOLS: game-input-backend game-input-opened ;
@@ -19,10 +19,6 @@ M: f (reset-game-input) ;
     game-input-opened off
     (reset-game-input) ;
 
-: load-game-input-backend ( -- )
-    game-input-backend get
-    [ "game-input.backend" load-vocab drop ] unless ;
-
 [ reset-game-input ] "game-input" add-init-hook
 
 PRIVATE>
@@ -62,9 +58,10 @@ HOOK: instance-id game-input-backend ( controller -- id )
     get-controllers [ product-id = ] with filter ;
 : find-controller-instance ( product-id instance-id -- controller/f )
     get-controllers [
+        tuck
         [ product-id  = ]
-        [ instance-id = ] bi, bi* and
-    ] 2with find nip ;
+        [ instance-id = ] 2bi* and
+    ] with with find nip ;
 
 HOOK: read-controller game-input-backend ( controller -- controller-state )
 HOOK: calibrate-controller game-input-backend ( controller -- )
@@ -76,5 +73,8 @@ M: keyboard-state clone
 
 HOOK: read-keyboard game-input-backend ( -- keyboard-state )
 
-load-game-input-backend
-
+{
+    { [ os windows? ] [ "game-input.dinput" require ] }
+    { [ os macosx? ] [ "game-input.iokit" require ] }
+    { [ t ] [ ] }
+} cond
diff --git a/extra/game-input/iokit/authors.txt b/extra/game-input/iokit/authors.txt
new file mode 100644 (file)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/extra/game-input/iokit/iokit.factor b/extra/game-input/iokit/iokit.factor
new file mode 100755 (executable)
index 0000000..26f2c40
--- /dev/null
@@ -0,0 +1,279 @@
+USING: cocoa cocoa.plists core-foundation iokit iokit.hid
+kernel cocoa.enumeration destructors math.parser cocoa.application 
+sequences locals combinators.short-circuit threads
+namespaces assocs vectors arrays combinators
+core-foundation.run-loop accessors sequences.private
+alien.c-types math parser game-input ;
+IN: game-input.iokit
+
+SINGLETON: iokit-game-input-backend
+
+iokit-game-input-backend game-input-backend set-global
+
+: hid-manager-matching ( matching-seq -- alien )
+    f 0 IOHIDManagerCreate
+    [ swap >plist IOHIDManagerSetDeviceMatchingMultiple ]
+    keep ;
+
+: devices-from-hid-manager ( manager -- vector )
+    [
+        IOHIDManagerCopyDevices
+        [ &CFRelease NSFastEnumeration>vector ] [ f ] if*
+    ] with-destructors ;
+
+: game-devices-matching-seq
+    {
+        H{ { "DeviceUsage" 4 } { "DeviceUsagePage" 1 } } ! joysticks
+        H{ { "DeviceUsage" 5 } { "DeviceUsagePage" 1 } } ! gamepads
+        H{ { "DeviceUsage" 6 } { "DeviceUsagePage" 1 } } ! keyboards
+    } ; inline
+
+: buttons-matching-hash
+    H{ { "UsagePage" 9 } { "Type" 2 } } ; inline
+: keys-matching-hash
+    H{ { "UsagePage" 7 } { "Type" 2 } } ; inline
+: x-axis-matching-hash
+    H{ { "UsagePage" 1 } { "Usage" HEX: 30 } { "Type" 1 } } ; inline
+: y-axis-matching-hash
+    H{ { "UsagePage" 1 } { "Usage" HEX: 31 } { "Type" 1 } } ; inline
+: z-axis-matching-hash
+    H{ { "UsagePage" 1 } { "Usage" HEX: 32 } { "Type" 1 } } ; inline
+: rx-axis-matching-hash
+    H{ { "UsagePage" 1 } { "Usage" HEX: 33 } { "Type" 1 } } ; inline
+: ry-axis-matching-hash
+    H{ { "UsagePage" 1 } { "Usage" HEX: 34 } { "Type" 1 } } ; inline
+: rz-axis-matching-hash
+    H{ { "UsagePage" 1 } { "Usage" HEX: 35 } { "Type" 1 } } ; inline
+: slider-matching-hash
+    H{ { "UsagePage" 1 } { "Usage" HEX: 36 } { "Type" 1 } } ; inline
+: hat-switch-matching-hash
+    H{ { "UsagePage" 1 } { "Usage" HEX: 39 } { "Type" 1 } } ; inline
+
+: device-elements-matching ( device matching-hash -- vector )
+    [
+        >plist 0 IOHIDDeviceCopyMatchingElements
+        [ &CFRelease NSFastEnumeration>vector ] [ f ] if*
+    ] with-destructors ;
+
+: button-count ( device -- button-count )
+    buttons-matching-hash device-elements-matching length ;
+
+: ?axis ( device hash -- axis/f )
+    device-elements-matching [ f ] [ first ] if-empty ;
+
+: ?x-axis ( device -- ? )
+    x-axis-matching-hash ?axis ;
+: ?y-axis ( device -- ? )
+    y-axis-matching-hash ?axis ;
+: ?z-axis ( device -- ? )
+    z-axis-matching-hash ?axis ;
+: ?rx-axis ( device -- ? )
+    rx-axis-matching-hash ?axis ;
+: ?ry-axis ( device -- ? )
+    ry-axis-matching-hash ?axis ;
+: ?rz-axis ( device -- ? )
+    rz-axis-matching-hash ?axis ;
+: ?slider ( device -- ? )
+    slider-matching-hash ?axis ;
+: ?hat-switch ( device -- ? )
+    hat-switch-matching-hash ?axis ;
+
+: hid-manager-matching-game-devices ( -- alien )
+    game-devices-matching-seq hid-manager-matching ;
+
+: device-property ( device key -- value )
+    <NSString> IOHIDDeviceGetProperty plist> ;
+: element-property ( element key -- value )
+    <NSString> IOHIDElementGetProperty plist> ;
+: set-element-property ( element key value -- )
+    [ <NSString> ] [ >plist ] bi* IOHIDElementSetProperty drop ;
+: transfer-element-property ( element from-key to-key -- )
+    [ dupd element-property ] dip swap set-element-property ;
+
+: controller-device? ( device -- ? )
+    {
+        [ 1 4 IOHIDDeviceConformsTo ]
+        [ 1 5 IOHIDDeviceConformsTo ]
+    } 1|| ;
+
+: element-usage ( element -- {usage-page,usage} )
+    [ IOHIDElementGetUsagePage ] [ IOHIDElementGetUsage ] bi
+    2array ;
+
+: button? ( {usage-page,usage} -- ? )
+    first 9 = ; inline
+: keyboard-key? ( {usage-page,usage} -- ? )
+    first 7 = ; inline
+: x-axis? ( {usage-page,usage} -- ? )
+    { 1 HEX: 30 } = ; inline
+: y-axis? ( {usage-page,usage} -- ? )
+    { 1 HEX: 31 } = ; inline
+: z-axis? ( {usage-page,usage} -- ? )
+    { 1 HEX: 32 } = ; inline
+: rx-axis? ( {usage-page,usage} -- ? )
+    { 1 HEX: 33 } = ; inline
+: ry-axis? ( {usage-page,usage} -- ? )
+    { 1 HEX: 34 } = ; inline
+: rz-axis? ( {usage-page,usage} -- ? )
+    { 1 HEX: 35 } = ; inline
+: slider? ( {usage-page,usage} -- ? )
+    { 1 HEX: 36 } = ; inline
+: hat-switch? ( {usage-page,usage} -- ? )
+    { 1 HEX: 39 } = ; inline
+
+: pov-values
+    {
+        pov-up pov-up-right pov-right pov-down-right
+        pov-down pov-down-left pov-left pov-up-left
+        pov-neutral
+    } ; inline
+
+: button-value ( value -- f/(0,1] )
+    IOHIDValueGetIntegerValue dup zero? [ drop f ] when ;
+: axis-value ( value -- [-1,1] )
+    kIOHIDValueScaleTypeCalibrated IOHIDValueGetScaledValue ;
+: pov-value ( value -- pov-direction )
+    IOHIDValueGetIntegerValue pov-values ?nth [ pov-neutral ] unless* ;
+
+: record-controller ( controller-state value -- )
+    dup IOHIDValueGetElement element-usage {
+        { [ dup button? ] [ [ button-value ] [ second 1- ] bi* rot buttons>> set-nth ] } 
+        { [ dup x-axis? ] [ drop axis-value >>x drop ] }
+        { [ dup y-axis? ] [ drop axis-value >>y drop ] }
+        { [ dup z-axis? ] [ drop axis-value >>z drop ] }
+        { [ dup rx-axis? ] [ drop axis-value >>rx drop ] }
+        { [ dup ry-axis? ] [ drop axis-value >>ry drop ] }
+        { [ dup rz-axis? ] [ drop axis-value >>rz drop ] }
+        { [ dup slider? ] [ drop axis-value >>slider drop ] }
+        { [ dup hat-switch? ] [ drop pov-value >>pov drop ] }
+        [ 3drop ]
+    } cond ;
+
+SYMBOLS: +hid-manager+ +keyboard-state+ +controller-states+ ;
+
+: ?set-nth ( value nth seq -- )
+    2dup bounds-check? [ set-nth-unsafe ] [ 3drop ] if ;
+
+: record-keyboard ( value -- )
+    dup IOHIDValueGetElement element-usage keyboard-key? [
+        [ IOHIDValueGetIntegerValue c-bool> ]
+        [ IOHIDValueGetElement IOHIDElementGetUsage ] bi
+        +keyboard-state+ get ?set-nth
+    ] [ drop ] if ;
+
+: default-calibrate-saturation ( element -- )
+    [ kIOHIDElementMinKey kIOHIDElementCalibrationSaturationMinKey transfer-element-property ]
+    [ kIOHIDElementMaxKey kIOHIDElementCalibrationSaturationMaxKey transfer-element-property ]
+    bi ;
+
+: default-calibrate-axis ( element -- )
+    [ kIOHIDElementCalibrationMinKey -1.0 set-element-property ]
+    [ kIOHIDElementCalibrationMaxKey 1.0 set-element-property ]
+    [ default-calibrate-saturation ]
+    tri ;
+
+: default-calibrate-slider ( element -- )
+    [ kIOHIDElementCalibrationMinKey 0.0 set-element-property ]
+    [ kIOHIDElementCalibrationMaxKey 1.0 set-element-property ]
+    [ default-calibrate-saturation ]
+    tri ;
+
+: (default) ( ? quot -- )
+    [ f ] if* ; inline
+
+: <device-controller-state> ( device -- controller-state )
+    {
+        [ ?x-axis [ default-calibrate-axis 0.0 ] (default) ]
+        [ ?y-axis [ default-calibrate-axis 0.0 ] (default) ]
+        [ ?z-axis [ default-calibrate-axis 0.0 ] (default) ]
+        [ ?rx-axis [ default-calibrate-axis 0.0 ] (default) ]
+        [ ?ry-axis [ default-calibrate-axis 0.0 ] (default) ]
+        [ ?rz-axis [ default-calibrate-axis 0.0 ] (default) ]
+        [ ?slider [ default-calibrate-slider 0.0 ] (default) ]
+        [ ?hat-switch pov-neutral and ]
+        [ button-count f <array> ]
+    } cleave controller-state boa ;
+
+: device-matched-callback ( -- alien )
+    [| context result sender device |
+        device controller-device? [
+            device <device-controller-state>
+            device +controller-states+ get set-at
+        ] when
+    ] IOHIDDeviceCallback ;
+
+: device-removed-callback ( -- alien )
+    [| context result sender device |
+        device +controller-states+ get delete-at
+    ] IOHIDDeviceCallback ;
+
+: device-input-callback ( -- alien )
+    [| context result sender value |
+        sender controller-device?
+        [ sender +controller-states+ get at value record-controller ]
+        [ value record-keyboard ]
+        if
+    ] IOHIDValueCallback ;
+
+: initialize-variables ( manager -- )
+    +hid-manager+ set-global
+    4 <vector> +controller-states+ set-global
+    256 f <array> +keyboard-state+ set-global ;
+
+M: iokit-game-input-backend (open-game-input)
+    hid-manager-matching-game-devices {
+        [ initialize-variables ]
+        [ device-matched-callback f IOHIDManagerRegisterDeviceMatchingCallback ]
+        [ device-removed-callback f IOHIDManagerRegisterDeviceRemovalCallback ]
+        [ device-input-callback f IOHIDManagerRegisterInputValueCallback ]
+        [ 0 IOHIDManagerOpen mach-error ]
+        [
+            CFRunLoopGetMain CFRunLoopDefaultMode
+            IOHIDManagerScheduleWithRunLoop
+        ]
+    } cleave ;
+
+M: iokit-game-input-backend (reset-game-input)
+    { +hid-manager+ +keyboard-state+ +controller-states+ }
+    [ f swap set-global ] each ;
+
+M: iokit-game-input-backend (close-game-input)
+    +hid-manager+ get-global [
+        +hid-manager+ global [ 
+            [
+                CFRunLoopGetMain CFRunLoopDefaultMode
+                IOHIDManagerUnscheduleFromRunLoop
+            ]
+            [ 0 IOHIDManagerClose drop ]
+            [ CFRelease ] tri
+            f
+        ] change-at
+        f +keyboard-state+ set-global
+        f +controller-states+ set-global
+    ] when ;
+
+M: iokit-game-input-backend get-controllers ( -- sequence )
+    +controller-states+ get keys [ controller boa ] map ;
+
+: ?join ( pre post sep -- string )
+    2over start [ swap 2nip ] [ [ 2array ] dip join ] if ;
+
+M: iokit-game-input-backend product-string ( controller -- string )
+    handle>>
+    [ kIOHIDManufacturerKey device-property ]
+    [ kIOHIDProductKey      device-property ] bi " " ?join ;
+M: iokit-game-input-backend product-id ( controller -- integer )
+    handle>>
+    [ kIOHIDVendorIDKey  device-property ]
+    [ kIOHIDProductIDKey device-property ] bi 2array ;
+M: iokit-game-input-backend instance-id ( controller -- integer )
+    handle>> kIOHIDLocationIDKey device-property ;
+
+M: iokit-game-input-backend read-controller ( controller -- controller-state )
+    handle>> +controller-states+ get at clone ;
+
+M: iokit-game-input-backend read-keyboard ( -- keyboard-state )
+    +keyboard-state+ get clone keyboard-state boa ;
+
+M: iokit-game-input-backend calibrate-controller ( controller -- )
+    drop ;
diff --git a/extra/game-input/iokit/summary.txt b/extra/game-input/iokit/summary.txt
new file mode 100644 (file)
index 0000000..8fc5d82
--- /dev/null
@@ -0,0 +1 @@
+IOKit HID Manager backend for game-input
diff --git a/extra/game-input/iokit/tags.txt b/extra/game-input/iokit/tags.txt
new file mode 100755 (executable)
index 0000000..82506ff
--- /dev/null
@@ -0,0 +1,2 @@
+unportable
+games
index aee53f24f50e1dda34747e1af1e6347b381f232d..c878306d7df4fbb43ffef82a6c9818b0e4aafb75 100644 (file)
@@ -1,9 +1,10 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel sequences io.files io.launcher io.encodings.ascii
-io.streams.string http.client generalizations combinators
-math.parser math.vectors math.intervals interval-maps memoize
-csv accessors assocs strings math splitting grouping arrays ;
+USING: kernel sequences io.files io.files.temp io.launcher
+io.pathnames io.encodings.ascii io.streams.string http.client
+generalizations combinators math.parser math.vectors
+math.intervals interval-maps memoize csv accessors assocs
+strings math splitting grouping arrays ;
 IN: geo-ip
 
 : db-path ( -- path ) "IpToCountry.csv" temp-file ;
index 9bb8db0f6d5302f791714577c1d780bc5a996971..a0212e47dedbb543e40f4991e6eeef35bc08e6ab 100755 (executable)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2007 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 
-USING: alien arrays byte-arrays combinators summary io.backend
+USING: alien arrays byte-arrays combinators summary
 graphics.viewer io io.binary io.files kernel libc math
 math.functions math.bitwise namespaces opengl opengl.gl
 prettyprint sequences strings ui ui.gadgets.panes fry
@@ -91,7 +91,7 @@ M: bitmap-magic summary
     dup color-index-length read >>color-index drop ;
 
 : load-bitmap ( path -- bitmap )
-    normalize-path binary [
+    binary [
         bitmap new
             dup parse-file-header
             dup parse-bitmap-header
index a18bb31874730c4a5aed7c218efa73a77f175332..abe830c3faa20d4b643076b6c9bfad3e9e4617fd 100755 (executable)
@@ -130,7 +130,7 @@ TUPLE: link attributes clickable ;
 
 : find-forms ( vector -- vector' )
     "form" over find-opening-tags-by-name
-    swap [ >r first2 r> find-between* ] curry map
+    swap [ [ first2 ] dip find-between* ] curry map
     [ [ name>> { "form" "input" } member? ] filter ] map ;
 
 : find-html-objects ( vector string -- vector' )
index d12d35a6d2eef41e3556d246489865ff020a7486..819154f509f288d3326f546a4db86889618f3d95 100755 (executable)
@@ -46,19 +46,19 @@ SYMBOL: open-arrays
     get-cba rot reg-val zero? [
         2drop
     ] [
-        >r reg-val r> set-reg
+        [ reg-val ] dip set-reg
     ] if f ;
 
 : binary-op ( quot -- ? )
-    >r get-cba r>
-    swap >r >r [ reg-val ] bi@ swap r> call r>
+    [ get-cba ] dip
+    swap [ [ [ reg-val ] bi@ swap ] dip call ] dip
     set-reg f ; inline
 
 : op1 ( opcode -- ? )
     [ swap arr-val ] binary-op ;
 
 : op2 ( opcode -- ? )
-    get-cba >r [ reg-val ] bi@ r> reg-val set-arr f ;
+    get-cba [ [ reg-val ] bi@ ] dip reg-val set-arr f ;
 
 : op3 ( opcode -- ? )
     [ + >32bit ] binary-op ;
@@ -73,18 +73,18 @@ SYMBOL: open-arrays
     [ bitand HEX: ffffffff swap - ] binary-op ;
 
 : new-array ( size location -- )
-    >r 0 <array> r> arrays get set-nth ;
+    [ 0 <array> ] dip arrays get set-nth ;
 
 : ?grow-storage ( -- )
     open-arrays get dup empty? [
-        >r arrays get length r> push
+        [ arrays get length ] dip push
     ] [
         drop
     ] if ;
 
 : op8 ( opcode -- ? )
     ?grow-storage
-    get-cb >r reg-val open-arrays get pop [ new-array ] keep r>
+    get-cb [ reg-val open-arrays get pop [ new-array ] keep ] dip
     set-reg f ;
 
 : op9 ( opcode -- ? )
index 0e3d48fe5bace99e55fa3e192e3a477f0fff4c2e..f1ca394e803c6e647bc0f52c684bc1011e60ead1 100755 (executable)
@@ -5,7 +5,7 @@ sequences assocs math arrays stack-checker effects generalizations
 continuations debugger classes.tuple namespaces make vectors
 bit-arrays byte-arrays strings sbufs math.functions macros
 sequences.private combinators mirrors
-combinators.short-circuit fry qualified ;
+combinators.short-circuit fry words.symbol ;
 RENAME: _ fry => __
 IN: inverse
 
@@ -135,9 +135,6 @@ MACRO: undo ( quot -- ) [undo] ;
 \ not [ not ] define-inverse
 \ >boolean [ { t f } memq? assure ] define-inverse
 
-\ >r [ r> ] define-inverse
-\ r> [ >r ] define-inverse
-
 \ tuple>array [ >tuple ] define-inverse
 \ >tuple [ tuple>array ] define-inverse
 \ reverse [ reverse ] define-inverse
index 936bc182bc11465f8a86194e9f620fedbe5bc0ff..bcea984579f404b171929c776e8fe39688c2160d 100644 (file)
@@ -10,9 +10,8 @@ TUPLE: serial stream path baud
 
 ERROR: invalid-baud baud ;
 M: invalid-baud summary ( invalid-baud -- string )
-    "Baud rate "
-    swap baud>> number>string
-    " not supported" 3append ;
+    baud>> number>string
+    "Baud rate " " not supported" surround ;
 
 HOOK: lookup-baud os ( m -- n )
 HOOK: open-serial os ( serial -- stream )
index 11ba5d3687c99c920c5da94c2b9112caf44a2aa2..465c55c833807d1b8193cc3c580d9ea50bbefc4a 100644 (file)
@@ -53,7 +53,7 @@ IN: iokit.hid
 : kIOHIDElementDuplicateIndexKey              "DuplicateIndex" ; inline
 : kIOHIDElementParentCollectionKey            "ParentCollection" ; inline
 
-: kIOHIDElementVendorSpecificKey
+: kIOHIDElementVendorSpecificKey ( -- str )
     cpu ppc? "VendorSpecifc" "VendorSpecific" ? ; inline
 
 : kIOHIDElementCookieMinKey           "ElementCookieMin" ; inline
index 680723def903f61c37779395caa1deb2c616a42c..2317d21ed58ea97df481132c608e1c4654b33580 100755 (executable)
@@ -1,5 +1,6 @@
-USING: alien.syntax alien.c-types core-foundation system
-combinators kernel sequences debugger io accessors ;
+USING: alien.syntax alien.c-types core-foundation
+core-foundation.bundles system combinators kernel sequences
+debugger io accessors ;
 IN: iokit
 
 <<
index 622b5eaa2ce3a20e149920bd8791b2f542d33d21..c1cbdcf8b8e022dd57a001a4cc3a0cfcd9d83334 100644 (file)
@@ -1,4 +1,4 @@
-USING: kernel tools.test accessors arrays sequences qualified
+USING: kernel tools.test accessors arrays sequences
        io io.streams.duplex namespaces threads destructors
        calendar irc.client.private irc.client irc.messages.private
        concurrency.mailboxes classes assocs combinators ;
index 8199347feb0c0a2b6529a8374b97044a9c3e99ca..0eba6f6af572148cdd0a520691a354c778a53de7 100755 (executable)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Bruno Deferrari, Doug Coleman, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: concurrency.mailboxes kernel io.sockets io.encodings.8-bit calendar
-       accessors destructors namespaces io assocs arrays qualified fry
+       accessors destructors namespaces io assocs arrays fry
        continuations threads strings classes combinators splitting hashtables
        ascii irc.messages ;
 RENAME: join sequences => sjoin
index 41272a43f20109e9dbe9822c7d5bcf02b996bd50..ac1d003b1b7f475b6316657a46d2dc3cfc6ec88a 100644 (file)
@@ -1,4 +1,4 @@
-USING: kernel tools.test accessors arrays qualified
+USING: kernel tools.test accessors arrays
        irc.messages irc.messages.private ;
 EXCLUDE: sequences => join ;
 IN: irc.messages.tests
index 8054dc8075665a4b72e873d087a13bb6e2f6a6b6..c88bbc072ac3aa9c4c8b329ac1fa0614caa006f4 100755 (executable)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Bruno Deferrari
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel fry splitting ascii calendar accessors combinators qualified
+USING: kernel fry splitting ascii calendar accessors combinators
        arrays classes.tuple math.order ;
 RENAME: join sequences => sjoin
 EXCLUDE: sequences => join ;
index e6f4d07b56492e25bbb8a449cc734fd701d2620e..6048d93711ed857f20c579bc5928c56255975098 100755 (executable)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 William Schlieper\r
 ! See http://factorcode.org/license.txt for BSD license.\r
 \r
-USING: kernel io.files parser editors sequences ;\r
+USING: kernel io.files io.pathnames parser editors sequences ;\r
 \r
 IN: irc.ui.load\r
 \r
index fd64e9a07e7355b6839fc91a440d3f532e626ef9..59e4cf6cb4727e9d59881efb9e5ded70e502f9a8 100755 (executable)
@@ -3,7 +3,7 @@
 \r
 USING: accessors kernel threads combinators concurrency.mailboxes\r
        sequences strings hashtables splitting fry assocs hashtables colors\r
-       sorting qualified unicode.collation math.order\r
+       sorting unicode.collation math.order\r
        ui ui.gadgets ui.gadgets.panes ui.gadgets.editors\r
        ui.gadgets.scrollers ui.commands ui.gadgets.frames ui.gestures\r
        ui.gadgets.tabs ui.gadgets.grids ui.gadgets.packs ui.gadgets.labels\r
index 6a0b9f728f2b7d905c533c09d9bf6a3433a0d54c..9e457c7bddeaabca17e2d41dd3195a45a589374c 100755 (executable)
@@ -1,7 +1,7 @@
 USING: ui ui.gadgets sequences kernel arrays math colors
 ui.render math.vectors accessors fry ui.gadgets.packs game-input
 ui.gadgets.labels ui.gadgets.borders alarms
-calendar locals combinators.lib strings ui.gadgets.buttons
+calendar locals strings ui.gadgets.buttons
 combinators math.parser assocs threads ;
 IN: joystick-demo
 
@@ -51,9 +51,9 @@ M: axis-gadget pref-dim* drop SIZE ;
     [ (xy>loc) ] dip (z>loc) ;
 
 : move-axis ( gadget x y z -- )
-    (xyz>loc) rot
+    (xyz>loc) rot tuck
     [ indicator>>   (>>loc) ]
-    [ z-indicator>> (>>loc) ] bi, bi* ;
+    [ z-indicator>> (>>loc) ] 2bi* ;
 
 : move-pov ( gadget pov -- )
     swap pov>> [ interior>> -rot = [ gray ] [ white ] if >>color drop ]
@@ -82,10 +82,10 @@ TUPLE: joystick-demo-gadget < pack axis raxis controller buttons alarm ;
     [ >>controller ] [ product-string <label> add-gadget ] bi ;
 
 : add-axis-gadget ( gadget shelf -- gadget shelf )
-    <axis-gadget> [ >>axis ] [ add-gadget-with-border ] bi, bi* ;
+    <axis-gadget> tuck [ >>axis ] [ add-gadget-with-border ] 2bi* ;
 
 : add-raxis-gadget ( gadget shelf -- gadget shelf )
-    <axis-gadget> [ >>raxis ] [ add-gadget-with-border ] bi, bi* ;
+    <axis-gadget> tuck [ >>raxis ] [ add-gadget-with-border ] 2bi* ;
 
 :: (add-button-gadgets) ( gadget shelf -- )
     gadget controller>> read-controller buttons>> length [
index 01fba499956bcfdef8672f1691bc695f1cf060b2..13dc34135092ea4d14bbec6a381d0082484fe82c 100755 (executable)
@@ -1,5 +1,4 @@
-USING: koszul tools.test kernel sequences assocs namespaces
-symbols ;
+USING: koszul tools.test kernel sequences assocs namespaces ;
 IN: koszul.tests
 
 [
index 5bd679d92a737e29ae153b36669c120504db6ee5..7ac69d298057301e834cba23108c15083180005a 100755 (executable)
@@ -3,7 +3,7 @@
 USING: accessors arrays assocs hashtables assocs io kernel math
 math.vectors math.matrices math.matrices.elimination namespaces
 parser prettyprint sequences words combinators math.parser
-splitting sorting shuffle symbols sets math.order ;
+splitting sorting shuffle sets math.order ;
 IN: koszul
 
 ! Utilities
@@ -108,7 +108,7 @@ SYMBOL: boundaries
 
 : ((d)) ( basis -- value ) boundaries get at ;
 
-: dx.y ( x y -- vec ) >r ((d)) r> wedge ;
+: dx.y ( x y -- vec ) [ ((d)) ] dip wedge ;
 
 DEFER: (d)
 
@@ -120,7 +120,7 @@ DEFER: (d)
 : linear-op ( vec quot -- vec )
         [
         [
-            -rot >r swap call r> alt*n (alt+)
+            -rot [ swap call ] dip alt*n (alt+)
         ] curry assoc-each
     ] with-terms ; inline
 
@@ -165,7 +165,7 @@ DEFER: (d)
     swap call [ at 0 or ] curry map ; inline
 
 : op-matrix ( domain range quot -- matrix )
-    rot [ >r 2dup r> (op-matrix) ] map 2nip ; inline
+    rot [ [ 2dup ] dip (op-matrix) ] map 2nip ; inline
 
 : d-matrix ( domain range -- matrix )
     [ (d) ] op-matrix ;
@@ -176,7 +176,7 @@ DEFER: (d)
 ! Graded by degree
 : (graded-ker/im-d) ( n seq -- null/rank )
     #! d: C(n) ---> C(n+1)
-    [ ?nth ] 2keep >r 1+ r> ?nth
+    [ ?nth ] [ [ 1+ ] dip ?nth ] 2bi
     dim-im/ker-d ;
 
 : graded-ker/im-d ( graded-basis -- seq )
@@ -188,13 +188,13 @@ DEFER: (d)
 ! Bi-graded for two-step complexes
 : (bigraded-ker/im-d) ( u-deg z-deg bigraded-basis -- null/rank )
     #! d: C(u,z) ---> C(u+2,z-1)
-    [ ?nth ?nth ] 3keep >r >r 2 + r> 1 - r> ?nth ?nth
+    [ ?nth ?nth ] 3keep [ [ 2 + ] dip 1 - ] dip ?nth ?nth
     dim-im/ker-d ;
 
 : bigraded-ker/im-d ( bigraded-basis -- seq )
     dup length [
         over first length [
-            >r 2dup r> spin (bigraded-ker/im-d)
+            [ 2dup ] dip spin (bigraded-ker/im-d)
         ] map 2nip
     ] with map ;
 
@@ -224,13 +224,13 @@ DEFER: (d)
     ] if ;
 
 : laplacian-matrix ( basis1 basis2 basis3 -- matrix )
-    dupd d-matrix m.m' >r d-matrix m'.m r> ?m+ ;
+    dupd d-matrix m.m' [ d-matrix m'.m ] dip ?m+ ;
 
 : laplacian-betti ( basis1 basis2 basis3 -- n )
     laplacian-matrix null/rank drop ;
 
 : laplacian-kernel ( basis1 basis2 basis3 -- basis )
-    >r tuck r>
+    [ tuck ] dip
     laplacian-matrix dup empty-matrix? [
         2drop f
     ] [
@@ -246,7 +246,7 @@ DEFER: (d)
     dup length [ graded-triple ] with map ;
 
 : graded-laplacian ( generators quot -- seq )
-    >r basis graded graded-triples [ first3 ] r> compose map ;
+    [ basis graded graded-triples [ first3 ] ] dip compose map ;
     inline
 
 : graded-laplacian-betti ( generators -- seq )
@@ -273,12 +273,12 @@ DEFER: (d)
 : bigraded-triples ( grid -- triples )
     dup length [
         over first length [
-            >r 2dup r> spin bigraded-triple
+            [ 2dup ] dip spin bigraded-triple
         ] map 2nip
     ] with map ;
 
 : bigraded-laplacian ( u-generators z-generators quot -- seq )
-    >r [ basis graded ] bi@ tensor bigraded-triples r>
+    [ [ basis graded ] bi@ tensor bigraded-triples ] dip
     [ [ first3 ] prepose map ] curry map ; inline
 
 : bigraded-laplacian-betti ( u-generators z-generators -- seq )
index 77b0b11238745b74311de3c089dd175cbbc7fbf5..d3c8f7217fdd14ea326ed7f56ae00ff62c7fd53b 100644 (file)
@@ -15,13 +15,13 @@ SYMBOL: def-hash-keys
 
 : more-defs ( hash -- )
     {
-        { -rot [ swap >r swap r> ] }
+        { -rot [ swap [ swap ] dip ] }
         { -rot [ swap swapd ] }
-        { rot [ >r swap r> swap ] }
+        { rot [ [ swap ] dip swap ] }
         { rot [ swapd swap ] }
         { over [ dup swap ] }
         { tuck [ dup -rot ] }
-        { swapd [ >r swap r> ] }
+        { swapd [ [ swap ] dip ] }
         { 2nip [ nip nip ] }
         { 2drop [ drop drop ] }
         { 3drop [ drop drop drop ] }
index 7bc63d3e3482cb5f4572e41351fbf86e5bf8dc72..263454f7692e132ad57205976240068a3685299a 100755 (executable)
@@ -1,4 +1,4 @@
-USING: kernel io io.files io.monitors io.encodings.utf8 ;\r
+USING: kernel io io.files io.pathnames io.monitors io.encodings.utf8 ;\r
 IN: log-viewer\r
 \r
 : read-lines ( stream -- )\r
index 35070d89023f275c6e61a57fe3a8d5b2191c0ff2..4d705610b4a7dd240056d7f1634c0908dc5b0483 100644 (file)
@@ -1,9 +1,9 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io.files io.launcher io.encodings.utf8 prettyprint arrays
-calendar namespaces mason.common mason.child
-mason.release mason.report mason.email mason.cleanup
-mason.help ;
+USING: arrays calendar io.directories io.encodings.utf8
+io.files io.launcher mason.child mason.cleanup mason.common
+mason.email mason.help mason.release mason.report namespaces
+prettyprint ;
 IN: mason.build
 
 : create-build-dir ( -- )
index 0c9669ed5a5a5425088dc0c54df89dfaf3c24665..5a3a0d6ceb939a3bf8dbac1428fe5aec19a21752 100644 (file)
@@ -1,9 +1,9 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel namespaces make debugger sequences io.files
-io.launcher arrays accessors calendar continuations
-combinators.short-circuit mason.common mason.report
-mason.platform mason.config http.client ;
+USING: accessors arrays calendar combinators.short-circuit
+continuations debugger http.client io.directories io.files
+io.launcher io.pathnames kernel make mason.common mason.config
+mason.platform mason.report namespaces sequences ;
 IN: mason.child
 
 : make-cmd ( -- args )
index ae24f533d6384be3fa805e7fcd1ad0f8fa6fe312..a2c087392a3aa5b698334587601cb4f0037456e8 100644 (file)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel namespaces arrays continuations io.files io.launcher
-mason.common mason.platform mason.config ;
+USING: arrays continuations io.directories
+io.directories.hierarchy io.files io.launcher kernel
+mason.common mason.config mason.platform namespaces ;
 IN: mason.cleanup
 
 : compress-image ( -- )
index ed6ffecdd11f749fd5d93406bfdde3b59fd18443..095cbd1a80aa16ed726bc7085679db377ba17326 100644 (file)
@@ -1,6 +1,6 @@
 IN: mason.common.tests
 USING: prettyprint mason.common mason.config
-namespaces calendar tools.test io.files io.encodings.utf8 ;
+namespaces calendar tools.test io.files io.files.temp io.encodings.utf8 ;
 
 [ "00:01:01" ] [ 61000 milli-seconds>time ] unit-test
 
index 49f280fa84977ba8926d233d737b4398ccf1aff7..ec0cbdbc9c4e92bc96cccf4bd37e20cddffc06ac 100644 (file)
@@ -1,9 +1,10 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel namespaces sequences splitting system accessors
-math.functions make io io.files io.launcher io.encodings.utf8
-prettyprint combinators.short-circuit parser combinators
-calendar calendar.format arrays mason.config locals ;
+math.functions make io io.files io.pathnames io.directories
+io.launcher io.encodings.utf8 prettyprint
+combinators.short-circuit parser combinators calendar
+calendar.format arrays mason.config locals ;
 IN: mason.common
 
 : short-running-process ( command -- )
index 9169fbf1960d036784f2c2e53aa629b6bba61672..b1739d85faff15c104a0ecdf3acbe86f2e9766ef 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: system io.files namespaces kernel accessors assocs ;
+USING: system io.files io.pathnames namespaces kernel accessors
+assocs ;
 IN: mason.config
 
 ! (Optional) Location for build directories
index c9ca50f0c2a91faa8f2a134e67d641c1c0e16c0b..9a4e2be99630001a594b870551f96fd1229112cf 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: help.html sequences io.files io.launcher make namespaces
-kernel arrays mason.common mason.config ;
+USING: arrays help.html io.directories io.files io.launcher
+kernel make mason.common mason.config namespaces sequences ;
 IN: mason.help
 
 : make-help-archive ( -- )
index 4f9c8f65d37dbbbb217c0b691fcc4a90d86894cd..299a2f4e1fe1a885bd24cd656577f2269a4e8455 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel debugger io io.files threads debugger continuations
-namespaces accessors calendar mason.common mason.updates
-mason.build mason.email ;
+USING: accessors calendar continuations debugger debugger io
+io.directories io.files kernel mason.build mason.common
+mason.email mason.updates namespaces threads ;
 IN: mason
 
 : build-loop-error ( error -- )
index e76979d88527bda187acb5cce23f7fee5778a8fa..5ef424ad4f6e4e2a0e91e244092687dce31a7df5 100644 (file)
@@ -1,8 +1,9 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel combinators sequences make namespaces io.files
-io.launcher prettyprint arrays
-mason.common mason.platform mason.config ;
+USING: arrays combinators io.directories
+io.directories.hierarchy io.files io.launcher io.pathnames
+kernel make mason.common mason.config mason.platform namespaces
+prettyprint sequences ;
 IN: mason.release.archive
 
 : base-name ( -- string )
index 600b08c6b66e4fbc0e05add1dca8eda90ec2f825..75ce828c2801cf1ad9570ab5e9917de65470fd05 100644 (file)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel namespaces sequences prettyprint io.files
-io.launcher make mason.common mason.platform mason.config ;
+USING: io.directories io.files io.launcher kernel make
+mason.common mason.config mason.platform namespaces prettyprint
+sequences ;
 IN: mason.release.branch
 
 : branch-name ( -- string ) "clean-" platform append ;
index fb931650d448230b06f77083ea3abaf2a751cbbe..7327209a06d83146add465e0bdac920961b9fdc4 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel namespaces continuations debugger sequences fry
-io.files io.launcher bootstrap.image qualified mason.common
-mason.config ;
+USING: bootstrap.image continuations debugger fry
+io.directories io.directories.hierarchy io.files io.launcher
+kernel mason.common namespaces sequences ;
 FROM: mason.config => target-os ;
 IN: mason.release.tidy
 
index b23ad19e5e7d9836eaf9da261751c0e86fb56256..a15a96c63eaea977e65ee81fcc682affe86641b5 100644 (file)
@@ -1,9 +1,10 @@
 ! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel namespaces assocs io.files io.encodings.utf8
-prettyprint help.lint benchmark tools.time bootstrap.stage2
-tools.test tools.vocabs help.html mason.common words generic
-accessors compiler.errors sequences sets sorting math ;
+USING: accessors assocs benchmark bootstrap.stage2
+compiler.errors generic help.html help.lint io.directories
+io.encodings.utf8 io.files kernel mason.common math namespaces
+prettyprint sequences sets sorting tools.test tools.time
+tools.vocabs words ;
 IN: mason.test
 
 : do-load ( -- )
index 36a29c7aa1fdfa7f44bc3b4da352ba2303221bc6..d995cab59d5f147ce6ac2868f25bce19f60459e7 100644 (file)
@@ -15,5 +15,5 @@ HELP: binpack*
 
 HELP: binpack!
 { $values { "items" sequence } { "quot" quotation } { "n" "number of bins" } { "bins" "packed bins" } } 
-{ $description "Packs a sequence of items into the specified number of bins, using the quotatino to determine the weight." } ;
+{ $description "Packs a sequence of items into the specified number of bins, using the quotation to determine the weight." } ;
 
diff --git a/extra/math/blas/cblas/authors.txt b/extra/math/blas/cblas/authors.txt
deleted file mode 100644 (file)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/math/blas/cblas/cblas.factor b/extra/math/blas/cblas/cblas.factor
deleted file mode 100644 (file)
index 4c0a88f..0000000
+++ /dev/null
@@ -1,559 +0,0 @@
-USING: alien alien.c-types alien.syntax kernel system combinators ;
-IN: math.blas.cblas
-
-<< "cblas" {
-    { [ os macosx? ] [ "libblas.dylib" "cdecl" add-library ] }
-    { [ os windows? ] [ "blas.dll" "cdecl" add-library ] }
-    { [ os openbsd? ] [ "libcblas.so" "cdecl" add-library ] }
-    { [ os freebsd? ] [ "libcblas.so" "cdecl" add-library ] }
-    [ "libblas.so" "cdecl" add-library ]
-} cond >>
-
-LIBRARY: cblas
-
-TYPEDEF: int CBLAS_ORDER
-: CblasRowMajor 101 ; inline
-: CblasColMajor 102 ; inline
-
-TYPEDEF: int CBLAS_TRANSPOSE
-: CblasNoTrans   111 ; inline
-: CblasTrans     112 ; inline
-: CblasConjTrans 113 ; inline
-
-TYPEDEF: int CBLAS_UPLO
-: CblasUpper 121 ; inline
-: CblasLower 122 ; inline
-
-TYPEDEF: int CBLAS_DIAG
-: CblasNonUnit 131 ; inline
-: CblasUnit    132 ; inline
-
-TYPEDEF: int CBLAS_SIDE
-: CblasLeft  141 ; inline
-: CblasRight 142 ; inline
-
-TYPEDEF: int CBLAS_INDEX
-
-C-STRUCT: float-complex
-    { "float" "real" }
-    { "float" "imag" } ;
-C-STRUCT: double-complex
-    { "double" "real" }
-    { "double" "imag" } ;
-
-! Level 1 BLAS (scalar-vector and vector-vector)
-
-FUNCTION: float  cblas_sdsdot
-    ( int N, float    alpha, float*   X, int incX, float*   Y, int incY ) ;
-FUNCTION: double cblas_dsdot
-    ( int N,                 float*   X, int incX, float*   Y, int incY ) ;
-FUNCTION: float  cblas_sdot
-    ( int N,                 float*   X, int incX, float*   Y, int incY ) ;
-FUNCTION: double cblas_ddot
-    ( int N,                 double*  X, int incX, double*  Y, int incY ) ;
-
-FUNCTION: void   cblas_cdotu_sub
-    ( int N,                 void*    X, int incX, void*    Y, int incY, void*    dotu ) ;
-FUNCTION: void   cblas_cdotc_sub
-    ( int N,                 void*    X, int incX, void*    Y, int incY, void*    dotc ) ;
-
-FUNCTION: void   cblas_zdotu_sub
-    ( int N,                 void*    X, int incX, void*    Y, int incY, void*    dotu ) ;
-FUNCTION: void   cblas_zdotc_sub
-    ( int N,                 void*    X, int incX, void*    Y, int incY, void*    dotc ) ;
-
-FUNCTION: float  cblas_snrm2
-    ( int N,                 float*   X, int incX ) ;
-FUNCTION: float  cblas_sasum
-    ( int N,                 float*   X, int incX ) ;
-
-FUNCTION: double cblas_dnrm2
-    ( int N,                 double*  X, int incX ) ;
-FUNCTION: double cblas_dasum
-    ( int N,                 double*  X, int incX ) ;
-
-FUNCTION: float  cblas_scnrm2
-    ( int N,                 void*    X, int incX ) ;
-FUNCTION: float  cblas_scasum
-    ( int N,                 void*    X, int incX ) ;
-
-FUNCTION: double cblas_dznrm2
-    ( int N,                 void*    X, int incX ) ;
-FUNCTION: double cblas_dzasum
-    ( int N,                 void*    X, int incX ) ;
-
-FUNCTION: CBLAS_INDEX cblas_isamax
-    ( int N,                 float*   X, int incX ) ;
-FUNCTION: CBLAS_INDEX cblas_idamax
-    ( int N,                 double*  X, int incX ) ;
-FUNCTION: CBLAS_INDEX cblas_icamax
-    ( int N,                 void*    X, int incX ) ;
-FUNCTION: CBLAS_INDEX cblas_izamax
-    ( int N,                 void*    X, int incX ) ;
-
-FUNCTION: void cblas_sswap
-    ( int N,                 float*   X, int incX, float*   Y, int incY ) ;
-FUNCTION: void cblas_scopy
-    ( int N,                 float*   X, int incX, float*   Y, int incY ) ;
-FUNCTION: void cblas_saxpy
-    ( int N, float    alpha, float*   X, int incX, float*   Y, int incY ) ;
-
-FUNCTION: void cblas_dswap
-    ( int N,                 double*  X, int incX, double*  Y, int incY ) ;
-FUNCTION: void cblas_dcopy
-    ( int N,                 double*  X, int incX, double*  Y, int incY ) ;
-FUNCTION: void cblas_daxpy
-    ( int N, double   alpha, double*  X, int incX, double*  Y, int incY ) ;
-
-FUNCTION: void cblas_cswap
-    ( int N,                 void*    X, int incX, void*    Y, int incY ) ;
-FUNCTION: void cblas_ccopy
-    ( int N,                 void*    X, int incX, void*    Y, int incY ) ;
-FUNCTION: void cblas_caxpy
-    ( int N, void*    alpha, void*    X, int incX, void*    Y, int incY ) ;
-
-FUNCTION: void cblas_zswap
-    ( int N,                 void*    X, int incX, void*    Y, int incY ) ;
-FUNCTION: void cblas_zcopy
-    ( int N,                 void*    X, int incX, void*    Y, int incY ) ;
-FUNCTION: void cblas_zaxpy
-    ( int N, void*    alpha, void*    X, int incX, void*    Y, int incY ) ;
-
-FUNCTION: void cblas_sscal
-    ( int N, float    alpha, float*   X, int incX ) ;
-FUNCTION: void cblas_dscal
-    ( int N, double   alpha, double*  X, int incX ) ;
-FUNCTION: void cblas_cscal
-    ( int N, void*    alpha, void*    X, int incX ) ;
-FUNCTION: void cblas_zscal
-    ( int N, void*    alpha, void*    X, int incX ) ;
-FUNCTION: void cblas_csscal
-    ( int N, float    alpha, void*    X, int incX ) ;
-FUNCTION: void cblas_zdscal
-    ( int N, double   alpha, void*    X, int incX ) ;
-
-FUNCTION: void cblas_srotg
-    ( float* a, float* b, float* c, float* s ) ;
-FUNCTION: void cblas_srotmg
-    ( float* d1, float* d2, float* b1, float b2, float* P ) ;
-FUNCTION: void cblas_srot
-    ( int N, float* X, int incX, float* Y, int incY, float c, float s ) ;
-FUNCTION: void cblas_srotm
-    ( int N, float* X, int incX, float* Y, int incY, float* P ) ;
-
-FUNCTION: void cblas_drotg
-    ( double* a, double* b, double* c, double* s ) ;
-FUNCTION: void cblas_drotmg
-    ( double* d1, double* d2, double* b1, double b2, double* P ) ;
-FUNCTION: void cblas_drot
-    ( int N, double* X, int incX, double* Y, int incY, double c, double s ) ;
-FUNCTION: void cblas_drotm
-    ( int N, double* X, int incX, double* Y, int incY, double* P ) ;
-! Level 2 BLAS (matrix-vector)
-
-FUNCTION: void cblas_sgemv ( CBLAS_ORDER Order,
-                 CBLAS_TRANSPOSE TransA, int M, int N,
-                 float alpha, float* A, int lda,
-                 float* X, int incX, float beta,
-                 float* Y, int incY ) ;
-FUNCTION: void cblas_sgbmv ( CBLAS_ORDER Order,
-                 CBLAS_TRANSPOSE TransA, int M, int N,
-                 int KL, int KU, float alpha,
-                 float* A, int lda, float* X,
-                 int incX, float beta, float* Y, int incY ) ;
-FUNCTION: void cblas_strmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, float* A, int lda,
-                 float* X, int incX ) ;
-FUNCTION: void cblas_stbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, int K, float* A, int lda,
-                 float* X, int incX ) ;
-FUNCTION: void cblas_stpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, float* Ap, float* X, int incX ) ;
-FUNCTION: void cblas_strsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, float* A, int lda, float* X,
-                 int incX ) ;
-FUNCTION: void cblas_stbsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, int K, float* A, int lda,
-                 float* X, int incX ) ;
-FUNCTION: void cblas_stpsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, float* Ap, float* X, int incX ) ;
-
-FUNCTION: void cblas_dgemv ( CBLAS_ORDER Order,
-                 CBLAS_TRANSPOSE TransA, int M, int N,
-                 double alpha, double* A, int lda,
-                 double* X, int incX, double beta,
-                 double* Y, int incY ) ;
-FUNCTION: void cblas_dgbmv ( CBLAS_ORDER Order,
-                 CBLAS_TRANSPOSE TransA, int M, int N,
-                 int KL, int KU, double alpha,
-                 double* A, int lda, double* X,
-                 int incX, double beta, double* Y, int incY ) ;
-FUNCTION: void cblas_dtrmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, double* A, int lda,
-                 double* X, int incX ) ;
-FUNCTION: void cblas_dtbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, int K, double* A, int lda,
-                 double* X, int incX ) ;
-FUNCTION: void cblas_dtpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, double* Ap, double* X, int incX ) ;
-FUNCTION: void cblas_dtrsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, double* A, int lda, double* X,
-                 int incX ) ;
-FUNCTION: void cblas_dtbsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, int K, double* A, int lda,
-                 double* X, int incX ) ;
-FUNCTION: void cblas_dtpsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, double* Ap, double* X, int incX ) ;
-
-FUNCTION: void cblas_cgemv ( CBLAS_ORDER Order,
-                 CBLAS_TRANSPOSE TransA, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* X, int incX, void* beta,
-                 void* Y, int incY ) ;
-FUNCTION: void cblas_cgbmv ( CBLAS_ORDER Order,
-                 CBLAS_TRANSPOSE TransA, int M, int N,
-                 int KL, int KU, void* alpha,
-                 void* A, int lda, void* X,
-                 int incX, void* beta, void* Y, int incY ) ;
-FUNCTION: void cblas_ctrmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, void* A, int lda,
-                 void* X, int incX ) ;
-FUNCTION: void cblas_ctbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, int K, void* A, int lda,
-                 void* X, int incX ) ;
-FUNCTION: void cblas_ctpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, void* Ap, void* X, int incX ) ;
-FUNCTION: void cblas_ctrsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, void* A, int lda, void* X,
-                 int incX ) ;
-FUNCTION: void cblas_ctbsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, int K, void* A, int lda,
-                 void* X, int incX ) ;
-FUNCTION: void cblas_ctpsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, void* Ap, void* X, int incX ) ;
-
-FUNCTION: void cblas_zgemv ( CBLAS_ORDER Order,
-                 CBLAS_TRANSPOSE TransA, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* X, int incX, void* beta,
-                 void* Y, int incY ) ;
-FUNCTION: void cblas_zgbmv ( CBLAS_ORDER Order,
-                 CBLAS_TRANSPOSE TransA, int M, int N,
-                 int KL, int KU, void* alpha,
-                 void* A, int lda, void* X,
-                 int incX, void* beta, void* Y, int incY ) ;
-FUNCTION: void cblas_ztrmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, void* A, int lda,
-                 void* X, int incX ) ;
-FUNCTION: void cblas_ztbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, int K, void* A, int lda,
-                 void* X, int incX ) ;
-FUNCTION: void cblas_ztpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, void* Ap, void* X, int incX ) ;
-FUNCTION: void cblas_ztrsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, void* A, int lda, void* X,
-                 int incX ) ;
-FUNCTION: void cblas_ztbsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, int K, void* A, int lda,
-                 void* X, int incX ) ;
-FUNCTION: void cblas_ztpsv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag,
-                 int N, void* Ap, void* X, int incX ) ;
-
-
-FUNCTION: void cblas_ssymv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, float alpha, float* A,
-                 int lda, float* X, int incX,
-                 float beta, float* Y, int incY ) ;
-FUNCTION: void cblas_ssbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, int K, float alpha, float* A,
-                 int lda, float* X, int incX,
-                 float beta, float* Y, int incY ) ;
-FUNCTION: void cblas_sspmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, float alpha, float* Ap,
-                 float* X, int incX,
-                 float beta, float* Y, int incY ) ;
-FUNCTION: void cblas_sger ( CBLAS_ORDER Order, int M, int N,
-                float alpha, float* X, int incX,
-                float* Y, int incY, float* A, int lda ) ;
-FUNCTION: void cblas_ssyr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, float alpha, float* X,
-                int incX, float* A, int lda ) ;
-FUNCTION: void cblas_sspr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, float alpha, float* X,
-                int incX, float* Ap ) ;
-FUNCTION: void cblas_ssyr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, float alpha, float* X,
-                int incX, float* Y, int incY, float* A,
-                int lda ) ;
-FUNCTION: void cblas_sspr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, float alpha, float* X,
-                int incX, float* Y, int incY, float* A ) ;
-
-FUNCTION: void cblas_dsymv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, double alpha, double* A,
-                 int lda, double* X, int incX,
-                 double beta, double* Y, int incY ) ;
-FUNCTION: void cblas_dsbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, int K, double alpha, double* A,
-                 int lda, double* X, int incX,
-                 double beta, double* Y, int incY ) ;
-FUNCTION: void cblas_dspmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, double alpha, double* Ap,
-                 double* X, int incX,
-                 double beta, double* Y, int incY ) ;
-FUNCTION: void cblas_dger ( CBLAS_ORDER Order, int M, int N,
-                double alpha, double* X, int incX,
-                double* Y, int incY, double* A, int lda ) ;
-FUNCTION: void cblas_dsyr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, double alpha, double* X,
-                int incX, double* A, int lda ) ;
-FUNCTION: void cblas_dspr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, double alpha, double* X,
-                int incX, double* Ap ) ;
-FUNCTION: void cblas_dsyr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, double alpha, double* X,
-                int incX, double* Y, int incY, double* A,
-                int lda ) ;
-FUNCTION: void cblas_dspr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, double alpha, double* X,
-                int incX, double* Y, int incY, double* A ) ;
-
-
-FUNCTION: void cblas_chemv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, void* alpha, void* A,
-                 int lda, void* X, int incX,
-                 void* beta, void* Y, int incY ) ;
-FUNCTION: void cblas_chbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, int K, void* alpha, void* A,
-                 int lda, void* X, int incX,
-                 void* beta, void* Y, int incY ) ;
-FUNCTION: void cblas_chpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, void* alpha, void* Ap,
-                 void* X, int incX,
-                 void* beta, void* Y, int incY ) ;
-FUNCTION: void cblas_cgeru ( CBLAS_ORDER Order, int M, int N,
-                 void* alpha, void* X, int incX,
-                 void* Y, int incY, void* A, int lda ) ;
-FUNCTION: void cblas_cgerc ( CBLAS_ORDER Order, int M, int N,
-                 void* alpha, void* X, int incX,
-                 void* Y, int incY, void* A, int lda ) ;
-FUNCTION: void cblas_cher ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, float alpha, void* X, int incX,
-                void* A, int lda ) ;
-FUNCTION: void cblas_chpr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, float alpha, void* X,
-                int incX, void* A ) ;
-FUNCTION: void cblas_cher2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo, int N,
-                void* alpha, void* X, int incX,
-                void* Y, int incY, void* A, int lda ) ;
-FUNCTION: void cblas_chpr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo, int N,
-                void* alpha, void* X, int incX,
-                void* Y, int incY, void* Ap ) ;
-
-FUNCTION: void cblas_zhemv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, void* alpha, void* A,
-                 int lda, void* X, int incX,
-                 void* beta, void* Y, int incY ) ;
-FUNCTION: void cblas_zhbmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, int K, void* alpha, void* A,
-                 int lda, void* X, int incX,
-                 void* beta, void* Y, int incY ) ;
-FUNCTION: void cblas_zhpmv ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 int N, void* alpha, void* Ap,
-                 void* X, int incX,
-                 void* beta, void* Y, int incY ) ;
-FUNCTION: void cblas_zgeru ( CBLAS_ORDER Order, int M, int N,
-                 void* alpha, void* X, int incX,
-                 void* Y, int incY, void* A, int lda ) ;
-FUNCTION: void cblas_zgerc ( CBLAS_ORDER Order, int M, int N,
-                 void* alpha, void* X, int incX,
-                 void* Y, int incY, void* A, int lda ) ;
-FUNCTION: void cblas_zher ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, double alpha, void* X, int incX,
-                void* A, int lda ) ;
-FUNCTION: void cblas_zhpr ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                int N, double alpha, void* X,
-                int incX, void* A ) ;
-FUNCTION: void cblas_zher2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo, int N,
-                void* alpha, void* X, int incX,
-                void* Y, int incY, void* A, int lda ) ;
-FUNCTION: void cblas_zhpr2 ( CBLAS_ORDER Order, CBLAS_UPLO Uplo, int N,
-                void* alpha, void* X, int incX,
-                void* Y, int incY, void* Ap ) ;
-
-! Level 3 BLAS (matrix-matrix) 
-
-FUNCTION: void cblas_sgemm ( CBLAS_ORDER Order, CBLAS_TRANSPOSE TransA,
-                 CBLAS_TRANSPOSE TransB, int M, int N,
-                 int K, float alpha, float* A,
-                 int lda, float* B, int ldb,
-                 float beta, float* C, int ldc ) ;
-FUNCTION: void cblas_ssymm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, int M, int N,
-                 float alpha, float* A, int lda,
-                 float* B, int ldb, float beta,
-                 float* C, int ldc ) ;
-FUNCTION: void cblas_ssyrk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE Trans, int N, int K,
-                 float alpha, float* A, int lda,
-                 float beta, float* C, int ldc ) ;
-FUNCTION: void cblas_ssyr2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                  CBLAS_TRANSPOSE Trans, int N, int K,
-                  float alpha, float* A, int lda,
-                  float* B, int ldb, float beta,
-                  float* C, int ldc ) ;
-FUNCTION: void cblas_strmm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
-                 CBLAS_DIAG Diag, int M, int N,
-                 float alpha, float* A, int lda,
-                 float* B, int ldb ) ;
-FUNCTION: void cblas_strsm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
-                 CBLAS_DIAG Diag, int M, int N,
-                 float alpha, float* A, int lda,
-                 float* B, int ldb ) ;
-
-FUNCTION: void cblas_dgemm ( CBLAS_ORDER Order, CBLAS_TRANSPOSE TransA,
-                 CBLAS_TRANSPOSE TransB, int M, int N,
-                 int K, double alpha, double* A,
-                 int lda, double* B, int ldb,
-                 double beta, double* C, int ldc ) ;
-FUNCTION: void cblas_dsymm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, int M, int N,
-                 double alpha, double* A, int lda,
-                 double* B, int ldb, double beta,
-                 double* C, int ldc ) ;
-FUNCTION: void cblas_dsyrk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE Trans, int N, int K,
-                 double alpha, double* A, int lda,
-                 double beta, double* C, int ldc ) ;
-FUNCTION: void cblas_dsyr2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                  CBLAS_TRANSPOSE Trans, int N, int K,
-                  double alpha, double* A, int lda,
-                  double* B, int ldb, double beta,
-                  double* C, int ldc ) ;
-FUNCTION: void cblas_dtrmm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
-                 CBLAS_DIAG Diag, int M, int N,
-                 double alpha, double* A, int lda,
-                 double* B, int ldb ) ;
-FUNCTION: void cblas_dtrsm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
-                 CBLAS_DIAG Diag, int M, int N,
-                 double alpha, double* A, int lda,
-                 double* B, int ldb ) ;
-
-FUNCTION: void cblas_cgemm ( CBLAS_ORDER Order, CBLAS_TRANSPOSE TransA,
-                 CBLAS_TRANSPOSE TransB, int M, int N,
-                 int K, void* alpha, void* A,
-                 int lda, void* B, int ldb,
-                 void* beta, void* C, int ldc ) ;
-FUNCTION: void cblas_csymm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* B, int ldb, void* beta,
-                 void* C, int ldc ) ;
-FUNCTION: void cblas_csyrk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE Trans, int N, int K,
-                 void* alpha, void* A, int lda,
-                 void* beta, void* C, int ldc ) ;
-FUNCTION: void cblas_csyr2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                  CBLAS_TRANSPOSE Trans, int N, int K,
-                  void* alpha, void* A, int lda,
-                  void* B, int ldb, void* beta,
-                  void* C, int ldc ) ;
-FUNCTION: void cblas_ctrmm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
-                 CBLAS_DIAG Diag, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* B, int ldb ) ;
-FUNCTION: void cblas_ctrsm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
-                 CBLAS_DIAG Diag, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* B, int ldb ) ;
-
-FUNCTION: void cblas_zgemm ( CBLAS_ORDER Order, CBLAS_TRANSPOSE TransA,
-                 CBLAS_TRANSPOSE TransB, int M, int N,
-                 int K, void* alpha, void* A,
-                 int lda, void* B, int ldb,
-                 void* beta, void* C, int ldc ) ;
-FUNCTION: void cblas_zsymm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* B, int ldb, void* beta,
-                 void* C, int ldc ) ;
-FUNCTION: void cblas_zsyrk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE Trans, int N, int K,
-                 void* alpha, void* A, int lda,
-                 void* beta, void* C, int ldc ) ;
-FUNCTION: void cblas_zsyr2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                  CBLAS_TRANSPOSE Trans, int N, int K,
-                  void* alpha, void* A, int lda,
-                  void* B, int ldb, void* beta,
-                  void* C, int ldc ) ;
-FUNCTION: void cblas_ztrmm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
-                 CBLAS_DIAG Diag, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* B, int ldb ) ;
-FUNCTION: void cblas_ztrsm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA,
-                 CBLAS_DIAG Diag, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* B, int ldb ) ;
-
-FUNCTION: void cblas_chemm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* B, int ldb, void* beta,
-                 void* C, int ldc ) ;
-FUNCTION: void cblas_cherk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE Trans, int N, int K,
-                 float alpha, void* A, int lda,
-                 float beta, void* C, int ldc ) ;
-FUNCTION: void cblas_cher2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                  CBLAS_TRANSPOSE Trans, int N, int K,
-                  void* alpha, void* A, int lda,
-                  void* B, int ldb, float beta,
-                  void* C, int ldc ) ;
-FUNCTION: void cblas_zhemm ( CBLAS_ORDER Order, CBLAS_SIDE Side,
-                 CBLAS_UPLO Uplo, int M, int N,
-                 void* alpha, void* A, int lda,
-                 void* B, int ldb, void* beta,
-                 void* C, int ldc ) ;
-FUNCTION: void cblas_zherk ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                 CBLAS_TRANSPOSE Trans, int N, int K,
-                 double alpha, void* A, int lda,
-                 double beta, void* C, int ldc ) ;
-FUNCTION: void cblas_zher2k ( CBLAS_ORDER Order, CBLAS_UPLO Uplo,
-                  CBLAS_TRANSPOSE Trans, int N, int K,
-                  void* alpha, void* A, int lda,
-                  void* B, int ldb, double beta,
-                  void* C, int ldc ) ;
-
diff --git a/extra/math/blas/cblas/summary.txt b/extra/math/blas/cblas/summary.txt
deleted file mode 100644 (file)
index c72e78e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Low-level bindings to the C Basic Linear Algebra Subroutines (BLAS) library
diff --git a/extra/math/blas/cblas/tags.txt b/extra/math/blas/cblas/tags.txt
deleted file mode 100644 (file)
index 5118958..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-math
-bindings
-unportable
diff --git a/extra/math/blas/matrices/authors.txt b/extra/math/blas/matrices/authors.txt
deleted file mode 100644 (file)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/math/blas/matrices/matrices-docs.factor b/extra/math/blas/matrices/matrices-docs.factor
deleted file mode 100644 (file)
index 01e0997..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-USING: alien byte-arrays help.markup help.syntax math math.blas.vectors sequences strings ;
-IN: math.blas.matrices
-
-ARTICLE: "math.blas-summary" "Basic Linear Algebra Subroutines (BLAS) interface"
-"Factor provides an interface to high-performance vector and matrix math routines available in the system's BLAS library. A set of specialized types are provided for handling packed, unboxed vector data:"
-{ $subsection "math.blas-types" }
-"Scalar-vector and vector-vector operations are available in the " { $vocab-link "math.blas.vectors" } " vocabulary:"
-{ $subsection "math.blas.vectors" }
-"Vector-matrix and matrix-matrix operations are available in the " { $vocab-link "math.blas.matrices" } " vocabulary:"
-{ $subsection "math.blas.matrices" }
-"The low-level BLAS C interface can be accessed directly through the " { $vocab-link "math.blas.cblas" } " vocabulary." ;
-
-ARTICLE: "math.blas-types" "BLAS interface types"
-"BLAS vectors come in single- and double-precision, real and complex flavors:"
-{ $subsection float-blas-vector }
-{ $subsection double-blas-vector }
-{ $subsection float-complex-blas-vector }
-{ $subsection double-complex-blas-vector }
-"These vector types all follow the " { $link sequence } " protocol. In addition, there are corresponding types for matrix data:"
-{ $subsection float-blas-matrix }
-{ $subsection double-blas-matrix }
-{ $subsection float-complex-blas-matrix }
-{ $subsection double-complex-blas-matrix } 
-"Syntax words are provided for constructing literal vectors and matrices in the " { $vocab-link "math.blas.syntax" } " vocabulary:"
-{ $subsection "math.blas.syntax" }
-"There are BOA constructors for all vector and matrix types, which provide the most flexibility in specifying memory layout:"
-{ $subsection <float-blas-vector> }
-{ $subsection <double-blas-vector> }
-{ $subsection <float-complex-blas-vector> }
-{ $subsection <double-complex-blas-vector> }
-{ $subsection <float-blas-matrix> }
-{ $subsection <double-blas-matrix> }
-{ $subsection <float-complex-blas-matrix> }
-{ $subsection <double-complex-blas-matrix> }
-"For the simple case of creating a dense, zero-filled vector or matrix, simple empty object constructors are provided:"
-{ $subsection <empty-vector> }
-{ $subsection <empty-matrix> }
-"BLAS vectors and matrices can also be constructed from other Factor sequences:"
-{ $subsection >float-blas-vector }
-{ $subsection >double-blas-vector }
-{ $subsection >float-complex-blas-vector }
-{ $subsection >double-complex-blas-vector }
-{ $subsection >float-blas-matrix }
-{ $subsection >double-blas-matrix }
-{ $subsection >float-complex-blas-matrix }
-{ $subsection >double-complex-blas-matrix } ;
-
-ARTICLE: "math.blas.matrices" "BLAS interface matrix operations"
-"Transposing and slicing matrices:"
-{ $subsection Mtranspose }
-{ $subsection Mrows }
-{ $subsection Mcols }
-{ $subsection Msub }
-"Matrix-vector products:"
-{ $subsection n*M.V+n*V! }
-{ $subsection n*M.V+n*V }
-{ $subsection n*M.V }
-{ $subsection M.V }
-"Vector outer products:"
-{ $subsection n*V(*)V+M! }
-{ $subsection n*V(*)Vconj+M! }
-{ $subsection n*V(*)V+M }
-{ $subsection n*V(*)Vconj+M }
-{ $subsection n*V(*)V }
-{ $subsection n*V(*)Vconj }
-{ $subsection V(*) }
-{ $subsection V(*)conj }
-"Matrix products:"
-{ $subsection n*M.M+n*M! }
-{ $subsection n*M.M+n*M }
-{ $subsection n*M.M }
-{ $subsection M. }
-"Scalar-matrix products:"
-{ $subsection n*M! }
-{ $subsection n*M }
-{ $subsection M*n }
-{ $subsection M/n } ;
-
-ABOUT: "math.blas.matrices"
-
-HELP: blas-matrix-base
-{ $class-description "The base class for all BLAS matrix types. Objects of this type should not be created directly; instead, instantiate one of the typed subclasses:"
-{ $list
-    { { $link float-blas-matrix } }
-    { { $link double-blas-matrix } }
-    { { $link float-complex-blas-matrix } }
-    { { $link double-complex-blas-matrix } }
-}
-"All of these subclasses share the same tuple layout:"
-{ $list
-    { { $snippet "underlying" } " contains an alien pointer referencing or byte-array containing a packed, column-major array of float, double, float complex, or double complex values;" }
-    { { $snippet "ld" } " indicates the distance, in elements, between matrix columns;" }
-    { { $snippet "rows" } " and " { $snippet "cols" } " indicate the number of significant rows and columns in the matrix;" }
-    { "and " { $snippet "transpose" } ", if set to a true value, indicates that the matrix should be treated as transposed relative to its in-memory representation." }
-} } ;
-
-{ blas-vector-base blas-matrix-base } related-words
-
-HELP: float-blas-matrix
-{ $class-description "A matrix of single-precision floating-point values. For details on the tuple layout, see " { $link blas-matrix-base } "." } ;
-HELP: double-blas-matrix
-{ $class-description "A matrix of double-precision floating-point values. For details on the tuple layout, see " { $link blas-matrix-base } "." } ;
-HELP: float-complex-blas-matrix
-{ $class-description "A matrix of single-precision floating-point complex values. Complex values are stored in memory as two consecutive float values, real part then imaginary part. For details on the tuple layout, see " { $link blas-matrix-base } "." } ;
-HELP: double-complex-blas-matrix
-{ $class-description "A matrix of double-precision floating-point complex values. Complex values are stored in memory as two consecutive float values, real part then imaginary part. For details on the tuple layout, see " { $link blas-matrix-base } "." } ;
-
-{
-    float-blas-matrix double-blas-matrix float-complex-blas-matrix double-complex-blas-matrix
-    float-blas-vector double-blas-vector float-complex-blas-vector double-complex-blas-vector
-} related-words
-
-HELP: Mwidth
-{ $values { "matrix" blas-matrix-base } { "width" integer } }
-{ $description "Returns the number of columns in " { $snippet "matrix" } "." } ;
-
-HELP: Mheight
-{ $values { "matrix" blas-matrix-base } { "height" integer } }
-{ $description "Returns the number of rows in " { $snippet "matrix" } "." } ;
-
-{ Mwidth Mheight } related-words
-
-HELP: n*M.V+n*V!
-{ $values { "alpha" number } { "A" blas-matrix-base } { "x" blas-vector-base } { "beta" number } { "y" blas-vector-base } { "y=alpha*A.x+b*y" blas-vector-base } }
-{ $description "Calculate the matrix-vector product " { $snippet "αAx + βy" } ", and overwrite the current contents of " { $snippet "y" } " with the result. The width of " { $snippet "A" } " must match the length of " { $snippet "x" } ", and the height must match the length of " { $snippet "y" } ". Corresponds to the xGEMV routines in BLAS." }
-{ $side-effects "y" } ;
-
-HELP: n*V(*)V+M!
-{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "A" blas-matrix-base } { "A=alpha*x(*)y+A" blas-matrix-base } }
-{ $description "Calculate the outer product " { $snippet "αx⊗y + A" } " and overwrite the current contents of A with the result. The width of " { $snippet "A" } " must match the length of " { $snippet "y" } ", and its height must match the length of " { $snippet "x" } ". Corresponds to the xGER and xGERU routines in BLAS." }
-{ $side-effects "A" } ;
-
-HELP: n*V(*)Vconj+M!
-{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "A" blas-matrix-base } { "A=alpha*x(*)yconj+A" blas-matrix-base } }
-{ $description "Calculate the conjugate outer product " { $snippet "αx⊗y̅ + A" } " and overwrite the current contents of A with the result. The width of " { $snippet "A" } " must match the length of " { $snippet "y" } ", and its height must match the length of " { $snippet "x" } ". Corresponds to the xGERC routines in BLAS." }
-{ $side-effects "A" } ;
-
-HELP: n*M.M+n*M!
-{ $values { "alpha" number } { "A" blas-matrix-base } { "B" blas-matrix-base } { "beta" number } { "C" blas-matrix-base } { "C=alpha*A.B+beta*C" blas-matrix-base } }
-{ $description "Calculate the matrix product " { $snippet "αAB + βC" } " and overwrite the current contents of C with the result. The width of " { $snippet "A" } " and the height of " { $snippet "B" } " must match, as must the heights of " { $snippet "A" } " and " { $snippet "C" } ", and the widths of " { $snippet "B" } " and " { $snippet "C" } ". Corresponds to the xGEMM routines in BLAS." }
-{ $side-effects "C" } ;
-
-HELP: <empty-matrix>
-{ $values { "rows" integer } { "cols" integer } { "exemplar" blas-vector-base blas-matrix-base } { "matrix" blas-matrix-base } }
-{ $description "Create a matrix of all zeros with the given dimensions and the same element type as " { $snippet "exemplar" } "." } ;
-
-{ <zero-vector> <empty-vector> <empty-matrix> } related-words
-
-HELP: n*M.V+n*V
-{ $values { "alpha" number } { "A" blas-matrix-base } { "x" blas-vector-base } { "beta" number } { "y" blas-vector-base } { "alpha*A.x+b*y" blas-vector-base } }
-{ $description "Calculate the matrix-vector product " { $snippet "αAx + βy" } " and return a freshly allocated vector containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "x" } ", and the height must match the length of " { $snippet "y" } ". The returned vector will have the same length as " { $snippet "y" } ". Corresponds to the xGEMV routines in BLAS." } ;
-
-HELP: n*V(*)V+M
-{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "A" blas-matrix-base } { "alpha*x(*)y+A" blas-matrix-base } }
-{ $description "Calculate the outer product " { $snippet "αx⊗y + A" } " and return a freshly allocated matrix containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "y" } ", and its height must match the length of " { $snippet "x" } ". The returned matrix will have the same dimensions as " { $snippet "A" } ". Corresponds to the xGER and xGERU routines in BLAS." } ;
-
-HELP: n*V(*)Vconj+M
-{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "A" blas-matrix-base } { "alpha*x(*)yconj+A" blas-matrix-base } }
-{ $description "Calculate the conjugate outer product " { $snippet "αx⊗y̅ + A" } " and return a freshly allocated matrix containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "y" } ", and its height must match the length of " { $snippet "x" } ". The returned matrix will have the same dimensions as " { $snippet "A" } ". Corresponds to the xGERC routines in BLAS." } ;
-
-HELP: n*M.M+n*M
-{ $values { "alpha" number } { "A" blas-matrix-base } { "B" blas-matrix-base } { "beta" number } { "C" blas-matrix-base } { "alpha*A.B+beta*C" blas-matrix-base } }
-{ $description "Calculate the matrix product " { $snippet "αAB + βC" } " and overwrite the current contents of C with the result. The width of " { $snippet "A" } " and the height of " { $snippet "B" } " must match, as must the heights of " { $snippet "A" } " and " { $snippet "C" } ", and the widths of " { $snippet "B" } " and " { $snippet "C" } ". Corresponds to the xGEMM routines in BLAS." } ;
-
-HELP: n*M.V
-{ $values { "alpha" number } { "A" blas-matrix-base } { "x" blas-vector-base } { "alpha*A.x" blas-vector-base } }
-{ $description "Calculate the matrix-vector product " { $snippet "αAx" } " and return a freshly allocated vector containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "x" } ". The length of the returned vector will match the height of " { $snippet "A" } ". Corresponds to the xGEMV routines in BLAS." } ;
-
-HELP: M.V
-{ $values { "A" blas-matrix-base } { "x" blas-vector-base } { "A.x" blas-vector-base } }
-{ $description "Calculate the matrix-vector product " { $snippet "Ax" } " and return a freshly allocated vector containing the result. The width of " { $snippet "A" } " must match the length of " { $snippet "x" } ". The length of the returned vector will match the height of " { $snippet "A" } ". Corresponds to the xGEMV routines in BLAS." } ;
-
-{ n*M.V+n*V! n*M.V+n*V n*M.V M.V } related-words
-
-HELP: n*V(*)V
-{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "alpha*x(*)y" blas-matrix-base } }
-{ $description "Calculate the outer product " { $snippet "αx⊗y" } " and return a freshly allocated matrix containing the result. The returned matrix's height will match the length of " { $snippet "x" } ", and its width will match the length of " { $snippet "y" } ". Corresponds to the xGER and xGERU routines in BLAS." } ;
-
-HELP: n*V(*)Vconj
-{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "alpha*x(*)yconj" blas-matrix-base } }
-{ $description "Calculate the outer product " { $snippet "αx⊗y̅" } " and return a freshly allocated matrix containing the result. The returned matrix's height will match the length of " { $snippet "x" } ", and its width will match the length of " { $snippet "y" } ". Corresponds to the xGERC routines in BLAS." } ;
-
-HELP: V(*)
-{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x(*)y" blas-matrix-base } }
-{ $description "Calculate the outer product " { $snippet "x⊗y" } " and return a freshly allocated matrix containing the result. The returned matrix's height will match the length of " { $snippet "x" } ", and its width will match the length of " { $snippet "y" } ". Corresponds to the xGER and xGERU routines in BLAS." } ;
-
-HELP: V(*)conj
-{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x(*)yconj" blas-matrix-base } }
-{ $description "Calculate the conjugate outer product " { $snippet "x⊗y̅" } " and return a freshly allocated matrix containing the result. The returned matrix's height will match the length of " { $snippet "x" } ", and its width will match the length of " { $snippet "y" } ". Corresponds to the xGERC routines in BLAS." } ;
-
-{ n*V(*)V+M! n*V(*)Vconj+M! n*V(*)V+M n*V(*)Vconj+M n*V(*)V n*V(*)Vconj V(*) V(*)conj V. V.conj } related-words
-
-HELP: n*M.M
-{ $values { "alpha" number } { "A" blas-matrix-base } { "B" blas-matrix-base } { "alpha*A.B" blas-matrix-base } }
-{ $description "Calculate the matrix product " { $snippet "αAB" } " and return a freshly allocated matrix containing the result. The width of " { $snippet "A" } " and the height of " { $snippet "B" } " must match. The returned matrix's height will be the same as " { $snippet "A" } "'s, and its width will match " { $snippet "B" } "'s. Corresponds to the xGEMM routines in BLAS." } ;
-
-HELP: M.
-{ $values { "A" blas-matrix-base } { "B" blas-matrix-base } { "A.B" blas-matrix-base } }
-{ $description "Calculate the matrix product " { $snippet "AB" } " and return a freshly allocated matrix containing the result. The width of " { $snippet "A" } " and the height of " { $snippet "B" } " must match. The returned matrix's height will be the same as " { $snippet "A" } "'s, and its width will match " { $snippet "B" } "'s. Corresponds to the xGEMM routines in BLAS." } ;
-
-{ n*M.M+n*M! n*M.M+n*M n*M.M M. } related-words
-
-HELP: Msub
-{ $values { "matrix" blas-matrix-base } { "row" integer } { "col" integer } { "height" integer } { "width" integer } { "sub" blas-matrix-base } }
-{ $description "Select a rectangular submatrix of " { $snippet "matrix" } " with the given dimensions. The returned submatrix will share the parent matrix's storage." } ;
-
-HELP: Mrows
-{ $values { "A" blas-matrix-base } { "rows" sequence } }
-{ $description "Return a sequence of BLAS vectors representing the rows of " { $snippet "matrix" } ". Each vector will share the parent matrix's storage." } ;
-
-HELP: Mcols
-{ $values { "A" blas-matrix-base } { "cols" sequence } }
-{ $description "Return a sequence of BLAS vectors representing the columns of " { $snippet "matrix" } ". Each vector will share the parent matrix's storage." } ;
-
-HELP: n*M!
-{ $values { "n" number } { "A" blas-matrix-base } { "A=n*A" blas-matrix-base } }
-{ $description "Calculate the scalar-matrix product " { $snippet "nA" } " and overwrite the current contents of A with the result." }
-{ $side-effects "A" } ;
-
-HELP: n*M
-{ $values { "n" number } { "A" blas-matrix-base } { "n*A" blas-matrix-base } }
-{ $description "Calculate the scalar-matrix product " { $snippet "nA" } " and return a freshly allocated matrix with the same dimensions as " { $snippet "A" } " containing the result." } ;
-
-HELP: M*n
-{ $values { "A" blas-matrix-base } { "n" number } { "A*n" blas-matrix-base } }
-{ $description "Calculate the scalar-matrix product " { $snippet "nA" } " and return a freshly allocated matrix with the same dimensions as " { $snippet "A" } " containing the result." } ;
-
-HELP: M/n
-{ $values { "A" blas-matrix-base } { "n" number } { "A/n" blas-matrix-base } }
-{ $description "Calculate the scalar-matrix product " { $snippet "(1/n)A" } " and return a freshly allocated matrix with the same dimensions as " { $snippet "A" } " containing the result." } ;
-
-{ n*M! n*M M*n M/n } related-words
-
-HELP: Mtranspose
-{ $values { "matrix" blas-matrix-base } { "matrix^T" blas-matrix-base } }
-{ $description "Returns the transpose of " { $snippet "matrix" } ". The returned matrix shares storage with the original matrix." } ;
-
-HELP: element-type
-{ $values { "v" blas-vector-base blas-matrix-base } { "type" string } }
-{ $description "Return the C type of the elements in the given BLAS vector or matrix." } ;
-
-HELP: <empty-vector>
-{ $values { "length" "The length of the new vector" } { "exemplar" blas-vector-base blas-matrix-base } { "vector" blas-vector-base } }
-{ $description "Return a vector of zeros with the given " { $snippet "length" } " and the same element type as " { $snippet "v" } "." } ;
-
diff --git a/extra/math/blas/matrices/matrices-tests.factor b/extra/math/blas/matrices/matrices-tests.factor
deleted file mode 100644 (file)
index dabf3c3..0000000
+++ /dev/null
@@ -1,710 +0,0 @@
-USING: kernel math.blas.matrices math.blas.vectors math.blas.syntax
-sequences tools.test ;
-IN: math.blas.matrices.tests
-
-! clone
-
-[ smatrix{
-    { 1.0 2.0 3.0 }
-    { 4.0 5.0 6.0 }
-    { 7.0 8.0 9.0 }
-} ] [
-    smatrix{
-        { 1.0 2.0 3.0 }
-        { 4.0 5.0 6.0 }
-        { 7.0 8.0 9.0 }
-    } clone
-] unit-test
-[ f ] [
-    smatrix{
-        { 1.0 2.0 3.0 }
-        { 4.0 5.0 6.0 }
-        { 7.0 8.0 9.0 }
-    } dup clone eq?
-] unit-test
-
-[ dmatrix{
-    { 1.0 2.0 3.0 }
-    { 4.0 5.0 6.0 }
-    { 7.0 8.0 9.0 }
-} ] [
-    dmatrix{
-        { 1.0 2.0 3.0 }
-        { 4.0 5.0 6.0 }
-        { 7.0 8.0 9.0 }
-    } clone
-] unit-test
-[ f ] [
-    dmatrix{
-        { 1.0 2.0 3.0 }
-        { 4.0 5.0 6.0 }
-        { 7.0 8.0 9.0 }
-    } dup clone eq?
-] unit-test
-
-[ cmatrix{
-    { C{ 1.0 1.0 } 2.0          3.0          }
-    { 4.0          C{ 5.0 2.0 } 6.0          }
-    { 7.0          8.0          C{ 9.0 3.0 } }
-} ] [
-    cmatrix{
-        { C{ 1.0 1.0 } 2.0          3.0          }
-        { 4.0          C{ 5.0 2.0 } 6.0          }
-        { 7.0          8.0          C{ 9.0 3.0 } }
-    } clone
-] unit-test
-[ f ] [
-    cmatrix{
-        { C{ 1.0 1.0 } 2.0          3.0          }
-        { 4.0          C{ 5.0 2.0 } 6.0          }
-        { 7.0          8.0          C{ 9.0 3.0 } }
-    } dup clone eq?
-] unit-test
-
-[ zmatrix{
-    { C{ 1.0 1.0 } 2.0          3.0          }
-    { 4.0          C{ 5.0 2.0 } 6.0          }
-    { 7.0          8.0          C{ 9.0 3.0 } }
-} ] [
-    zmatrix{
-        { C{ 1.0 1.0 } 2.0          3.0          }
-        { 4.0          C{ 5.0 2.0 } 6.0          }
-        { 7.0          8.0          C{ 9.0 3.0 } }
-    } clone
-] unit-test
-[ f ] [
-    zmatrix{
-        { C{ 1.0 1.0 } 2.0          3.0          }
-        { 4.0          C{ 5.0 2.0 } 6.0          }
-        { 7.0          8.0          C{ 9.0 3.0 } }
-    } dup clone eq?
-] unit-test
-
-! M.V
-
-[ svector{ 3.0 1.0 6.0 } ] [
-    smatrix{
-        {  0.0 1.0 0.0 1.0 }
-        { -1.0 0.0 0.0 2.0 }
-        {  0.0 0.0 1.0 3.0 }
-    }
-    svector{ 1.0 2.0 3.0 1.0 }
-    M.V
-] unit-test 
-[ svector{ -2.0 1.0 3.0 14.0 } ] [
-    smatrix{
-        {  0.0 1.0 0.0 1.0 }
-        { -1.0 0.0 0.0 2.0 }
-        {  0.0 0.0 1.0 3.0 }
-    } Mtranspose
-    svector{ 1.0 2.0 3.0 }
-    M.V
-] unit-test 
-
-[ dvector{ 3.0 1.0 6.0 } ] [
-    dmatrix{
-        {  0.0 1.0 0.0 1.0 }
-        { -1.0 0.0 0.0 2.0 }
-        {  0.0 0.0 1.0 3.0 }
-    }
-    dvector{ 1.0 2.0 3.0 1.0 }
-    M.V
-] unit-test 
-[ dvector{ -2.0 1.0 3.0 14.0 } ] [
-    dmatrix{
-        {  0.0 1.0 0.0 1.0 }
-        { -1.0 0.0 0.0 2.0 }
-        {  0.0 0.0 1.0 3.0 }
-    } Mtranspose
-    dvector{ 1.0 2.0 3.0 }
-    M.V
-] unit-test 
-
-[ cvector{ 3.0 C{ 1.0 2.0 } 6.0 } ] [
-    cmatrix{
-        {  0.0 1.0          0.0 1.0 }
-        { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
-        {  0.0 0.0          1.0 3.0 }
-    }
-    cvector{ 1.0 2.0 3.0 1.0 }
-    M.V
-] unit-test 
-[ cvector{ -2.0 C{ 1.0 2.0 } 3.0 14.0 } ] [
-    cmatrix{
-        {  0.0 1.0          0.0 1.0 }
-        { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
-        {  0.0 0.0          1.0 3.0 }
-    } Mtranspose
-    cvector{ 1.0 2.0 3.0 }
-    M.V
-] unit-test 
-
-[ zvector{ 3.0 C{ 1.0 2.0 } 6.0 } ] [
-    zmatrix{
-        {  0.0 1.0          0.0 1.0 }
-        { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
-        {  0.0 0.0          1.0 3.0 }
-    }
-    zvector{ 1.0 2.0 3.0 1.0 }
-    M.V
-] unit-test
-[ zvector{ -2.0 C{ 1.0 2.0 } 3.0 14.0 } ] [
-    zmatrix{
-        {  0.0 1.0          0.0 1.0 }
-        { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
-        {  0.0 0.0          1.0 3.0 }
-    } Mtranspose
-    zvector{ 1.0 2.0 3.0 }
-    M.V
-] unit-test 
-
-! V(*)
-
-[ smatrix{
-    { 1.0 2.0 3.0  4.0 }
-    { 2.0 4.0 6.0  8.0 }
-    { 3.0 6.0 9.0 12.0 }
-} ] [
-    svector{ 1.0 2.0 3.0 } svector{ 1.0 2.0 3.0 4.0 } V(*)
-] unit-test
-
-[ dmatrix{
-    { 1.0 2.0 3.0  4.0 }
-    { 2.0 4.0 6.0  8.0 }
-    { 3.0 6.0 9.0 12.0 }
-} ] [
-    dvector{ 1.0 2.0 3.0 } dvector{ 1.0 2.0 3.0 4.0 } V(*)
-] unit-test
-
-[ cmatrix{
-    { 1.0          2.0          C{ 3.0 -3.0 } 4.0            }
-    { 2.0          4.0          C{ 6.0 -6.0 } 8.0            }
-    { C{ 3.0 3.0 } C{ 6.0 6.0 } 18.0          C{ 12.0 12.0 } }
-} ] [
-    cvector{ 1.0 2.0 C{ 3.0 3.0 } } cvector{ 1.0 2.0 C{ 3.0 -3.0 } 4.0 } V(*)
-] unit-test
-
-[ zmatrix{
-    { 1.0          2.0          C{ 3.0 -3.0 } 4.0            }
-    { 2.0          4.0          C{ 6.0 -6.0 } 8.0            }
-    { C{ 3.0 3.0 } C{ 6.0 6.0 } 18.0          C{ 12.0 12.0 } }
-} ] [
-    zvector{ 1.0 2.0 C{ 3.0 3.0 } } zvector{ 1.0 2.0 C{ 3.0 -3.0 } 4.0 } V(*)
-] unit-test
-
-! M.
-
-[ smatrix{
-    { 1.0 0.0  0.0 4.0  0.0 }
-    { 0.0 0.0 -3.0 0.0  0.0 }
-    { 0.0 4.0  0.0 0.0 10.0 }
-    { 0.0 0.0  0.0 0.0  0.0 }
-} ] [
-    smatrix{
-        { 1.0 0.0  0.0 }
-        { 0.0 0.0 -1.0 }
-        { 0.0 2.0  0.0 }
-        { 0.0 0.0  0.0 }
-    } smatrix{
-        { 1.0 0.0 0.0 4.0 0.0 }
-        { 0.0 2.0 0.0 0.0 5.0 }
-        { 0.0 0.0 3.0 0.0 0.0 }
-    } M.
-] unit-test
-
-[ smatrix{
-    { 1.0  0.0  0.0 0.0 }
-    { 0.0  0.0  4.0 0.0 }
-    { 0.0 -3.0  0.0 0.0 }
-    { 4.0  0.0  0.0 0.0 }
-    { 0.0  0.0 10.0 0.0 }
-} ] [
-    smatrix{
-        { 1.0 0.0 0.0 4.0 0.0 }
-        { 0.0 2.0 0.0 0.0 5.0 }
-        { 0.0 0.0 3.0 0.0 0.0 }
-    } Mtranspose smatrix{
-        { 1.0 0.0  0.0 }
-        { 0.0 0.0 -1.0 }
-        { 0.0 2.0  0.0 }
-        { 0.0 0.0  0.0 }
-    } Mtranspose M.
-] unit-test
-
-[ dmatrix{
-    { 1.0 0.0  0.0 4.0  0.0 }
-    { 0.0 0.0 -3.0 0.0  0.0 }
-    { 0.0 4.0  0.0 0.0 10.0 }
-    { 0.0 0.0  0.0 0.0  0.0 }
-} ] [
-    dmatrix{
-        { 1.0 0.0  0.0 }
-        { 0.0 0.0 -1.0 }
-        { 0.0 2.0  0.0 }
-        { 0.0 0.0  0.0 }
-    } dmatrix{
-        { 1.0 0.0 0.0 4.0 0.0 }
-        { 0.0 2.0 0.0 0.0 5.0 }
-        { 0.0 0.0 3.0 0.0 0.0 }
-    } M.
-] unit-test
-
-[ dmatrix{
-    { 1.0  0.0  0.0 0.0 }
-    { 0.0  0.0  4.0 0.0 }
-    { 0.0 -3.0  0.0 0.0 }
-    { 4.0  0.0  0.0 0.0 }
-    { 0.0  0.0 10.0 0.0 }
-} ] [
-    dmatrix{
-        { 1.0 0.0 0.0 4.0 0.0 }
-        { 0.0 2.0 0.0 0.0 5.0 }
-        { 0.0 0.0 3.0 0.0 0.0 }
-    } Mtranspose dmatrix{
-        { 1.0 0.0  0.0 }
-        { 0.0 0.0 -1.0 }
-        { 0.0 2.0  0.0 }
-        { 0.0 0.0  0.0 }
-    } Mtranspose M.
-] unit-test
-
-[ cmatrix{
-    { 1.0 0.0            0.0 4.0  0.0 }
-    { 0.0 0.0           -3.0 0.0  0.0 }
-    { 0.0 C{ 4.0 -4.0 }  0.0 0.0 10.0 }
-    { 0.0 0.0            0.0 0.0  0.0 }
-} ] [
-    cmatrix{
-        { 1.0 0.0  0.0 }
-        { 0.0 0.0 -1.0 }
-        { 0.0 2.0  0.0 }
-        { 0.0 0.0  0.0 }
-    } cmatrix{
-        { 1.0 0.0           0.0 4.0 0.0 }
-        { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
-        { 0.0 0.0           3.0 0.0 0.0 }
-    } M.
-] unit-test
-
-[ cmatrix{
-    { 1.0  0.0  0.0          0.0 }
-    { 0.0  0.0 C{ 4.0 -4.0 } 0.0 }
-    { 0.0 -3.0  0.0          0.0 }
-    { 4.0  0.0  0.0          0.0 }
-    { 0.0  0.0 10.0          0.0 }
-} ] [
-    cmatrix{
-        { 1.0 0.0           0.0 4.0 0.0 }
-        { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
-        { 0.0 0.0           3.0 0.0 0.0 }
-    } Mtranspose cmatrix{
-        { 1.0 0.0  0.0 }
-        { 0.0 0.0 -1.0 }
-        { 0.0 2.0  0.0 }
-        { 0.0 0.0  0.0 }
-    } Mtranspose M.
-] unit-test
-
-[ zmatrix{
-    { 1.0 0.0            0.0 4.0  0.0 }
-    { 0.0 0.0           -3.0 0.0  0.0 }
-    { 0.0 C{ 4.0 -4.0 }  0.0 0.0 10.0 }
-    { 0.0 0.0            0.0 0.0  0.0 }
-} ] [
-    zmatrix{
-        { 1.0 0.0  0.0 }
-        { 0.0 0.0 -1.0 }
-        { 0.0 2.0  0.0 }
-        { 0.0 0.0  0.0 }
-    } zmatrix{
-        { 1.0 0.0           0.0 4.0 0.0 }
-        { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
-        { 0.0 0.0           3.0 0.0 0.0 }
-    } M.
-] unit-test
-
-[ zmatrix{
-    { 1.0  0.0  0.0          0.0 }
-    { 0.0  0.0 C{ 4.0 -4.0 } 0.0 }
-    { 0.0 -3.0  0.0          0.0 }
-    { 4.0  0.0  0.0          0.0 }
-    { 0.0  0.0 10.0          0.0 }
-} ] [
-    zmatrix{
-        { 1.0 0.0           0.0 4.0 0.0 }
-        { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
-        { 0.0 0.0           3.0 0.0 0.0 }
-    } Mtranspose zmatrix{
-        { 1.0 0.0  0.0 }
-        { 0.0 0.0 -1.0 }
-        { 0.0 2.0  0.0 }
-        { 0.0 0.0  0.0 }
-    } Mtranspose M.
-] unit-test
-
-! n*M
-
-[ smatrix{
-    { 2.0 0.0 }
-    { 0.0 2.0 }
-} ] [
-    2.0 smatrix{
-        { 1.0 0.0 }
-        { 0.0 1.0 }
-    } n*M
-] unit-test
-
-[ dmatrix{
-    { 2.0 0.0 }
-    { 0.0 2.0 }
-} ] [
-    2.0 dmatrix{
-        { 1.0 0.0 }
-        { 0.0 1.0 }
-    } n*M
-] unit-test
-
-[ cmatrix{
-    { C{ 2.0 1.0 } 0.0           }
-    { 0.0          C{ -1.0 2.0 } }
-} ] [
-    C{ 2.0 1.0 } cmatrix{
-        { 1.0 0.0          }
-        { 0.0 C{ 0.0 1.0 } }
-    } n*M
-] unit-test
-
-[ zmatrix{
-    { C{ 2.0 1.0 } 0.0           }
-    { 0.0          C{ -1.0 2.0 } }
-} ] [
-    C{ 2.0 1.0 } zmatrix{
-        { 1.0 0.0          }
-        { 0.0 C{ 0.0 1.0 } }
-    } n*M
-] unit-test
-
-! Mrows, Mcols
-
-[ svector{ 3.0 3.0 3.0 } ] [
-    2 smatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mcols nth
-] unit-test
-[ svector{ 3.0 2.0 3.0 4.0 } ] [
-    2 smatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mrows nth
-] unit-test
-[ 3 ] [
-    smatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mrows length
-] unit-test
-[ 4 ] [
-    smatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mcols length
-] unit-test
-[ svector{ 3.0 3.0 3.0 } ] [
-    2 smatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mtranspose Mrows nth
-] unit-test
-[ svector{ 3.0 2.0 3.0 4.0 } ] [
-    2 smatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mtranspose Mcols nth
-] unit-test
-[ 3 ] [
-    smatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mtranspose Mcols length
-] unit-test
-[ 4 ] [
-    smatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mtranspose Mrows length
-] unit-test
-
-[ dvector{ 3.0 3.0 3.0 } ] [
-    2 dmatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mcols nth
-] unit-test
-[ dvector{ 3.0 2.0 3.0 4.0 } ] [
-    2 dmatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mrows nth
-] unit-test
-[ 3 ] [
-    dmatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mrows length
-] unit-test
-[ 4 ] [
-    dmatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mcols length
-] unit-test
-[ dvector{ 3.0 3.0 3.0 } ] [
-    2 dmatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mtranspose Mrows nth
-] unit-test
-[ dvector{ 3.0 2.0 3.0 4.0 } ] [
-    2 dmatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mtranspose Mcols nth
-] unit-test
-[ 3 ] [
-    dmatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mtranspose Mcols length
-] unit-test
-[ 4 ] [
-    dmatrix{
-        { 1.0 2.0 3.0 4.0 }
-        { 2.0 2.0 3.0 4.0 }
-        { 3.0 2.0 3.0 4.0 }
-    } Mtranspose Mrows length
-] unit-test
-
-[ cvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
-    2 cmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mcols nth
-] unit-test
-[ cvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
-    2 cmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mrows nth
-] unit-test
-[ 3 ] [
-    cmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mrows length
-] unit-test
-[ 4 ] [
-    cmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mcols length
-] unit-test
-[ cvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
-    2 cmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mtranspose Mrows nth
-] unit-test
-[ cvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
-    2 cmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mtranspose Mcols nth
-] unit-test
-[ 3 ] [
-    cmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mtranspose Mcols length
-] unit-test
-[ 4 ] [
-    cmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mtranspose Mrows length
-] unit-test
-
-[ zvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
-    2 zmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mcols nth
-] unit-test
-[ zvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
-    2 zmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mrows nth
-] unit-test
-[ 3 ] [
-    zmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mrows length
-] unit-test
-[ 4 ] [
-    zmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mcols length
-] unit-test
-[ zvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
-    2 zmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mtranspose Mrows nth
-] unit-test
-[ zvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
-    2 zmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mtranspose Mcols nth
-] unit-test
-[ 3 ] [
-    zmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mtranspose Mcols length
-] unit-test
-[ 4 ] [
-    zmatrix{
-        { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
-        { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
-        { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
-    } Mtranspose Mrows length
-] unit-test
-
-! Msub
-
-[ smatrix{
-    { 3.0 2.0 1.0 }
-    { 0.0 1.0 0.0 }
-} ] [
-    smatrix{
-        { 0.0 1.0 2.0 3.0 2.0 }
-        { 1.0 0.0 3.0 2.0 1.0 }
-        { 2.0 3.0 0.0 1.0 0.0 }
-    } 1 2 2 3 Msub
-] unit-test
-
-[ smatrix{
-    { 3.0 0.0 }
-    { 2.0 1.0 }
-    { 1.0 0.0 }
-} ] [
-    smatrix{
-        { 0.0 1.0 2.0 3.0 2.0 }
-        { 1.0 0.0 3.0 2.0 1.0 }
-        { 2.0 3.0 0.0 1.0 0.0 }
-    } Mtranspose 2 1 3 2 Msub
-] unit-test
-
-[ dmatrix{
-    { 3.0 2.0 1.0 }
-    { 0.0 1.0 0.0 }
-} ] [
-    dmatrix{
-        { 0.0 1.0 2.0 3.0 2.0 }
-        { 1.0 0.0 3.0 2.0 1.0 }
-        { 2.0 3.0 0.0 1.0 0.0 }
-    } 1 2 2 3 Msub
-] unit-test
-
-[ dmatrix{
-    { 3.0 0.0 }
-    { 2.0 1.0 }
-    { 1.0 0.0 }
-} ] [
-    dmatrix{
-        { 0.0 1.0 2.0 3.0 2.0 }
-        { 1.0 0.0 3.0 2.0 1.0 }
-        { 2.0 3.0 0.0 1.0 0.0 }
-    } Mtranspose 2 1 3 2 Msub
-] unit-test
-
-[ cmatrix{
-    { C{ 3.0 3.0 } 2.0 1.0 }
-    { 0.0          1.0 0.0 }
-} ] [
-    cmatrix{
-        { 0.0 1.0 2.0          3.0 2.0 }
-        { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
-        { 2.0 3.0 0.0          1.0 0.0 }
-    } 1 2 2 3 Msub
-] unit-test
-
-[ cmatrix{
-    { C{ 3.0 3.0 } 0.0 }
-    { 2.0          1.0 }
-    { 1.0          0.0 }
-} ] [
-    cmatrix{
-        { 0.0 1.0 2.0          3.0 2.0 }
-        { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
-        { 2.0 3.0 0.0          1.0 0.0 }
-    } Mtranspose 2 1 3 2 Msub
-] unit-test
-
-[ zmatrix{
-    { C{ 3.0 3.0 } 2.0 1.0 }
-    { 0.0          1.0 0.0 }
-} ] [
-    zmatrix{
-        { 0.0 1.0 2.0          3.0 2.0 }
-        { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
-        { 2.0 3.0 0.0          1.0 0.0 }
-    } 1 2 2 3 Msub
-] unit-test
-
-[ zmatrix{
-    { C{ 3.0 3.0 } 0.0 }
-    { 2.0          1.0 }
-    { 1.0          0.0 }
-} ] [
-    zmatrix{
-        { 0.0 1.0 2.0          3.0 2.0 }
-        { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
-        { 2.0 3.0 0.0          1.0 0.0 }
-    } Mtranspose 2 1 3 2 Msub
-] unit-test
-
diff --git a/extra/math/blas/matrices/matrices.factor b/extra/math/blas/matrices/matrices.factor
deleted file mode 100755 (executable)
index c8a4ee6..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-USING: accessors alien alien.c-types arrays byte-arrays combinators
-combinators.short-circuit fry kernel locals macros
-math math.blas.cblas math.blas.vectors math.blas.vectors.private
-math.complex math.functions math.order functors words
-sequences sequences.merged sequences.private shuffle symbols
-specialized-arrays.direct.float specialized-arrays.direct.double
-specialized-arrays.float specialized-arrays.double ;
-IN: math.blas.matrices
-
-TUPLE: blas-matrix-base underlying ld rows cols transpose ;
-
-: Mtransposed? ( matrix -- ? )
-    transpose>> ; inline
-: Mwidth ( matrix -- width )
-    dup Mtransposed? [ rows>> ] [ cols>> ] if ; inline
-: Mheight ( matrix -- height )
-    dup Mtransposed? [ cols>> ] [ rows>> ] if ; inline
-
-GENERIC: n*M.V+n*V! ( alpha A x beta y -- y=alpha*A.x+b*y )
-GENERIC: n*V(*)V+M! ( alpha x y A -- A=alpha*x(*)y+A )
-GENERIC: n*V(*)Vconj+M! ( alpha x y A -- A=alpha*x(*)yconj+A )
-GENERIC: n*M.M+n*M! ( alpha A B beta C -- C=alpha*A.B+beta*C )
-
-<PRIVATE
-
-: (blas-transpose) ( matrix -- integer )
-    transpose>> [ CblasTrans ] [ CblasNoTrans ] if ;
-
-GENERIC: (blas-matrix-like) ( data ld rows cols transpose exemplar -- matrix )
-
-: (validate-gemv) ( A x y -- )
-    {
-        [ drop [ Mwidth  ] [ length>> ] bi* = ]
-        [ nip  [ Mheight ] [ length>> ] bi* = ]
-    } 3&&
-    [ "Mismatched matrix and vectors in matrix-vector multiplication" throw ]
-    unless ;
-
-:: (prepare-gemv)
-    ( alpha A x beta y >c-arg -- order A-trans m n alpha A-data A-ld x-data x-inc beta y-data y-inc
-                                 y )
-    A x y (validate-gemv)
-    CblasColMajor
-    A (blas-transpose)
-    A rows>>
-    A cols>>
-    alpha >c-arg call
-    A underlying>>
-    A ld>>
-    x underlying>>
-    x inc>>
-    beta >c-arg call
-    y underlying>>
-    y inc>>
-    y ; inline
-
-: (validate-ger) ( x y A -- )
-    {
-        [ nip  [ length>> ] [ Mheight ] bi* = ]
-        [ nipd [ length>> ] [ Mwidth  ] bi* = ]
-    } 3&&
-    [ "Mismatched vertices and matrix in vector outer product" throw ]
-    unless ;
-
-:: (prepare-ger)
-    ( alpha x y A >c-arg -- order m n alpha x-data x-inc y-data y-inc A-data A-ld
-                            A )
-    x y A (validate-ger)
-    CblasColMajor
-    A rows>>
-    A cols>>
-    alpha >c-arg call
-    x underlying>>
-    x inc>>
-    y underlying>>
-    y inc>>
-    A underlying>>
-    A ld>>
-    A f >>transpose ; inline
-
-: (validate-gemm) ( A B C -- )
-    {
-        [ drop [ Mwidth  ] [ Mheight ] bi* = ]
-        [ nip  [ Mheight ] bi@ = ]
-        [ nipd [ Mwidth  ] bi@ = ]
-    } 3&&
-    [ "Mismatched matrices in matrix multiplication" throw ]
-    unless ;
-
-:: (prepare-gemm)
-    ( alpha A B beta C >c-arg -- order A-trans B-trans m n k alpha A-data A-ld B-data B-ld beta C-data C-ld
-                                 C )
-    A B C (validate-gemm)
-    CblasColMajor
-    A (blas-transpose)
-    B (blas-transpose)
-    C rows>>
-    C cols>>
-    A Mwidth
-    alpha >c-arg call
-    A underlying>>
-    A ld>>
-    B underlying>>
-    B ld>>
-    beta >c-arg call
-    C underlying>>
-    C ld>>
-    C f >>transpose ; inline
-
-: (>matrix) ( arrays >c-array -- c-array ld rows cols transpose )
-    '[ <merged> @ ] [ length dup ] [ first length ] tri f ; inline
-
-PRIVATE>
-
-! XXX should do a dense clone
-M: blas-matrix-base clone
-    [ 
-        [ {
-            [ underlying>> ]
-            [ ld>> ]
-            [ cols>> ]
-            [ element-type heap-size ]
-        } cleave * * memory>byte-array ]
-        [ {
-            [ ld>> ]
-            [ rows>> ]
-            [ cols>> ]
-            [ transpose>> ]
-        } cleave ]
-        bi
-    ] keep (blas-matrix-like) ;
-
-! XXX try rounding stride to next 128 bit bound for better vectorizin'
-: <empty-matrix> ( rows cols exemplar -- matrix )
-    [ element-type [ * ] dip <c-array> ]
-    [ 2drop ]
-    [ f swap (blas-matrix-like) ] 3tri ;
-
-: n*M.V+n*V ( alpha A x beta y -- alpha*A.x+b*y )
-    clone n*M.V+n*V! ;
-: n*V(*)V+M ( alpha x y A -- alpha*x(*)y+A )
-    clone n*V(*)V+M! ;
-: n*V(*)Vconj+M ( alpha x y A -- alpha*x(*)yconj+A )
-    clone n*V(*)Vconj+M! ;
-: n*M.M+n*M ( alpha A B beta C -- alpha*A.B+beta*C )
-    clone n*M.M+n*M! ;
-
-: n*M.V ( alpha A x -- alpha*A.x )
-    1.0 2over [ Mheight ] dip <empty-vector>
-    n*M.V+n*V! ; inline
-
-: M.V ( A x -- A.x )
-    1.0 -rot n*M.V ; inline
-
-: n*V(*)V ( alpha x y -- alpha*x(*)y )
-    2dup [ length>> ] bi@ pick <empty-matrix>
-    n*V(*)V+M! ;
-: n*V(*)Vconj ( alpha x y -- alpha*x(*)yconj )
-    2dup [ length>> ] bi@ pick <empty-matrix>
-    n*V(*)Vconj+M! ;
-
-: V(*) ( x y -- x(*)y )
-    1.0 -rot n*V(*)V ; inline
-: V(*)conj ( x y -- x(*)yconj )
-    1.0 -rot n*V(*)Vconj ; inline
-
-: n*M.M ( alpha A B -- alpha*A.B )
-    2dup [ Mheight ] [ Mwidth ] bi* pick <empty-matrix> 
-    1.0 swap n*M.M+n*M! ;
-
-: M. ( A B -- A.B )
-    1.0 -rot n*M.M ; inline
-
-:: (Msub) ( matrix row col height width -- data ld rows cols )
-    matrix ld>> col * row + matrix element-type heap-size *
-    matrix underlying>> <displaced-alien>
-    matrix ld>>
-    height
-    width ;
-
-:: Msub ( matrix row col height width -- sub )
-    matrix dup transpose>>
-    [ col row width height ]
-    [ row col height width ] if (Msub)
-    matrix transpose>> matrix (blas-matrix-like) ;
-
-TUPLE: blas-matrix-rowcol-sequence
-    parent inc rowcol-length rowcol-jump length ;
-C: <blas-matrix-rowcol-sequence> blas-matrix-rowcol-sequence
-
-INSTANCE: blas-matrix-rowcol-sequence sequence
-
-M: blas-matrix-rowcol-sequence length
-    length>> ;
-M: blas-matrix-rowcol-sequence nth-unsafe
-    {
-        [
-            [ rowcol-jump>> ]
-            [ parent>> element-type heap-size ]
-            [ parent>> underlying>> ] tri
-            [ * * ] dip <displaced-alien>
-        ]
-        [ rowcol-length>> ]
-        [ inc>> ]
-        [ parent>> ]
-    } cleave (blas-vector-like) ;
-
-: (Mcols) ( A -- columns )
-    { [ ] [ drop 1 ] [ rows>> ] [ ld>> ] [ cols>> ] }
-    cleave <blas-matrix-rowcol-sequence> ;
-: (Mrows) ( A -- rows )
-    { [ ] [ ld>> ] [ cols>> ] [ drop 1 ] [ rows>> ] }
-    cleave <blas-matrix-rowcol-sequence> ;
-
-: Mrows ( A -- rows )
-    dup transpose>> [ (Mcols) ] [ (Mrows) ] if ;
-: Mcols ( A -- cols )
-    dup transpose>> [ (Mrows) ] [ (Mcols) ] if ;
-
-: n*M! ( n A -- A=n*A )
-    [ (Mcols) [ n*V! drop ] with each ] keep ;
-
-: n*M ( n A -- n*A )
-    clone n*M! ; inline
-
-: M*n ( A n -- A*n )
-    swap n*M ; inline
-: M/n ( A n -- A/n )
-    recip swap n*M ; inline
-
-: Mtranspose ( matrix -- matrix^T )
-    [ {
-        [ underlying>> ]
-        [ ld>> ] [ rows>> ]
-        [ cols>> ]
-        [ transpose>> not ]
-    } cleave ] keep (blas-matrix-like) ;
-
-M: blas-matrix-base equal?
-    {
-        [ [ Mwidth ] bi@ = ]
-        [ [ Mcols ] bi@ [ = ] 2all? ]
-    } 2&& ;
-
-<<
-
-FUNCTOR: (define-blas-matrix) ( TYPE T U C -- )
-
-VECTOR      IS ${TYPE}-blas-vector
-<VECTOR>    IS <${TYPE}-blas-vector>
->ARRAY      IS >${TYPE}-array
-TYPE>ARG    IS ${TYPE}>arg
-XGEMV       IS cblas_${T}gemv
-XGEMM       IS cblas_${T}gemm
-XGERU       IS cblas_${T}ger${U}
-XGERC       IS cblas_${T}ger${C}
-
-MATRIX      DEFINES ${TYPE}-blas-matrix
-<MATRIX>    DEFINES <${TYPE}-blas-matrix>
->MATRIX     DEFINES >${TYPE}-blas-matrix
-
-WHERE
-
-TUPLE: MATRIX < blas-matrix-base ;
-: <MATRIX> ( underlying ld rows cols transpose -- matrix )
-    MATRIX boa ; inline
-
-M: MATRIX element-type
-    drop TYPE ;
-M: MATRIX (blas-matrix-like)
-    drop <MATRIX> execute ;
-M: VECTOR (blas-matrix-like)
-    drop <MATRIX> execute ;
-M: MATRIX (blas-vector-like)
-    drop <VECTOR> execute ;
-
-: >MATRIX ( arrays -- matrix )
-    [ >ARRAY execute underlying>> ] (>matrix)
-    <MATRIX> execute ;
-
-M: VECTOR n*M.V+n*V!
-    [ TYPE>ARG execute ] (prepare-gemv)
-    [ XGEMV execute ] dip ;
-M: MATRIX n*M.M+n*M!
-    [ TYPE>ARG execute ] (prepare-gemm)
-    [ XGEMM execute ] dip ;
-M: MATRIX n*V(*)V+M!
-    [ TYPE>ARG execute ] (prepare-ger)
-    [ XGERU execute ] dip ;
-M: MATRIX n*V(*)Vconj+M!
-    [ TYPE>ARG execute ] (prepare-ger)
-    [ XGERC execute ] dip ;
-
-;FUNCTOR
-
-
-: define-real-blas-matrix ( TYPE T -- )
-    "" "" (define-blas-matrix) ;
-: define-complex-blas-matrix ( TYPE T -- )
-    "u" "c" (define-blas-matrix) ;
-
-"float"          "s" define-real-blas-matrix
-"double"         "d" define-real-blas-matrix
-"float-complex"  "c" define-complex-blas-matrix
-"double-complex" "z" define-complex-blas-matrix
-
->>
diff --git a/extra/math/blas/matrices/summary.txt b/extra/math/blas/matrices/summary.txt
deleted file mode 100644 (file)
index 4cc5684..0000000
+++ /dev/null
@@ -1 +0,0 @@
-BLAS level 2 and 3 matrix-vector and matrix-matrix operations
diff --git a/extra/math/blas/matrices/tags.txt b/extra/math/blas/matrices/tags.txt
deleted file mode 100644 (file)
index 5118958..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-math
-bindings
-unportable
diff --git a/extra/math/blas/syntax/authors.txt b/extra/math/blas/syntax/authors.txt
deleted file mode 100644 (file)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/math/blas/syntax/summary.txt b/extra/math/blas/syntax/summary.txt
deleted file mode 100644 (file)
index a71bebb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Literal syntax for BLAS vectors and matrices
diff --git a/extra/math/blas/syntax/syntax-docs.factor b/extra/math/blas/syntax/syntax-docs.factor
deleted file mode 100644 (file)
index 6b58df7..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-USING: help.markup help.syntax math.blas.matrices math.blas.vectors multiline ;
-IN: math.blas.syntax
-
-ARTICLE: "math.blas.syntax" "BLAS interface literal syntax"
-"Vectors:"
-{ $subsection POSTPONE: svector{ }
-{ $subsection POSTPONE: dvector{ }
-{ $subsection POSTPONE: cvector{ }
-{ $subsection POSTPONE: zvector{ }
-"Matrices:"
-{ $subsection POSTPONE: smatrix{ }
-{ $subsection POSTPONE: dmatrix{ }
-{ $subsection POSTPONE: cmatrix{ }
-{ $subsection POSTPONE: zmatrix{ } ;
-
-ABOUT: "math.blas.syntax"
-
-HELP: svector{
-{ $syntax "svector{ 1.0 -2.0 3.0 }" }
-{ $description "Construct a literal " { $link float-blas-vector } "." } ;
-
-HELP: dvector{
-{ $syntax "dvector{ 1.0 -2.0 3.0 }" }
-{ $description "Construct a literal " { $link double-blas-vector } "." } ;
-
-HELP: cvector{
-{ $syntax "cvector{ 1.0 -2.0 C{ 3.0 -1.0 } }" }
-{ $description "Construct a literal " { $link float-complex-blas-vector } "." } ;
-
-HELP: zvector{
-{ $syntax "dvector{ 1.0 -2.0 C{ 3.0 -1.0 } }" }
-{ $description "Construct a literal " { $link double-complex-blas-vector } "." } ;
-
-{
-    POSTPONE: svector{ POSTPONE: dvector{
-    POSTPONE: cvector{ POSTPONE: zvector{
-} related-words
-
-HELP: smatrix{
-{ $syntax <" smatrix{
-    { 1.0 0.0 0.0 1.0 }
-    { 0.0 1.0 0.0 2.0 }
-    { 0.0 0.0 1.0 3.0 }
-    { 0.0 0.0 0.0 1.0 }
-} "> }
-{ $description "Construct a literal " { $link float-blas-matrix } ". Note that although BLAS matrices are stored in column-major order, the literal is specified in row-major order." } ;
-
-HELP: dmatrix{
-{ $syntax <" dmatrix{
-    { 1.0 0.0 0.0 1.0 }
-    { 0.0 1.0 0.0 2.0 }
-    { 0.0 0.0 1.0 3.0 }
-    { 0.0 0.0 0.0 1.0 }
-} "> }
-{ $description "Construct a literal " { $link double-blas-matrix } ". Note that although BLAS matrices are stored in column-major order, the literal is specified in row-major order." } ;
-
-HELP: cmatrix{
-{ $syntax <" cmatrix{
-    { 1.0 0.0           0.0 1.0           }
-    { 0.0 C{ 0.0 1.0 }  0.0 2.0           }
-    { 0.0 0.0          -1.0 3.0           }
-    { 0.0 0.0           0.0 C{ 0.0 -1.0 } }
-} "> }
-{ $description "Construct a literal " { $link float-complex-blas-matrix } ". Note that although BLAS matrices are stored in column-major order, the literal is specified in row-major order." } ;
-
-HELP: zmatrix{
-{ $syntax <" zmatrix{
-    { 1.0 0.0           0.0 1.0           }
-    { 0.0 C{ 0.0 1.0 }  0.0 2.0           }
-    { 0.0 0.0          -1.0 3.0           }
-    { 0.0 0.0           0.0 C{ 0.0 -1.0 } }
-} "> }
-{ $description "Construct a literal " { $link double-complex-blas-matrix } ". Note that although BLAS matrices are stored in column-major order, the literal is specified in row-major order." } ;
-
-{
-    POSTPONE: smatrix{ POSTPONE: dmatrix{
-    POSTPONE: cmatrix{ POSTPONE: zmatrix{
-} related-words
diff --git a/extra/math/blas/syntax/syntax.factor b/extra/math/blas/syntax/syntax.factor
deleted file mode 100644 (file)
index 95f9f7b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-USING: kernel math.blas.vectors math.blas.matrices parser
-arrays prettyprint.backend sequences ;
-IN: math.blas.syntax
-
-: svector{
-    \ } [ >float-blas-vector ] parse-literal ; parsing
-: dvector{
-    \ } [ >double-blas-vector ] parse-literal ; parsing
-: cvector{
-    \ } [ >float-complex-blas-vector ] parse-literal ; parsing
-: zvector{
-    \ } [ >double-complex-blas-vector ] parse-literal ; parsing
-
-: smatrix{
-    \ } [ >float-blas-matrix ] parse-literal ; parsing
-: dmatrix{
-    \ } [ >double-blas-matrix ] parse-literal ; parsing
-: cmatrix{
-    \ } [ >float-complex-blas-matrix ] parse-literal ; parsing
-: zmatrix{
-    \ } [ >double-complex-blas-matrix ] parse-literal ; parsing
-
-M: float-blas-vector pprint-delims
-    drop \ svector{ \ } ;
-M: double-blas-vector pprint-delims
-    drop \ dvector{ \ } ;
-M: float-complex-blas-vector pprint-delims
-    drop \ cvector{ \ } ;
-M: double-complex-blas-vector pprint-delims
-    drop \ zvector{ \ } ;
-
-M: float-blas-matrix pprint-delims
-    drop \ smatrix{ \ } ;
-M: double-blas-matrix pprint-delims
-    drop \ dmatrix{ \ } ;
-M: float-complex-blas-matrix pprint-delims
-    drop \ cmatrix{ \ } ;
-M: double-complex-blas-matrix pprint-delims
-    drop \ zmatrix{ \ } ;
-
-M: blas-vector-base >pprint-sequence ;
-M: blas-vector-base pprint* pprint-object ;
-M: blas-matrix-base >pprint-sequence Mrows ;
-M: blas-matrix-base pprint* pprint-object ;
diff --git a/extra/math/blas/syntax/tags.txt b/extra/math/blas/syntax/tags.txt
deleted file mode 100644 (file)
index 6a932d9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-math
-unportable
diff --git a/extra/math/blas/vectors/authors.txt b/extra/math/blas/vectors/authors.txt
deleted file mode 100644 (file)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/math/blas/vectors/summary.txt b/extra/math/blas/vectors/summary.txt
deleted file mode 100644 (file)
index f983e85..0000000
+++ /dev/null
@@ -1 +0,0 @@
-BLAS level 1 vector operations
diff --git a/extra/math/blas/vectors/tags.txt b/extra/math/blas/vectors/tags.txt
deleted file mode 100644 (file)
index 6a932d9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-math
-unportable
diff --git a/extra/math/blas/vectors/vectors-docs.factor b/extra/math/blas/vectors/vectors-docs.factor
deleted file mode 100644 (file)
index cb26d67..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-USING: alien byte-arrays help.markup help.syntax math sequences ;
-IN: math.blas.vectors
-
-ARTICLE: "math.blas.vectors" "BLAS interface vector operations"
-"Slicing vectors:"
-{ $subsection Vsub }
-"Taking the norm (magnitude) of a vector:"
-{ $subsection Vnorm }
-"Summing and taking the maximum of elements:"
-{ $subsection Vasum }
-{ $subsection Viamax }
-{ $subsection Vamax }
-"Scalar-vector products:"
-{ $subsection n*V! }
-{ $subsection n*V }
-{ $subsection V*n }
-{ $subsection V/n }
-{ $subsection Vneg }
-"Vector addition:" 
-{ $subsection n*V+V! }
-{ $subsection n*V+V }
-{ $subsection V+ }
-{ $subsection V- }
-"Vector inner products:"
-{ $subsection V. }
-{ $subsection V.conj } ;
-
-ABOUT: "math.blas.vectors"
-
-HELP: blas-vector-base
-{ $class-description "The base class for all BLAS vector types. Objects of this type should not be created directly; instead, instantiate one of the typed subclasses:"
-{ $list
-    { { $link float-blas-vector } }
-    { { $link double-blas-vector } }
-    { { $link float-complex-blas-vector } }
-    { { $link double-complex-blas-vector } }
-}
-"All of these subclasses share the same tuple layout:"
-{ $list
-    { { $snippet "underlying" } " contains an alien pointer referencing or byte-array containing a packed array of float, double, float complex, or double complex values;" }
-    { { $snippet "length" } " indicates the length of the vector;" }
-    { "and " { $snippet "inc" } " indicates the distance, in elements, between elements." }
-} } ;
-
-HELP: float-blas-vector
-{ $class-description "A vector of single-precision floating-point values. For details on the tuple layout, see " { $link blas-vector-base } "." } ;
-HELP: double-blas-vector
-{ $class-description "A vector of double-precision floating-point values. For details on the tuple layout, see " { $link blas-vector-base } "." } ;
-HELP: float-complex-blas-vector
-{ $class-description "A vector of single-precision floating-point complex values. Complex values are stored in memory as two consecutive float values, real part then imaginary part. For details on the tuple layout, see " { $link blas-vector-base } "." } ;
-HELP: double-complex-blas-vector
-{ $class-description "A vector of single-precision floating-point complex values. Complex values are stored in memory as two consecutive float values, real part then imaginary part. For details on the tuple layout, see " { $link blas-vector-base } "." } ;
-
-HELP: n*V+V!
-{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "y=alpha*x+y" blas-vector-base } }
-{ $description "Calculate the vector sum " { $snippet "αx + y" } " and replace the existing contents of y with the result. Corresponds to the xAXPY routines in BLAS." }
-{ $side-effects "y" } ;
-
-HELP: n*V!
-{ $values { "alpha" number } { "x" blas-vector-base } { "x=alpha*x" blas-vector-base } }
-{ $description "Calculate the scalar-vector product " { $snippet "αx" } " and replace the existing contents of x with the result. Corresponds to the xSCAL routines in BLAS." }
-{ $side-effects "x" } ;
-
-HELP: V.
-{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x.y" number } }
-{ $description "Calculate the inner product " { $snippet "x⋅y" } ". Corresponds to the xDOT and xDOTU routines in BLAS." } ;
-
-HELP: V.conj
-{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "xconj.y" number } }
-{ $description "Calculate the conjugate inner product " { $snippet "x̅⋅y" } ". Corresponds to the xDOTC routines in BLAS." } ;
-
-HELP: Vnorm
-{ $values { "x" blas-vector-base } { "norm" number } }
-{ $description "Calculate the norm-2, i.e., the magnitude or absolute value, of " { $snippet "x" } " (" { $snippet "‖x‖₂" } "). Corresponds to the xNRM2 routines in BLAS." } ;
-
-HELP: Vasum
-{ $values { "x" blas-vector-base } { "sum" number } }
-{ $description "Calculate the sum of the norm-1s of the elements of " { $snippet "x" } " (" { $snippet "Σ ‖xᵢ‖₁" } "). Corresponds to the xASUM routines in BLAS." } ;
-
-HELP: Vswap
-{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x=y" blas-vector-base } { "y=x" blas-vector-base } }
-{ $description "Swap the contents of " { $snippet "x" } " and " { $snippet "y" } " in place. Corresponds to the xSWAP routines in BLAS." }
-{ $side-effects "x" "y" } ;
-
-HELP: Viamax
-{ $values { "x" blas-vector-base } { "max-i" integer } }
-{ $description "Return the index of the element in " { $snippet "x" } " with the largest norm-1. If more than one element has the same norm-1, returns the smallest index. Corresponds to the IxAMAX routines in BLAS." } ;
-
-HELP: Vamax
-{ $values { "x" blas-vector-base } { "max" number } }
-{ $description "Return the value of the element in " { $snippet "x" } " with the largest norm-1. If more than one element has the same norm-1, returns the first element. Corresponds to the IxAMAX routines in BLAS." } ;
-
-{ Viamax Vamax } related-words
-
-HELP: <zero-vector>
-{ $values { "exemplar" blas-vector-base } { "zero" blas-vector-base } }
-{ $description "Return a vector of zeros with the same length and element type as " { $snippet "v" } ". The vector is constructed with an " { $snippet "inc" } " of zero, so it is not suitable for receiving results from BLAS functions; it is intended to be used as a term in other vector calculations. To construct an empty vector that can be used to receive results, see " { $link <empty-vector> } "." } ;
-
-HELP: n*V+V
-{ $values { "alpha" number } { "x" blas-vector-base } { "y" blas-vector-base } { "alpha*x+y" blas-vector-base } }
-{ $description "Calculate the vector sum " { $snippet "αx + y" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " and " { $snippet "y" } " containing the result. Corresponds to the xAXPY routines in BLAS." } ;
-
-HELP: n*V
-{ $values { "alpha" "a number" } { "x" blas-vector-base } { "alpha*x" blas-vector-base } }
-{ $description "Calculate the scalar-vector product " { $snippet "αx" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " containing the result. Corresponds to the xSCAL routines in BLAS." } ;
-
-HELP: V+
-{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x+y" blas-vector-base } }
-{ $description "Calculate the vector sum " { $snippet "x + y" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " and " { $snippet "y" } " containing the result. Corresponds to the xAXPY routines in BLAS." } ;
-
-HELP: V-
-{ $values { "x" blas-vector-base } { "y" blas-vector-base } { "x-y" blas-vector-base } }
-{ $description "Calculate the vector difference " { $snippet "x – y" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " and " { $snippet "y" } " containing the result. Corresponds to the xAXPY routines in BLAS." } ;
-
-HELP: Vneg
-{ $values { "x" blas-vector-base } { "-x" blas-vector-base } }
-{ $description "Negate the elements of " { $snippet "x" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " containing the result." } ;
-
-HELP: V*n
-{ $values { "x" blas-vector-base } { "alpha" number } { "x*alpha" blas-vector-base } }
-{ $description "Calculate the scalar-vector product " { $snippet "αx" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " containing the result. Corresponds to the xSCAL routines in BLAS." } ;
-
-HELP: V/n
-{ $values { "x" blas-vector-base } { "alpha" number } { "x/alpha" blas-vector-base } }
-{ $description "Calculate the scalar-vector product " { $snippet "(1/α)x" } " and return a freshly-allocated vector with the same length as " { $snippet "x" } " containing the result. Corresponds to the xSCAL routines in BLAS." } ;
-
-{ n*V+V! n*V! n*V+V n*V V+ V- Vneg V*n V/n } related-words
-
-HELP: Vsub
-{ $values { "v" blas-vector-base } { "start" integer } { "length" integer } { "sub" blas-vector-base } }
-{ $description "Slice a subvector out of " { $snippet "v" } " starting at " { $snippet "start" } " with the given " { $snippet "length" } ". The subvector will share storage with the parent vector." } ;
diff --git a/extra/math/blas/vectors/vectors-tests.factor b/extra/math/blas/vectors/vectors-tests.factor
deleted file mode 100644 (file)
index 5f9e8fd..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-USING: kernel math.blas.vectors math.blas.syntax sequences tools.test ;
-IN: math.blas.vectors.tests
-
-! clone
-
-[ svector{ 1.0 2.0 3.0 } ] [ svector{ 1.0 2.0 3.0 } clone ] unit-test
-[ f ] [ svector{ 1.0 2.0 3.0 } dup clone eq? ] unit-test
-[ dvector{ 1.0 2.0 3.0 } ] [ dvector{ 1.0 2.0 3.0 } clone ] unit-test
-[ f ] [ dvector{ 1.0 2.0 3.0 } dup clone eq? ] unit-test
-[ cvector{ 1.0 C{ 2.0 3.0 } 4.0 } ] [ cvector{ 1.0 C{ 2.0 3.0 } 4.0 } clone ] unit-test
-[ f ] [ cvector{ 1.0 C{ 2.0 3.0 } 4.0 } dup clone eq? ] unit-test
-[ zvector{ 1.0 C{ 2.0 3.0 } 4.0 } ] [ zvector{ 1.0 C{ 2.0 3.0 } 4.0 } clone ] unit-test
-[ f ] [ zvector{ 1.0 C{ 2.0 3.0 } 4.0 } dup clone eq? ] unit-test
-
-! nth
-
-[ 1.0 ] [ 2 svector{ 3.0 2.0 1.0 } nth ] unit-test
-[ 1.0 ] [ 2 dvector{ 3.0 2.0 1.0 } nth ] unit-test
-
-[ C{ 1.0 2.0 } ]
-[ 2 cvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 1.0 2.0 } } nth ] unit-test
-
-[ C{ 1.0 2.0 } ]
-[ 2 zvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 1.0 2.0 } } nth ] unit-test
-
-! set-nth
-
-[ svector{ 3.0 2.0 0.0 } ] [ 0.0 2 svector{ 3.0 2.0 1.0 } [ set-nth ] keep ] unit-test
-[ dvector{ 3.0 2.0 0.0 } ] [ 0.0 2 dvector{ 3.0 2.0 1.0 } [ set-nth ] keep ] unit-test
-
-[ cvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 3.0 4.0 } } ] [
-    C{ 3.0 4.0 } 2
-    cvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 1.0 2.0 } }
-    [ set-nth ] keep
-] unit-test
-[ zvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 3.0 4.0 } } ] [
-    C{ 3.0 4.0 } 2
-    zvector{ C{ -3.0 -2.0 } C{ -1.0 0.0 } C{ 1.0 2.0 } }
-    [ set-nth ] keep
-] unit-test
-
-! V+
-
-[ svector{ 11.0 22.0 } ] [ svector{ 1.0 2.0 } svector{ 10.0 20.0 } V+ ] unit-test
-[ dvector{ 11.0 22.0 } ] [ dvector{ 1.0 2.0 } dvector{ 10.0 20.0 } V+ ] unit-test
-
-[ cvector{ 11.0 C{ 22.0 33.0 } } ]
-[ cvector{ 1.0 C{ 2.0 3.0 } } cvector{ 10.0 C{ 20.0 30.0 } } V+ ]
-unit-test
-
-[ zvector{ 11.0 C{ 22.0 33.0 } } ]
-[ zvector{ 1.0 C{ 2.0 3.0 } } zvector{ 10.0 C{ 20.0 30.0 } } V+ ]
-unit-test
-
-! V-
-
-[ svector{ 9.0 18.0 } ] [ svector{ 10.0 20.0 } svector{ 1.0 2.0 } V- ] unit-test
-[ dvector{ 9.0 18.0 } ] [ dvector{ 10.0 20.0 } dvector{ 1.0 2.0 } V- ] unit-test
-
-[ cvector{ 9.0 C{ 18.0 27.0 } } ]
-[ cvector{ 10.0 C{ 20.0 30.0 } } cvector{ 1.0 C{ 2.0 3.0 } } V- ]
-unit-test
-
-[ zvector{ 9.0 C{ 18.0 27.0 } } ]
-[ zvector{ 10.0 C{ 20.0 30.0 } } zvector{ 1.0 C{ 2.0 3.0 } } V- ]
-unit-test
-
-! Vneg
-
-[ svector{ 1.0 -2.0 } ] [ svector{ -1.0 2.0 } Vneg ] unit-test
-[ dvector{ 1.0 -2.0 } ] [ dvector{ -1.0 2.0 } Vneg ] unit-test
-
-[ cvector{ 1.0 C{ -2.0 3.0 } } ] [ cvector{ -1.0 C{ 2.0 -3.0 } } Vneg ] unit-test
-[ zvector{ 1.0 C{ -2.0 3.0 } } ] [ zvector{ -1.0 C{ 2.0 -3.0 } } Vneg ] unit-test
-
-! n*V
-
-[ svector{ 100.0 200.0 } ] [ 10.0 svector{ 10.0 20.0 } n*V ] unit-test
-[ dvector{ 100.0 200.0 } ] [ 10.0 dvector{ 10.0 20.0 } n*V ] unit-test
-
-[ cvector{ C{ 20.0 4.0 } C{ 8.0 12.0 } } ]
-[ C{ 10.0 2.0 } cvector{ 2.0 C{ 1.0 1.0 } } n*V ]
-unit-test
-
-[ zvector{ C{ 20.0 4.0 } C{ 8.0 12.0 } } ]
-[ C{ 10.0 2.0 } zvector{ 2.0 C{ 1.0 1.0 } } n*V ]
-unit-test
-
-! V*n
-
-[ svector{ 100.0 200.0 } ] [ svector{ 10.0 20.0 } 10.0 V*n ] unit-test
-[ dvector{ 100.0 200.0 } ] [ dvector{ 10.0 20.0 } 10.0 V*n ] unit-test
-
-[ cvector{ C{ 20.0 4.0 } C{ 8.0 12.0 } } ]
-[ cvector{ 2.0 C{ 1.0 1.0 } } C{ 10.0 2.0 } V*n ]
-unit-test
-
-[ zvector{ C{ 20.0 4.0 } C{ 8.0 12.0 } } ]
-[ zvector{ 2.0 C{ 1.0 1.0 } } C{ 10.0 2.0 } V*n ]
-unit-test
-
-! V/n
-
-[ svector{ 1.0 2.0 } ] [ svector{ 4.0 8.0 } 4.0 V/n ] unit-test
-[ dvector{ 1.0 2.0 } ] [ dvector{ 4.0 8.0 } 4.0 V/n ] unit-test
-
-[ cvector{ C{ 0.0 -4.0 } 1.0 } ]
-[ cvector{ C{ 4.0 -4.0 } C{ 1.0 1.0 } } C{ 1.0 1.0 } V/n ]
-unit-test
-
-[ zvector{ C{ 0.0 -4.0 } 1.0 } ]
-[ zvector{ C{ 4.0 -4.0 } C{ 1.0 1.0 } } C{ 1.0 1.0 } V/n ]
-unit-test
-
-! V.
-
-[ 7.0 ] [ svector{ 1.0 2.5 } svector{ 2.0 2.0 } V. ] unit-test
-[ 7.0 ] [ dvector{ 1.0 2.5 } dvector{ 2.0 2.0 } V. ] unit-test
-[ C{ 7.0 7.0 } ] [ cvector{ C{ 1.0 1.0 } 2.5 } cvector{ 2.0 C{ 2.0 2.0 } } V. ] unit-test
-[ C{ 7.0 7.0 } ] [ zvector{ C{ 1.0 1.0 } 2.5 } zvector{ 2.0 C{ 2.0 2.0 } } V. ] unit-test
-
-! V.conj
-
-[ C{ 7.0 3.0 } ] [ cvector{ C{ 1.0 1.0 } 2.5 } cvector{ 2.0 C{ 2.0 2.0 } } V.conj ] unit-test
-[ C{ 7.0 3.0 } ] [ zvector{ C{ 1.0 1.0 } 2.5 } zvector{ 2.0 C{ 2.0 2.0 } } V.conj ] unit-test
-
-! Vnorm
-
-[ 5.0 ] [ svector{ 3.0 4.0 } Vnorm ] unit-test
-[ 5.0 ] [ dvector{ 3.0 4.0 } Vnorm ] unit-test
-
-[ 13.0 ] [ cvector{ C{ 3.0 4.0 } 12.0 } Vnorm ] unit-test
-[ 13.0 ] [ zvector{ C{ 3.0 4.0 } 12.0 } Vnorm ] unit-test
-
-! Vasum
-
-[ 6.0 ] [ svector{ 1.0 2.0 -3.0 } Vasum ] unit-test
-[ 6.0 ] [ dvector{ 1.0 2.0 -3.0 } Vasum ] unit-test
-
-[ 15.0 ] [ cvector{ 1.0 C{ -2.0 3.0 } C{ 4.0 -5.0 } } Vasum ] unit-test
-[ 15.0 ] [ zvector{ 1.0 C{ -2.0 3.0 } C{ 4.0 -5.0 } } Vasum ] unit-test
-
-! Vswap
-
-[ svector{ 2.0 2.0 } svector{ 1.0 1.0 } ]
-[ svector{ 1.0 1.0 } svector{ 2.0 2.0 } Vswap ]
-unit-test
-
-[ dvector{ 2.0 2.0 } dvector{ 1.0 1.0 } ]
-[ dvector{ 1.0 1.0 } dvector{ 2.0 2.0 } Vswap ]
-unit-test
-
-[ cvector{ 2.0 C{ 2.0 2.0 } } cvector{ C{ 1.0 1.0 } 1.0 } ]
-[ cvector{ C{ 1.0 1.0 } 1.0 } cvector{ 2.0 C{ 2.0 2.0 } } Vswap ]
-unit-test
-
-[ zvector{ 2.0 C{ 2.0 2.0 } } zvector{ C{ 1.0 1.0 } 1.0 } ]
-[ zvector{ C{ 1.0 1.0 } 1.0 } zvector{ 2.0 C{ 2.0 2.0 } } Vswap ]
-unit-test
-
-! Viamax
-
-[ 3 ] [ svector{ 1.0 -5.0 4.0 -6.0 -1.0 } Viamax ] unit-test
-[ 3 ] [ dvector{ 1.0 -5.0 4.0 -6.0 -1.0 } Viamax ] unit-test
-[ 0 ] [ cvector{ C{ 2.0 -5.0 } 4.0 -6.0 -1.0 } Viamax ] unit-test
-[ 0 ] [ zvector{ C{ 2.0 -5.0 } 4.0 -6.0 -1.0 } Viamax ] unit-test
-
-! Vamax
-
-[ -6.0 ] [ svector{ 1.0 -5.0 4.0 -6.0 -1.0 } Vamax ] unit-test
-[ -6.0 ] [ dvector{ 1.0 -5.0 4.0 -6.0 -1.0 } Vamax ] unit-test
-[ C{ 2.0 -5.0 } ] [ cvector{ C{ 2.0 -5.0 } 4.0 -6.0 -1.0 } Vamax ] unit-test
-[ C{ 2.0 -5.0 } ] [ zvector{ C{ 2.0 -5.0 } 4.0 -6.0 -1.0 } Vamax ] unit-test
-
-! Vsub
-
-[ svector{ -5.0 4.0 -6.0 } ] [ svector{ 1.0 -5.0 4.0 -6.0 -1.0 } 1 3 Vsub ] unit-test
-[ dvector{ -5.0 4.0 -6.0 } ] [ dvector{ 1.0 -5.0 4.0 -6.0 -1.0 } 1 3 Vsub ] unit-test
-[ cvector{ -5.0 C{ 4.0 3.0 } -6.0 } ] [ cvector{ 1.0 -5.0 C{ 4.0 3.0 } -6.0 -1.0 } 1 3 Vsub ] unit-test
-[ zvector{ -5.0 C{ 4.0 3.0 } -6.0 } ] [ zvector{ 1.0 -5.0 C{ 4.0 3.0 } -6.0 -1.0 } 1 3 Vsub ] unit-test
diff --git a/extra/math/blas/vectors/vectors.factor b/extra/math/blas/vectors/vectors.factor
deleted file mode 100755 (executable)
index db027b0..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-USING: accessors alien alien.c-types arrays byte-arrays combinators
-combinators.short-circuit fry kernel math math.blas.cblas
-math.complex math.functions math.order sequences.complex
-sequences.complex-components sequences sequences.private
-functors words locals
-specialized-arrays.float specialized-arrays.double
-specialized-arrays.direct.float specialized-arrays.direct.double ;
-IN: math.blas.vectors
-
-TUPLE: blas-vector-base underlying length inc ;
-
-INSTANCE: blas-vector-base virtual-sequence
-
-GENERIC: element-type ( v -- type )
-
-GENERIC: n*V+V! ( alpha x y -- y=alpha*x+y )
-GENERIC: n*V!   ( alpha x -- x=alpha*x )
-GENERIC: V. ( x y -- x.y )
-GENERIC: V.conj ( x y -- xconj.y )
-GENERIC: Vnorm ( x -- norm )
-GENERIC: Vasum ( x -- sum )
-GENERIC: Vswap ( x y -- x=y y=x )
-GENERIC: Viamax ( x -- max-i )
-
-<PRIVATE
-
-GENERIC: (blas-vector-like) ( data length inc exemplar -- vector )
-
-GENERIC: (blas-direct-array) ( blas-vector -- direct-array )
-
-: shorter-length ( v1 v2 -- length )
-    [ length>> ] bi@ min ; inline
-: data-and-inc ( v -- data inc )
-    [ underlying>> ] [ inc>> ] bi ; inline
-: datas-and-incs ( v1 v2 -- v1-data v1-inc v2-data v2-inc )
-    [ data-and-inc ] bi@ ; inline
-
-:: (prepare-copy)
-    ( v element-size -- length v-data v-inc v-dest-data v-dest-inc
-                        copy-data copy-length copy-inc )
-    v [ length>> ] [ data-and-inc ] bi
-    v length>> element-size * <byte-array>
-    1 
-    over v length>> 1 ;
-
-: (prepare-swap)
-    ( v1 v2 -- length v1-data v1-inc v2-data v2-inc
-               v1 v2 )
-    [ shorter-length ] [ datas-and-incs ] [ ] 2tri ;
-
-:: (prepare-axpy)
-    ( n v1 v2 -- length n v1-data v1-inc v2-data v2-inc
-                 v2 )
-    v1 v2 shorter-length
-    n
-    v1 v2 datas-and-incs
-    v2 ;
-
-:: (prepare-scal)
-    ( n v -- length n v-data v-inc
-             v )
-    v length>>
-    n
-    v data-and-inc
-    v ;
-
-: (prepare-dot) ( v1 v2 -- length v1-data v1-inc v2-data v2-inc )
-    [ shorter-length ] [ datas-and-incs ] 2bi ;
-
-: (prepare-nrm2) ( v -- length data inc )
-    [ length>> ] [ data-and-inc ] bi ;
-
-PRIVATE>
-
-: n*V+V ( alpha x y -- alpha*x+y ) clone n*V+V! ; inline
-: n*V ( alpha x -- alpha*x ) clone n*V! ; inline
-
-: V+ ( x y -- x+y )
-    1.0 -rot n*V+V ; inline
-: V- ( x y -- x-y )
-    -1.0 spin n*V+V ; inline
-
-: Vneg ( x -- -x )
-    -1.0 swap n*V ; inline
-
-: V*n ( x alpha -- x*alpha )
-    swap n*V ; inline
-: V/n ( x alpha -- x/alpha )
-    recip swap n*V ; inline
-
-: Vamax ( x -- max )
-    [ Viamax ] keep nth ; inline
-
-:: Vsub ( v start length -- sub )
-    v inc>> start * v element-type heap-size *
-    v underlying>> <displaced-alien>
-    length v inc>> v (blas-vector-like) ;
-
-: <zero-vector> ( exemplar -- zero )
-    [ element-type <c-object> ]
-    [ length>> 0 ]
-    [ (blas-vector-like) ] tri ;
-
-: <empty-vector> ( length exemplar -- vector )
-    [ element-type <c-array> ]
-    [ 1 swap ] 2bi
-    (blas-vector-like) ;
-
-M: blas-vector-base equal?
-    {
-        [ [ length ] bi@ = ]
-        [ [ = ] 2all? ]
-    } 2&& ;
-
-M: blas-vector-base length
-    length>> ;
-M: blas-vector-base virtual-seq
-    (blas-direct-array) ;
-M: blas-vector-base virtual@
-    [ inc>> * ] [ nip (blas-direct-array) ] 2bi ;
-
-: float>arg ( f -- f ) ; inline
-: double>arg ( f -- f ) ; inline
-: arg>float ( f -- f ) ; inline
-: arg>double ( f -- f ) ; inline
-
-<<
-
-FUNCTOR: (define-blas-vector) ( TYPE T -- )
-
-<DIRECT-ARRAY> IS <direct-${TYPE}-array>
->ARRAY         IS >${TYPE}-array
-XCOPY          IS cblas_${T}copy
-XSWAP          IS cblas_${T}swap
-IXAMAX         IS cblas_i${T}amax
-
-VECTOR         DEFINES ${TYPE}-blas-vector
-<VECTOR>       DEFINES <${TYPE}-blas-vector>
->VECTOR        DEFINES >${TYPE}-blas-vector
-
-WHERE
-
-TUPLE: VECTOR < blas-vector-base ;
-: <VECTOR> ( underlying length inc -- vector ) VECTOR boa ; inline
-
-: >VECTOR ( seq -- v )
-    [ >ARRAY execute underlying>> ] [ length ] bi 1 <VECTOR> execute ;
-
-M: VECTOR clone
-    TYPE heap-size (prepare-copy)
-    [ XCOPY execute ] 3dip <VECTOR> execute ;
-
-M: VECTOR element-type
-    drop TYPE ;
-M: VECTOR Vswap
-    (prepare-swap) [ XSWAP execute ] 2dip ;
-M: VECTOR Viamax
-    (prepare-nrm2) IXAMAX execute ;
-
-M: VECTOR (blas-vector-like)
-    drop <VECTOR> execute ;
-
-M: VECTOR (blas-direct-array)
-    [ underlying>> ]
-    [ [ length>> ] [ inc>> ] bi * ] bi
-    <DIRECT-ARRAY> execute ;
-
-;FUNCTOR
-
-
-FUNCTOR: (define-real-blas-vector) ( TYPE T -- )
-
-VECTOR         IS ${TYPE}-blas-vector
-XDOT           IS cblas_${T}dot
-XNRM2          IS cblas_${T}nrm2
-XASUM          IS cblas_${T}asum
-XAXPY          IS cblas_${T}axpy
-XSCAL          IS cblas_${T}scal
-
-WHERE
-
-M: VECTOR V.
-    (prepare-dot) XDOT execute ;
-M: VECTOR V.conj
-    (prepare-dot) XDOT execute ;
-M: VECTOR Vnorm
-    (prepare-nrm2) XNRM2 execute ;
-M: VECTOR Vasum
-    (prepare-nrm2) XASUM execute ;
-M: VECTOR n*V+V!
-    (prepare-axpy) [ XAXPY execute ] dip ;
-M: VECTOR n*V!
-    (prepare-scal) [ XSCAL execute ] dip ;
-
-;FUNCTOR
-
-
-FUNCTOR: (define-complex-helpers) ( TYPE -- )
-
-<DIRECT-COMPLEX-ARRAY> DEFINES <direct-${TYPE}-complex-array>
->COMPLEX-ARRAY         DEFINES >${TYPE}-complex-array
-ARG>COMPLEX            DEFINES arg>${TYPE}-complex
-COMPLEX>ARG            DEFINES ${TYPE}-complex>arg
-<DIRECT-ARRAY>         IS      <direct-${TYPE}-array>
->ARRAY                 IS      >${TYPE}-array
-
-WHERE
-
-: <DIRECT-COMPLEX-ARRAY> ( alien len -- sequence )
-    1 shift <DIRECT-ARRAY> execute <complex-sequence> ;
-: >COMPLEX-ARRAY ( sequence -- sequence )
-    <complex-components> >ARRAY execute ;
-: COMPLEX>ARG ( complex -- alien )
-    >rect 2array >ARRAY execute underlying>> ;
-: ARG>COMPLEX ( alien -- complex )
-    2 <DIRECT-ARRAY> execute first2 rect> ;
-
-;FUNCTOR
-
-
-FUNCTOR: (define-complex-blas-vector) ( TYPE C S -- )
-
-VECTOR         IS ${TYPE}-blas-vector
-XDOTU_SUB      IS cblas_${C}dotu_sub
-XDOTC_SUB      IS cblas_${C}dotc_sub
-XXNRM2         IS cblas_${S}${C}nrm2
-XXASUM         IS cblas_${S}${C}asum
-XAXPY          IS cblas_${C}axpy
-XSCAL          IS cblas_${C}scal
-TYPE>ARG       IS ${TYPE}>arg
-ARG>TYPE       IS arg>${TYPE}
-
-WHERE
-
-M: VECTOR V.
-    (prepare-dot) TYPE <c-object>
-    [ XDOTU_SUB execute ] keep
-    ARG>TYPE execute ;
-M: VECTOR V.conj
-    (prepare-dot) TYPE <c-object>
-    [ XDOTC_SUB execute ] keep
-    ARG>TYPE execute ;
-M: VECTOR Vnorm
-    (prepare-nrm2) XXNRM2 execute ;
-M: VECTOR Vasum
-    (prepare-nrm2) XXASUM execute ;
-M: VECTOR n*V+V!
-    [ TYPE>ARG execute ] 2dip
-    (prepare-axpy) [ XAXPY execute ] dip ;
-M: VECTOR n*V!
-    [ TYPE>ARG execute ] dip
-    (prepare-scal) [ XSCAL execute ] dip ;
-
-;FUNCTOR
-
-
-: define-real-blas-vector ( TYPE T -- )
-    [ (define-blas-vector) ]
-    [ (define-real-blas-vector) ] 2bi ;
-:: define-complex-blas-vector ( TYPE C S -- )
-    TYPE (define-complex-helpers)
-    TYPE "-complex" append
-    [ C (define-blas-vector) ]
-    [ C S (define-complex-blas-vector) ] bi ;
-
-"float"  "s" define-real-blas-vector
-"double" "d" define-real-blas-vector
-"float"  "c" "s" define-complex-blas-vector
-"double" "z" "d" define-complex-blas-vector
-
->>
-
index 3bc785c1b644393a30323fc080eae933f3244241..11e57d2639700258f3cbbaae4859977a12430069 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (c) 2008 Reginald Keith Ford II.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel math arrays sequences sequences.lib ;
+USING: kernel math arrays sequences ;
 IN: math.function-tools
 
 ! Tools for quickly comparing, transforming, and evaluating mathematical functions
diff --git a/extra/math/miller-rabin/authors.txt b/extra/math/miller-rabin/authors.txt
deleted file mode 100755 (executable)
index 7c1b2f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
diff --git a/extra/math/miller-rabin/miller-rabin-tests.factor b/extra/math/miller-rabin/miller-rabin-tests.factor
deleted file mode 100644 (file)
index 9ca85ea..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-USING: math.miller-rabin tools.test ;
-IN: math.miller-rabin.tests
-
-[ f ] [ 473155932665450549999756893736999469773678960651272093993257221235459777950185377130233556540099119926369437865330559863 miller-rabin ] unit-test
-[ t ] [ 2 miller-rabin ] unit-test
-[ t ] [ 3 miller-rabin ] unit-test
-[ f ] [ 36 miller-rabin ] unit-test
-[ t ] [ 37 miller-rabin ] unit-test
-[ 101 ] [ 100 next-prime ] unit-test
-[ 100000000000031 ] [ 100000000000000 next-prime ] unit-test
diff --git a/extra/math/miller-rabin/miller-rabin.factor b/extra/math/miller-rabin/miller-rabin.factor
deleted file mode 100755 (executable)
index def8a04..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: combinators combinators.lib io locals kernel math
-math.functions math.ranges namespaces random sequences
-hashtables sets ;
-IN: math.miller-rabin
-
-: >even ( n -- int ) dup even? [ 1- ] unless ; foldable
-: >odd ( n -- int ) dup even? [ 1+ ] when ; foldable
-: next-odd ( m -- n ) dup even? [ 1+ ] [ 2 + ] if ;
-
-TUPLE: positive-even-expected n ;
-
-:: (miller-rabin) ( n trials -- ? )
-    [let | r [ n 1- factor-2s drop ]
-           s [ n 1- factor-2s nip ]
-           prime?! [ t ]
-           a! [ 0 ]
-           count! [ 0 ] |
-        trials [
-            n 1- [1,b] random a!
-            a s n ^mod 1 = [
-                0 count!
-                r [
-                    2^ s * a swap n ^mod n - -1 =
-                    [ count 1+ count! r + ] when
-                ] each
-                count zero? [ f prime?! trials + ] when
-            ] unless drop
-        ] each prime? ] ;
-
-: miller-rabin* ( n numtrials -- ? )
-    over {
-        { [ dup 1 <= ] [ 3drop f ] }
-        { [ dup 2 = ] [ 3drop t ] }
-        { [ dup even? ] [ 3drop f ] }
-        [ [ drop (miller-rabin) ] with-scope ]
-    } cond ;
-
-: miller-rabin ( n -- ? ) 10 miller-rabin* ;
-
-: next-prime ( n -- p )
-    next-odd dup miller-rabin [ next-prime ] unless ;
-
-: random-prime ( numbits -- p )
-    random-bits next-prime ;
-
-ERROR: no-relative-prime n ;
-
-: (find-relative-prime) ( n guess -- p )
-    over 1 <= [ over no-relative-prime ] when
-    dup 1 <= [ drop 3 ] when
-    2dup gcd nip 1 > [ 2 + (find-relative-prime) ] [ nip ] if ;
-
-: find-relative-prime* ( n guess -- p )
-    #! find a prime relative to n with initial guess
-    >odd (find-relative-prime) ;
-
-: find-relative-prime ( n -- p )
-    dup random find-relative-prime* ;
-
-ERROR: too-few-primes ;
-
-: unique-primes ( numbits n -- seq )
-    #! generate two primes
-    over 5 < [ too-few-primes ] when
-    [ [ drop random-prime ] with map ] [ all-unique? ] generate ;
diff --git a/extra/math/miller-rabin/summary.txt b/extra/math/miller-rabin/summary.txt
deleted file mode 100644 (file)
index b2591a3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Miller-Rabin probabilistic primality test
index 41f19b9b07b7e2a93d53a27006d6bf5d5635a46c..643fc3ae051bc94c46327d9b4185e6284655eb38 100755 (executable)
@@ -32,23 +32,22 @@ SYMBOL: and-needed?
     0 < "Negative " "" ? ;
 
 : 3digit-groups ( n -- seq )
-    number>string <reversed> 3 <groups>
-    [ reverse string>number ] map ;
+    [ dup 0 > ] [ 1000 /mod ] [ ] produce nip ;
 
 : hundreds-place ( n -- str )
-    100 /mod swap dup zero? [
+    100 /mod over 0 = [
         2drop ""
     ] [
-        small-numbers " Hundred" append
-        swap zero? [ " and " append ] unless
+        [ small-numbers " Hundred" append ] dip
+        0 = [ " and " append ] unless
     ] if ;
 
 : tens-place ( n -- str )
     100 mod dup 20 >= [
         10 /mod [ tens ] dip
-        dup zero? [ drop ] [ "-" swap small-numbers 3append ] if
+        dup 0 = [ drop ] [ small-numbers "-" glue ] if
     ] [
-        dup zero? [ drop "" ] [ small-numbers ] if
+        dup 0 = [ drop "" ] [ small-numbers ] if
     ] if ;
 
 : 3digits>text ( n -- str )
@@ -59,15 +58,15 @@ SYMBOL: and-needed?
     [ " " glue ] unless-empty ;
 
 : append-with-conjunction ( str1 str2 -- newstr )
-    over length zero? [
+    over length 0 = [
         nip
     ] [
-        and-needed? get " and " ", " ? rot 3append
-        and-needed? off
+        swap and-needed? get " and " ", " ?
+        glue and-needed? off
     ] if ;
 
 : (recombine) ( str index seq -- newstr )
-    2dup nth zero? [
+    2dup nth 0 = [
         2drop
     ] [
         text-with-scale append-with-conjunction
index 3d9428adda4a5a2918a36cb96f3299eb34c3f994..515d7c7b993e4def7e215e3062ef65bd259e4a2c 100644 (file)
@@ -3,5 +3,5 @@
 USING: math math.constants ;
 IN: math.trig
 
-: deg>rad pi * 180 / ; inline
-: rad>deg 180 * pi / ; inline
+: deg>rad ( x -- y ) pi * 180 / ; inline
+: rad>deg ( x -- y ) 180 * pi / ; inline
index cfdc28bb3d607160194a9b6ec0342a3c944ff9bc..5ad1d944d37276fc770c4e3048ffd15359e7b1e8 100755 (executable)
@@ -31,32 +31,33 @@ SYMBOL: total
 
 : canonicalize-specializer-2 ( specializer -- specializer' )
     [
-        >r
-        {
-            { [ dup integer? ] [ ] }
-            { [ dup word? ] [ hooks get index ] }
-        } cond args get + r>
+        [
+            {
+                { [ dup integer? ] [ ] }
+                { [ dup word? ] [ hooks get index ] }
+            } cond args get +
+        ] dip
     ] assoc-map ;
 
 : canonicalize-specializer-3 ( specializer -- specializer' )
-    >r total get object <array> dup <enum> r> update ;
+    [ total get object <array> dup <enum> ] dip update ;
 
 : canonicalize-specializers ( methods -- methods' hooks )
     [
-        [ >r canonicalize-specializer-0 r> ] assoc-map
+        [ [ canonicalize-specializer-0 ] dip ] assoc-map
 
         0 args set
         V{ } clone hooks set
 
-        [ >r canonicalize-specializer-1 r> ] assoc-map
+        [ [ canonicalize-specializer-1 ] dip ] assoc-map
 
         hooks [ natural-sort ] change
 
-        [ >r canonicalize-specializer-2 r> ] assoc-map
+        [ [ canonicalize-specializer-2 ] dip ] assoc-map
 
         args get hooks get length + total set
 
-        [ >r canonicalize-specializer-3 r> ] assoc-map
+        [ [ canonicalize-specializer-3 ] dip ] assoc-map
 
         hooks get
     ] with-scope ;
@@ -79,8 +80,8 @@ SYMBOL: total
     inline
 
 : topological-sort ( seq quot -- newseq )
-    >r >vector [ dup empty? not ] r>
-    [ dupd maximal-element >r over delete-nth r> ] curry
+    [ >vector [ dup empty? not ] ] dip
+    [ dupd maximal-element [ over delete-nth ] dip ] curry
     [ ] produce nip ; inline
 
 : classes< ( seq1 seq2 -- lt/eq/gt )
@@ -103,7 +104,7 @@ SYMBOL: total
         { 0 [ [ dup ] ] }
         { 1 [ [ over ] ] }
         { 2 [ [ pick ] ] }
-        [ 1- picker [ >r ] [ r> swap ] surround ]
+        [ 1- picker [ dip swap ] curry ]
     } case ;
 
 : (multi-predicate) ( class picker -- quot )
@@ -124,11 +125,11 @@ SYMBOL: total
 ERROR: no-method arguments generic ;
 
 : make-default-method ( methods generic -- quot )
-    >r argument-count r> [ >r narray r> no-method ] 2curry ;
+    [ argument-count ] dip [ [ narray ] dip no-method ] 2curry ;
 
 : multi-dispatch-quot ( methods generic -- quot )
     [ make-default-method ]
-    [ drop [ >r multi-predicate r> ] assoc-map reverse ]
+    [ drop [ [ multi-predicate ] dip ] assoc-map reverse ]
     2bi alist>quot ;
 
 ! Generic words
@@ -172,8 +173,9 @@ M: method-body crossref?
     swap >>props ;
 
 : with-methods ( word quot -- )
-    over >r >r "multi-methods" word-prop
-    r> call r> update-generic ; inline
+    over [
+        [ "multi-methods" word-prop ] dip call
+    ] dip update-generic ; inline
 
 : reveal-method ( method classes generic -- )
     [ set-at ] with-methods ;
@@ -245,7 +247,6 @@ M: no-method error.
     define ; parsing
 
 ! Definition protocol. We qualify core generics here
-USE: qualified
 QUALIFIED: syntax
 
 syntax:M: generic definer drop \ GENERIC: f ;
@@ -253,7 +254,7 @@ syntax:M: generic definer drop \ GENERIC: f ;
 syntax:M: generic definition drop f ;
 
 PREDICATE: method-spec < array
-    unclip generic? >r [ class? ] all? r> and ;
+    unclip generic? [ [ class? ] all? ] dip and ;
 
 syntax:M: method-spec where
     dup unclip method [ ] [ first ] ?if where ;
index c112a677768202a7355985e32aeb8699a1caff0c..64363af428ae724959cc627be064c722bf2c12c0 100644 (file)
@@ -16,7 +16,7 @@ DEFER: fake
 [ t ] [ { } \ fake <method> method-body? ] unit-test
 
 [
-    [ { } [ ] ] [ \ fake methods prepare-methods >r sort-methods r> ] unit-test
+    [ { } [ ] ] [ \ fake methods prepare-methods [ sort-methods ] dip ] unit-test
 
     [ t ] [ { } \ fake multi-dispatch-quot callable? ] unit-test
 
diff --git a/extra/namespaces/lib/authors.txt b/extra/namespaces/lib/authors.txt
deleted file mode 100644 (file)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/extra/namespaces/lib/lib-tests.factor b/extra/namespaces/lib/lib-tests.factor
deleted file mode 100755 (executable)
index d3f5a12..0000000
+++ /dev/null
@@ -1 +0,0 @@
-\r
diff --git a/extra/namespaces/lib/lib.factor b/extra/namespaces/lib/lib.factor
deleted file mode 100755 (executable)
index ae0887e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-USING: kernel namespaces namespaces.private quotations sequences
-       assocs.lib math.parser math generalizations locals mirrors
-       macros ;
-
-IN: namespaces.lib
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: save-namestack ( quot -- ) namestack >r call r> set-namestack ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: make* ( seq -- seq ) [ dup quotation? [ call ] [ ] if ] map ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: set* ( val var -- ) namestack* set-assoc-stack ;
-
-: make-object ( quot class -- object )
-    new [ <mirror> swap bind ] keep ; inline
-
-: with-object ( object quot -- )
-    [ <mirror> ] dip bind ; inline
diff --git a/extra/namespaces/lib/summary.txt b/extra/namespaces/lib/summary.txt
deleted file mode 100644 (file)
index ec8129b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Non-core namespace words
diff --git a/extra/namespaces/lib/tags.txt b/extra/namespaces/lib/tags.txt
deleted file mode 100644 (file)
index 42d711b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-collections
index 0da7a9c9fbd0171cb0de22f23e6aec84866a2187..4169050e6fc171006c7e49b65023ec9a36515a5e 100644 (file)
@@ -1,5 +1,5 @@
 
-USING: kernel sequences assocs qualified circular sets fry sequences.lib ;
+USING: kernel sequences assocs circular sets fry ;
 
 USING: math multi-methods ;
 
@@ -62,8 +62,8 @@ METHOD: as { sequence object  number }      pick set-nth ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-METHOD: is-of { number object  sequence } dup >r swapd set-nth r> ;
-METHOD: as-of { object  number sequence } dup >r       set-nth r> ;
+METHOD: is-of { number object  sequence } dup [ swapd set-nth ] dip ;
+METHOD: as-of { object  number sequence } dup [       set-nth ] dip ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -93,8 +93,8 @@ METHOD: as { assoc object object }      pick set-at ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-METHOD: is-of { object object assoc } dup >r swapd set-at r> ;
-METHOD: as-of { object object assoc } dup >r       set-at r> ;
+METHOD: is-of { object object assoc } dup [ swapd set-at ] dip ;
+METHOD: as-of { object object assoc } dup [       set-at ] dip ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -213,7 +213,7 @@ METHOD: as-mutate { object object assoc }       set-at ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: snip          ( seq a b -- seq ) >r over r> [ head ] [ tail ] 2bi* append ;
+: snip          ( seq a b -- seq ) [ over ] dip [ head ] [ tail ] 2bi* append ;
 : snip-this     ( a b seq -- seq ) -rot snip ;
 : snip!         ( seq a b -- seq )      pick delete-slice ;
 : snip-this!    ( a b seq -- seq ) -rot pick delete-slice ;
@@ -222,7 +222,7 @@ METHOD: as-mutate { object object assoc }       set-at ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: invert-index ( seq i -- seq i ) >r dup length 1 - r> - ;
+: invert-index ( seq i -- seq i ) [ dup length 1 - ] dip - ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -236,9 +236,9 @@ METHOD: as-mutate { object object assoc }       set-at ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: insert ( seq i obj -- seq ) >r cut r> prefix append ;
+: insert ( seq i obj -- seq ) [ cut ] dip prefix append ;
 
-: splice ( seq i seq -- seq ) >r cut r> prepend append ;
+: splice ( seq i seq -- seq ) [ cut ] dip prepend append ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
diff --git a/extra/obj/alist/alist.factor b/extra/obj/alist/alist.factor
deleted file mode 100644 (file)
index a4e8ebb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-USING: arrays sequences ;
-
-IN: obj.alist
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-PREDICATE: alist < sequence [ pair? ] all? ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
diff --git a/extra/obj/examples/todo/todo.factor b/extra/obj/examples/todo/todo.factor
deleted file mode 100644 (file)
index 3d54547..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-
-USING: kernel sequences sets combinators.cleave
-       obj obj.view obj.util obj.print ;
-
-IN: obj.examples.todo
-
-SYM: person types adjoin
-SYM: todo   types adjoin
-
-SYM: owners properties adjoin
-SYM: eta    properties adjoin
-SYM: notes  properties adjoin
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: slava { type person } define-object
-SYM: doug  { type person } define-object
-SYM: ed    { type person } define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: compiler-bugs
-  {
-    type todo
-    owners { slava }
-    notes  {
-             "Investitage FEP on Terrorist"
-             "Problem with cutler in VirtualBox?"
-           }
-  }
-define-object
-
-SYM: remove-old-accessors-from-core
-  {
-    type todo
-    owners { slava }
-  }
-define-object
-
-SYM: move-db-and-web-framework-to-basis
-  {
-   type todo
-   owners { slava }
-  }
-define-object
-
-SYM: remove-old-accessors-from-basis
-  {
-    type todo
-    owners { doug ed }
-  }
-define-object
-
-SYM: blas-on-bsd
-  {
-    type todo
-    owners { slava doug }
-  }
-define-object
-
-SYM: multi-methods-backend
-  {
-    type todo
-    owners { slava }
-  }
-define-object
-
-SYM: update-core-for-multi-methods { type todo owners { slava } } define-object
-SYM: update-basis-for-multi-methods { type todo } define-object
-SYM: update-extra-for-multi-methods { type todo } define-object
-
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: todo-list ( -- )
-  objects [ type -> todo = ] filter
-    [ { [ self -> ] [ owners -> ] [ eta -> ] } 1arr ]
-  map
-  { "ITEM" "OWNERS" "ETA" } prefix
-  print-table ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
diff --git a/extra/obj/misc/misc.factor b/extra/obj/misc/misc.factor
deleted file mode 100644 (file)
index 06b3056..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-USING: kernel namespaces sequences assocs sequences.deep obj ;
-
-IN: obj.misc
-
-: related ( obj -- seq )
-  objects dupd remove [ get values flatten member? ] with filter ;
-
diff --git a/extra/obj/obj.factor b/extra/obj/obj.factor
deleted file mode 100644 (file)
index a4af627..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-
-USING: kernel words namespaces arrays vectors hashtables
-       sequences assocs sets grouping
-       combinators.conditional
-       combinators.short-circuit
-       obj.util obj.alist ;
-
-IN: obj
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: properties ( -- properties ) V{ } ;
-
-SYM: self  properties adjoin
-SYM: type  properties adjoin
-SYM: title properties adjoin
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: types ( -- types ) V{ } ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: >obj ( val -- obj ) [ symbol? ] [ get ] [ ] 1if ;
-
-: -> ( obj pro -- val ) swap >obj at ;
-
-PREDICATE: obj < alist { [ self -> ] [ type -> ] } 1&& ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: objects ( -- objects ) V{ } ;
-
-: define-object ( symbol table -- )
-  2 group >vector
-  self rot 2array prefix
-  dup dup self -> set-global
-  self -> objects adjoin ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-PREDICATE: ptr < symbol get obj? ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
diff --git a/extra/obj/papers/papers.factor b/extra/obj/papers/papers.factor
deleted file mode 100644 (file)
index 46683ad..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-
-USING: sets obj obj.util obj.view ;
-
-IN: obj.papers
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: title        properties adjoin
-SYM: abstract     properties adjoin
-SYM: authors      properties adjoin
-SYM: file         properties adjoin
-SYM: date         properties adjoin
-SYM: participants properties adjoin
-SYM: description  properties adjoin
-
-SYM: chapter      properties adjoin
-SYM: section      properties adjoin
-SYM: paragraph    properties adjoin
-SYM: content      properties adjoin
-
-SYM: subjects     properties adjoin
-SYM: source       properties adjoin
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: paper  types adjoin
-SYM: person types adjoin
-SYM: event  types adjoin
-
-SYM: excerpt types adjoin
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: bay-wei-chang       { type person } define-object
-SYM: chuck-moore         { type person } define-object
-SYM: craig-chambers      { type person } define-object
-SYM: david-ungar         { type person } define-object
-SYM: frank-g-halasz      { type person } define-object
-SYM: gerald-jay-sussman  { type person } define-object
-SYM: guy-lewis-steele-jr { type person } define-object
-SYM: randall-b-smith     { type person } define-object
-SYM: randall-h-trigg     { type person } define-object
-SYM: robert-adams        { type person } define-object
-SYM: russell-noftsker    { type person } define-object
-SYM: thomas-p-moran      { type person } define-object
-SYM: urs-holzle          { type person } define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: programming-as-an-experience
-  {
-    type     paper
-    title    "Programming as an Experience: The Inspiration for Self"
-    abstract "The Self system attempts to integrate intellectual and non-intellectual aspects of programming to create an overall experience. The language semantics, user interface, and implementation each help create this integrated experience. The language semantics embed the programmer in a uniform world of simple ob jects that can be modified without appealing to definitions of abstractions. In a similar way, the graphical interface puts the user into a uniform world of tangible objects that can be directly manipulated and changed without switching modes. The implementation strives to support the world-of-objects illusion by minimiz ing perceptible pauses and by providing true source-level semantics without sac rificing performance. As a side benefit, it encourages factoring. Although we see areas that fall short of the vision, on the whole, the language, interface, and im plementation conspire so that the Self programmer lives and acts in a consistent and malleable world of objects."
-    authors  { randall-b-smith david-ungar }
-    date     1995
-  }
-define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: self-the-power-of-simplicity
-  {
-    type paper
-    title "Self: The Power of Simplicity"
-    abstract "Self is an object-oriented language for exploratory programming based on a small number of simple and concrete ideas: prototypes, slots, and behavior. Prototypes combine inheritance and instantiation to provide a framework that is simpler and more flexible than most object-oriented languages. Slots unite variables and procedures into a single construct. This permits the inheritance hierarchy to take over the function of lexical scoping in conventional languages. Finally, because Self does not distinguish state from behavior, it narrows the gaps between ordinary objects, procedures, and closures. Self's simplicity and expressiveness offer new insights into object-oriented computation."
-    authors { randall-b-smith david-ungar }
-    date 1987
-  }
-define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: parents-are-shared-parts
-  {
-    type paper
-    title "Parents are Shared Parts: Inheritance and Encapsulation in Self"
-    abstract "The design of inheritance and encapsulation in Self, an object-oriented language based on prototypes, results from understanding that inheritance allows parents to be shared parts of their children. The programmer resolves ambiguities arising from multiple inheritance by prioritizing an object's parents. Unifying unordered and ordered multiple inheritance supports differential programming of abstractions and methods, combination of unrelated abstractions, unequal combination of abstractions, and mixins. In Self, a private slot may be accessed if the sending method is a shared part of the receiver, allowing privileged communication between related objects. Thus, classless Self enjoys the benefits of class-based encapsulation."
-    authors { craig-chambers david-ungar bay-wei-chang urs-holzle }
-    date 1991
-  }
-define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: organizing-programs-without-classes
-  {
-    type paper
-    title "Organizing Programs Without Classes"
-    abstract "All organizational functions carried out by classes can be accomplished in a simple and natural way by object inheritance in classless languages, with no need for special mechanisms. A single model--dividing types into prototypes and traits--supports sharing of behavior and extending or replacing representations. A natural extension, dynamic object inheritance, can model behavioral modes. Object inheritance can also be used to provide structured name spaces for well-known objects. Classless languages can even express 'class-based' encapsulation. These stylized uses of object inheritance become instantly recognizable idioms, and extend the repertory of organizing principles to cover a wider range of programs."
-    authors { david-ungar craig-chambers bay-wei-chang urs-holzle }
-    date 1991
-  }
-define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: scheme-an-interpreter-for-extended-lambda-calculus
-  {
-    type paper
-    title "Scheme: An Interpreter for Extended Lambda Calculus"
-    abstract "Inspired by ACTORS [Greif and Hewitt] [Smith and Hewitt], we have implemented an interpreter for a LISP-like language, SCHEME, based on the lambda calculus [Church], but extended for side effects, multiprocessing, and process synchronization. The purpose of this implementation is tutorial. We wish to: (1) alleviate the confusion caused by Micro-PLANNER, CONNIVER, etc. by clarifying the embedding of non-recursive control structures in a recursive host language like LISP. (2) explain how to use these control structures, independent of such issues as pattern matching and data base manipulation. (3) have a simple concrete experimental domain for certain issues of programming semantics and style."
-    authors { gerald-jay-sussman guy-lewis-steele-jr }
-    date 1975
-  }
-define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: symbolics-is-founded
-  {
-    type         event
-    participants { russell-noftsker robert-adams }
-    date         1980
-  }
-define-object
-
-SYM: symbolics-funding-from-gi
-  {
-    type        event
-    description "Symbolics receives $500,000 from General Instruments"
-    date        1982
-  }
-define-object
-
-SYM: symbolics-files-for-bankruptcy
-  {
-    type event
-    date "1993-01-28"
-  }
-define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: the-evolution-of-forth
-  {
-    type paper
-    title "The Evolution of Forth"
-    authors { chuck-moore "elizabeth-d-rather" "donald-r-colburn" }
-    abstract
-    "Forth is unique among programming languages in that its development and proliferation has been a grass-roots effort unsupported by any major corporate or academic sponsors. Originally conceived and developed by a single individual, its later development has progressed under two significant influences: professional programmers who developed tools to solve application problems and then commercialized them, and the interests of hobbyists concerned with free distribution of Forth. These influences have produced a language markedly different from traditional programming languages."
-    date 1993
-  }
-define-object
-
-SYM: first-complete-stand-alone-forth
-  {
-    type event
-    participants { chuck-moore }
-    date 1971
-  }
-define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: notecards-in-a-nutshell
-  {
-    type paper
-    authors { frank-g-halasz thomas-p-moran randall-h-trigg }
-    date 1987
-  }
-define-object
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYM: the-evolution-of-forth-excerpt-2-1-1
-  {
-    type excerpt
-    source the-evolution-of-forth
-    chapter 2
-    section 1
-    paragraph 1
-    content
-    "Moore developed the first complete, stand-alone implementation of Forth in 1971 for the 11-meter radio telescope operated by the National Radio Astronomy Observatory (NRAO) at Kitt Peak, Arizona. This system ran on two early minicomputers (a 16 KB DDP-116 and a 32 KB H316) joined by a serial link. Both a multiprogrammed system and a multiprocessor system (in that both computers shared responsibility for controlling the telescope and its scientific instruments), it was responsible for pointing and tracking the telescope, collecting data and recording it on magnetic tape, and supporting an interactive graphics terminal on which an astronomer could analyze previously recorded data. The multiprogrammed nature of the system allowed all these functions to be performed concurrently, without timing conflicts or other interference."
-    subjects { chuck-moore first-complete-stand-alone-forth }
-  }
-define-object
-
diff --git a/extra/obj/print/print.factor b/extra/obj/print/print.factor
deleted file mode 100644 (file)
index 000e161..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-
-USING: kernel arrays strings sequences assocs io io.styles prettyprint colors
-       combinators.conditional ;
-
-IN: obj.print
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: write-wrapped ( string -- ) H{ { wrap-margin 500 } } [ write ] with-nesting ;
-
-! : print-elt ( val -- )
-!   {
-!     { [ string? ] [ write-wrapped ] }
-!     { [ array?  ] [ [ . ] each    ] }
-!     { [ drop t  ] [ . ] }
-!   }
-!   1cond ;
-
-USING: accessors vocabs help.markup ;
-
-: print-elt ( val -- )
-  {
-    { [ vocab?  ] [ [ name>> ] [ ] bi write-object ] }
-    { [ string? ] [ write-wrapped ] }
-    { [ array?  ] [ [ . ] each    ] }
-    { [ drop t  ] [ . ] }
-  }
-  1cond ;
-
-: print-grid ( grid -- )
-  H{ { table-gap { 10 10 } } { table-border T{ rgba f 0 0 0 1 } } }
-  [ [ [ [ [ print-elt ] with-cell ] each ] with-row ] each ] tabular-output ;
-
-: print-table ( assoc -- ) >alist print-grid ;
-
-: print-seq ( seq -- ) [ 1array ] map print-grid ;
-
diff --git a/extra/obj/util/util.factor b/extra/obj/util/util.factor
deleted file mode 100644 (file)
index 086fcd1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-USING: kernel parser words ;
-
-IN: obj.util
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: SYM: CREATE-WORD dup define-symbol parsed ; parsing
\ No newline at end of file
diff --git a/extra/obj/view/view.factor b/extra/obj/view/view.factor
deleted file mode 100644 (file)
index cf5ca33..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-
-USING: kernel words namespaces arrays sequences prettyprint
-       help.topics help.markup bake combinators.cleave
-       obj obj.misc obj.print ;
-
-IN: obj.view
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: $tab ( seq -- ) first print-table ;
-: $obj ( seq -- ) first print-table ;
-: $seq ( seq -- ) first print-seq   ;
-: $ptr ( seq -- ) first get print-table ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-PREDICATE: obj-type < symbol types member? ;
-
-M: obj-type article-title ( type -- title ) unparse ;
-
-M: obj-type article-content ( type -- content )
-   objects [ type -> = ] with filter
-   { $seq , } bake ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-M: ptr article-title ( ptr -- title ) [ title -> ] [ unparse ] bi or ;
-
-M: ptr article-content ( ptr -- content )
-   {
-     [ get     { $obj , } bake ]
-     [ drop { $heading "Related\n" } ]
-     [ related { $seq , } bake ]
-   }
-   1arr ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-PREDICATE: obj-list < word \ objects = ;
-
-M: obj-list article-title ( objects -- title ) drop "Objects" ;
-
-! M: obj-list article-content ( objects -- title )
-!    execute
-!    [ [ type -> ] [ ] bi 2array ] map
-!    { $tab , } bake ;
-
-M: obj-list article-content ( objects -- title )
-   drop
-   objects
-   [ [ type -> ] [ ] bi 2array ] map
-   { $tab , } bake ;
\ No newline at end of file
diff --git a/extra/opengl/capabilities/authors.txt b/extra/opengl/capabilities/authors.txt
deleted file mode 100644 (file)
index 6a0dc72..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
\ No newline at end of file
diff --git a/extra/opengl/capabilities/capabilities-docs.factor b/extra/opengl/capabilities/capabilities-docs.factor
deleted file mode 100644 (file)
index f5424e1..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-USING: help.markup help.syntax io kernel math quotations
-opengl.gl multiline assocs ;
-IN: opengl.capabilities
-
-HELP: gl-version
-{ $values { "version" "The version string from the OpenGL implementation" } }
-{ $description "Wrapper for " { $snippet "GL_VERSION glGetString" } " that removes the vendor-specific information from the version string." } ;
-
-HELP: gl-vendor-version
-{ $values { "version" "The vendor-specific version information from the OpenGL implementation" } }
-{ $description "Wrapper for " { $snippet "GL_VERSION glGetString" } " that returns only the vendor-specific information from the version string." } ;
-
-HELP: has-gl-version?
-{ $values { "version" "A version string" } { "?" "A boolean value" } }
-{ $description "Compares the version string returned by " { $link gl-version } " to " { $snippet "version" } ". Returns true if the implementation version meets or exceeds " { $snippet "version" } "." } ;
-
-HELP: require-gl-version
-{ $values { "version" "A version string" } }
-{ $description "Throws an exception if " { $link has-gl-version? } " returns false for " { $snippet "version" } "." } ;
-
-HELP: glsl-version
-{ $values { "version" "The GLSL version string from the OpenGL implementation" } }
-{ $description "Wrapper for " { $snippet "GL_SHADING_LANGUAGE_VERSION glGetString" } " that removes the vendor-specific information from the version string." } ;
-
-HELP: glsl-vendor-version
-{ $values { "version" "The vendor-specific GLSL version information from the OpenGL implementation" } }
-{ $description "Wrapper for " { $snippet "GL_SHADING_LANGUAGE_VERSION glGetString" } " that returns only the vendor-specific information from the version string." } ;
-
-HELP: has-glsl-version?
-{ $values { "version" "A version string" } { "?" "A boolean value" } }
-{ $description "Compares the version string returned by " { $link glsl-version } " to " { $snippet "version" } ". Returns true if the implementation version meets or exceeds " { $snippet "version" } "." } ;
-
-HELP: require-glsl-version
-{ $values { "version" "A version string" } }
-{ $description "Throws an exception if " { $link has-glsl-version? } " returns false for " { $snippet "version" } "." } ;
-
-HELP: gl-extensions
-{ $values { "seq" "A sequence of strings naming the implementation-supported OpenGL extensions" } }
-{ $description "Wrapper for " { $snippet "GL_EXTENSIONS glGetString" } " that returns a sequence of extension names supported by the OpenGL implementation." } ;
-
-HELP: has-gl-extensions?
-{ $values { "extensions" "A sequence of extension name strings" } { "?" "A boolean value" } }
-{ $description "Returns true if the set of " { $snippet "extensions" } " is a subset of the implementation-supported extensions returned by " { $link gl-extensions } "." } ;
-
-HELP: has-gl-version-or-extensions?
-{ $values { "version" "A version string" } { "extensions" "A sequence of extension name strings" } { "?" "a boolean" } }
-{ $description "Returns true if either " { $link has-gl-version? } " or " { $link has-gl-extensions? } " returns true for " { $snippet "version" } " or " { $snippet "extensions" } ", respectively. Intended for use when required OpenGL functionality can be verified either by a minimum version or a set of equivalent extensions." } ;
-
-HELP: require-gl-extensions
-{ $values { "extensions" "A sequence of extension name strings" } }
-{ $description "Throws an exception if " { $link has-gl-extensions? } " returns false for " { $snippet "extensions" } "." } ;
-
-HELP: require-gl-version-or-extensions
-{ $values { "version" "A version string" } { "extensions" "A sequence of extension name strings" } }
-{ $description "Throws an exception if neither " { $link has-gl-version? } " nor " { $link has-gl-extensions? } " returns true for " { $snippet "version" } " or " { $snippet "extensions" } ", respectively. Intended for use when required OpenGL functionality can be verified either by a minimum version or a set of equivalent extensions." } ;
-
-{ require-gl-version require-glsl-version require-gl-extensions require-gl-version-or-extensions has-gl-version? has-glsl-version? has-gl-extensions? has-gl-version-or-extensions? gl-version glsl-version gl-extensions } related-words
-
-ABOUT: "gl-utilities"
diff --git a/extra/opengl/capabilities/capabilities.factor b/extra/opengl/capabilities/capabilities.factor
deleted file mode 100755 (executable)
index 3972fea..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-! Copyright (C) 2008 Joe Groff.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel namespaces make sequences splitting opengl.gl
-continuations math.parser math arrays sets math.order ;
-IN: opengl.capabilities
-
-: (require-gl) ( thing require-quot make-error-quot -- )
-    -rot dupd call
-    [ 2drop ]
-    [ swap " " make throw ]
-    if ; inline
-
-: gl-extensions ( -- seq )
-    GL_EXTENSIONS glGetString " " split ;
-: has-gl-extensions? ( extensions -- ? )
-    gl-extensions swap [ over member? ] all? nip ;
-: (make-gl-extensions-error) ( required-extensions -- )
-    gl-extensions diff
-    "Required OpenGL extensions not supported:\n" %
-    [ "    " % % "\n" % ] each ;
-: require-gl-extensions ( extensions -- )
-    [ has-gl-extensions? ]
-    [ (make-gl-extensions-error) ]
-    (require-gl) ;
-
-: version-seq ( version-string -- version-seq )
-    "." split [ string>number ] map ;
-
-: version-before? ( version1 version2 -- ? )
-    swap version-seq swap version-seq before=? ;
-
-: (gl-version) ( -- version vendor )
-    GL_VERSION glGetString " " split1 ;
-: gl-version ( -- version )
-    (gl-version) drop ;
-: gl-vendor-version ( -- version )
-    (gl-version) nip ;
-: has-gl-version? ( version -- ? )
-    gl-version version-before? ;
-: (make-gl-version-error) ( required-version -- )
-    "Required OpenGL version " % % " not supported (" % gl-version % " available)" % ;
-: require-gl-version ( version -- )
-    [ has-gl-version? ]
-    [ (make-gl-version-error) ]
-    (require-gl) ;
-
-: (glsl-version) ( -- version vendor )
-    GL_SHADING_LANGUAGE_VERSION glGetString " " split1 ;
-: glsl-version ( -- version )
-    (glsl-version) drop ;
-: glsl-vendor-version ( -- version )
-    (glsl-version) nip ;
-: has-glsl-version? ( version -- ? )
-    glsl-version version-before? ;
-: require-glsl-version ( version -- )
-    [ has-glsl-version? ]
-    [ "Required GLSL version " % % " not supported (" % glsl-version % " available)" % ]
-    (require-gl) ;
-
-: has-gl-version-or-extensions? ( version extensions -- ? )
-    has-gl-extensions? swap has-gl-version? or ;
-
-: require-gl-version-or-extensions ( version extensions -- )
-    2array [ first2 has-gl-version-or-extensions? ] [
-        dup first (make-gl-version-error) "\n" %
-        second (make-gl-extensions-error) "\n" %
-    ] (require-gl) ;
diff --git a/extra/opengl/capabilities/summary.txt b/extra/opengl/capabilities/summary.txt
deleted file mode 100644 (file)
index d31b63b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Testing for OpenGL versions and extensions
\ No newline at end of file
diff --git a/extra/opengl/capabilities/tags.txt b/extra/opengl/capabilities/tags.txt
deleted file mode 100644 (file)
index 77282be..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-opengl
-bindings
index 92778194e3011c417cee13174fb27a1942149393..c8fe2b4882a1d9a59ad562664f8987dada4e2086 100755 (executable)
@@ -3,7 +3,7 @@ namespaces opengl opengl.gl sequences ui ui.gadgets ui.gestures
 ui.render accessors combinators ;
 IN: opengl.demo-support
 
-: FOV 2.0 sqrt 1+ ; inline
+: FOV ( -- x ) 2.0 sqrt 1+ ; inline
 : MOUSE-MOTION-SCALE 0.5 ; inline
 : KEY-ROTATE-STEP 10.0 ; inline
 
@@ -60,7 +60,7 @@ M: demo-gadget pref-dim* ( gadget -- dim )
     ] [
         GL_MODELVIEW glMatrixMode
         glLoadIdentity
-        [ >r 0.0 0.0 r> distance>> neg glTranslatef ]
+        [ [ 0.0 0.0 ] dip distance>> neg glTranslatef ]
         [ pitch>> 1.0 0.0 0.0 glRotatef ]
         [ yaw>>   0.0 1.0 0.0 glRotatef ]
         tri
diff --git a/extra/opengl/framebuffers/authors.txt b/extra/opengl/framebuffers/authors.txt
deleted file mode 100644 (file)
index 6a0dc72..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
\ No newline at end of file
diff --git a/extra/opengl/framebuffers/framebuffers-docs.factor b/extra/opengl/framebuffers/framebuffers-docs.factor
deleted file mode 100644 (file)
index c5507dc..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-USING: help.markup help.syntax io kernel math quotations
-opengl.gl multiline assocs ;
-IN: opengl.framebuffers
-
-HELP: gen-framebuffer
-{ $values { "id" integer } }
-{ $description "Wrapper for " { $link glGenFramebuffersEXT } " to handle the common case of generating a single framebuffer ID." } ;
-
-HELP: gen-renderbuffer
-{ $values { "id" integer } }
-{ $description "Wrapper for " { $link glGenRenderbuffersEXT } " to handle the common case of generating a single render buffer ID." } ;
-
-HELP: delete-framebuffer
-{ $values { "id" integer } }
-{ $description "Wrapper for " { $link glDeleteFramebuffersEXT } " to handle the common case of deleting a single framebuffer ID." } ;
-
-HELP: delete-renderbuffer
-{ $values { "id" integer } }
-{ $description "Wrapper for " { $link glDeleteRenderbuffersEXT } " to handle the common case of deleting a single render buffer ID." } ;
-
-{ gen-framebuffer delete-framebuffer } related-words
-{ gen-renderbuffer delete-renderbuffer } related-words
-
-HELP: framebuffer-incomplete?
-{ $values { "status/f" "The framebuffer error code, or " { $snippet "f" } " if the framebuffer is render-complete." } }
-{ $description "Checks the framebuffer currently bound by " { $link glBindFramebufferEXT } " or " { $link with-framebuffer } " to see if it is incomplete, i.e., it is not ready to be rendered to." } ;
-
-HELP: check-framebuffer
-{ $description "Checks the framebuffer currently bound by " { $link glBindFramebufferEXT } " or " { $link with-framebuffer } " with " { $link framebuffer-incomplete? } ", and throws a descriptive error if the framebuffer is incomplete." } ;
-
-HELP: with-framebuffer
-{ $values { "id" "The id of a framebuffer object." } { "quot" "a quotation" } }
-{ $description "Binds framebuffer " { $snippet "id" } " in the dynamic extent of " { $snippet "quot" } ", restoring the window framebuffer when finished." } ;
-
-ABOUT: "gl-utilities"
\ No newline at end of file
diff --git a/extra/opengl/framebuffers/framebuffers.factor b/extra/opengl/framebuffers/framebuffers.factor
deleted file mode 100644 (file)
index 346789e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-! Copyright (C) 2008 Joe Groff.
-! See http://factorcode.org/license.txt for BSD license.
-USING: opengl opengl.gl combinators continuations kernel
-alien.c-types ;
-IN: opengl.framebuffers
-
-: gen-framebuffer ( -- id )
-    [ glGenFramebuffersEXT ] (gen-gl-object) ;
-: gen-renderbuffer ( -- id )
-    [ glGenRenderbuffersEXT ] (gen-gl-object) ;
-
-: delete-framebuffer ( id -- )
-    [ glDeleteFramebuffersEXT ] (delete-gl-object) ;
-: delete-renderbuffer ( id -- )
-    [ glDeleteRenderbuffersEXT ] (delete-gl-object) ;
-
-: framebuffer-incomplete? ( -- status/f )
-    GL_FRAMEBUFFER_EXT glCheckFramebufferStatusEXT
-    dup GL_FRAMEBUFFER_COMPLETE_EXT = f rot ? ;
-
-: framebuffer-error ( status -- * )
-    { 
-        { GL_FRAMEBUFFER_COMPLETE_EXT [ "framebuffer complete" ] }
-        { GL_FRAMEBUFFER_UNSUPPORTED_EXT [ "framebuffer configuration unsupported" ] }
-        { GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT [ "framebuffer incomplete (incomplete attachment)" ] }
-        { GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT [ "framebuffer incomplete (missing attachment)" ] }
-        { GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT [ "framebuffer incomplete (dimension mismatch)" ] }
-        { GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT [ "framebuffer incomplete (format mismatch)" ] }
-        { GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT [ "framebuffer incomplete (draw buffer(s) have no attachment)" ] }
-        { GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT [ "framebuffer incomplete (read buffer has no attachment)" ] }
-        [ drop gl-error "unknown framebuffer error" ]
-    } case throw ;
-
-: check-framebuffer ( -- )
-    framebuffer-incomplete? [ framebuffer-error ] when* ;
-
-: with-framebuffer ( id quot -- )
-    GL_FRAMEBUFFER_EXT rot glBindFramebufferEXT
-    [ GL_FRAMEBUFFER_EXT 0 glBindFramebufferEXT ] [ ] cleanup ; inline
-
-: framebuffer-attachment ( attachment -- id )
-    GL_FRAMEBUFFER_EXT swap GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT
-    0 <uint> [ glGetFramebufferAttachmentParameterivEXT ] keep *uint ;
diff --git a/extra/opengl/framebuffers/summary.txt b/extra/opengl/framebuffers/summary.txt
deleted file mode 100644 (file)
index 3ef713a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Rendering to offscreen textures using the GL_EXT_framebuffer_object extension
\ No newline at end of file
diff --git a/extra/opengl/framebuffers/tags.txt b/extra/opengl/framebuffers/tags.txt
deleted file mode 100644 (file)
index 77282be..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-opengl
-bindings
index d028ea958cfd40fb90081611e58a82c6b97808a0..b24783e4ef68e2537f30e3ac709c2a50e51a2267 100644 (file)
@@ -23,8 +23,7 @@ textures init-cache
 refcounts init-cache
 
 : refcount-change ( gadget quot -- )
-    >r cache-key* refcounts get
-    [ [ 0 ] unless* ] r> compose change-at ;
+    [ cache-key* refcounts get [ [ 0 ] unless* ] ] dip compose change-at ;
 
 TUPLE: cache-entry tex dims ;
 C: <entry> cache-entry
@@ -86,7 +85,7 @@ M: texture-gadget ungraft* ( gadget -- )
     gen-texture [ (render-bytes) ] keep ;
 
 : render-bytes* ( dims bytes format -- texture dims )
-    pick >r render-bytes r> ;
+    pick [ render-bytes ] dip ;
 
 :: four-corners ( dim -- )
     [let* | w [ dim first ]
diff --git a/extra/opengl/shaders/authors.txt b/extra/opengl/shaders/authors.txt
deleted file mode 100644 (file)
index 6a0dc72..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
\ No newline at end of file
diff --git a/extra/opengl/shaders/shaders-docs.factor b/extra/opengl/shaders/shaders-docs.factor
deleted file mode 100644 (file)
index 1a10071..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-USING: help.markup help.syntax io kernel math quotations
-opengl.gl multiline assocs strings ;
-IN: opengl.shaders
-
-HELP: gl-shader
-{ $class-description { $snippet "gl-shader" } " is a predicate class comprising values returned by OpenGL to represent shader objects. The following words are provided for creating and manipulating these objects:"
-    { $list
-        { { $link <gl-shader> } " - Compile GLSL code into a shader object" }
-        { { $link gl-shader-ok? } " - Check whether a shader object compiled successfully" }
-        { { $link check-gl-shader } " - Throw an error unless a shader object compiled successfully" }
-        { { $link gl-shader-info-log } " - Retrieve the info log of messages generated by the GLSL compiler" }
-        { { $link delete-gl-shader } " - Invalidate a shader object" }
-    }
-  "The derived predicate classes " { $link vertex-shader } " and " { $link fragment-shader } " are also defined for the two standard kinds of shader defined by the OpenGL specification." } ;
-
-HELP: vertex-shader
-{ $class-description { $snippet "vertex-shader" } " is the predicate class of " { $link gl-shader } " objects that refer to shaders of type " { $snippet "GL_VERTEX_SHADER" } ". In addition to the " { $snippet "gl-shader" } " words, the following vertex shader-specific functions are defined:"
-    { $list
-        { { $link <vertex-shader> } " - Compile GLSL code into a vertex shader object "}
-    }
-} ;
-
-HELP: fragment-shader
-{ $class-description { $snippet "fragment-shader" } " is the predicate class of " { $link gl-shader } " objects that refer to shaders of type " { $snippet "GL_FRAGMENT_SHADER" } ". In addition to the " { $snippet "gl-shader" } " words, the following fragment shader-specific functions are defined:"
-    { $list
-        { { $link <fragment-shader> } " - Compile GLSL code into a fragment shader object "}
-    }
-} ;
-
-HELP: <gl-shader>
-{ $values { "source" "The GLSL source code to compile" } { "kind" "The kind of shader to compile, such as " { $snippet "GL_VERTEX_SHADER" } " or " { $snippet "GL_FRAGMENT_SHADER" } } { "shader" "a new " { $link gl-shader } } }
-{ $description "Tries to compile the given GLSL source into a shader object. The returned object can be checked for validity by " { $link check-gl-shader } " or " { $link gl-shader-ok? } ". Errors and warnings generated by the GLSL compiler will be collected in the info log, available from " { $link gl-shader-info-log } ".\n\nWhen the shader object is no longer needed, it should be deleted using " { $link delete-gl-shader } " or else be attached to a " { $link gl-program } " object deleted using " { $link delete-gl-program } "." } ;
-
-HELP: <vertex-shader>
-{ $values { "source" "The GLSL source code to compile" } { "vertex-shader" "a new " { $link vertex-shader } } }
-{ $description "Tries to compile the given GLSL source into a vertex shader object. Equivalent to " { $snippet "GL_VERTEX_SHADER <gl-shader>" } "." } ;
-
-HELP: <fragment-shader>
-{ $values { "source" "The GLSL source code to compile" } { "fragment-shader" "a new " { $link fragment-shader } } }
-{ $description "Tries to compile the given GLSL source into a fragment shader object. Equivalent to " { $snippet "GL_FRAGMENT_SHADER <gl-shader>" } "." } ;
-
-HELP: gl-shader-ok?
-{ $values { "shader" "A " { $link gl-shader } " object" } { "?" "a boolean" } }
-{ $description "Returns a boolean value indicating whether the given shader object compiled successfully. Compilation errors and warnings are available in the shader's info log, which can be gotten using " { $link gl-shader-info-log } "." } ;
-
-HELP: check-gl-shader
-{ $values { "shader" "A " { $link gl-shader } " object" } }
-{ $description "Throws an error containing the " { $link gl-shader-info-log } " for the shader object if it failed to compile. Otherwise, the shader object is left on the stack." } ;
-
-HELP: delete-gl-shader
-{ $values { "shader" "A " { $link gl-shader } " object" } }
-{ $description "Deletes the shader object, invalidating it and releasing any resources allocated for it by the OpenGL implementation." } ;
-
-HELP: gl-shader-info-log
-{ $values { "shader" "A " { $link gl-shader } " object" } { "shader" "a new " { $link gl-shader } } { "log" string } }
-{ $description "Retrieves the info log for " { $snippet "shader" } ", including any errors or warnings generated in compiling the shader object." } ;
-
-HELP: gl-program
-{ $class-description { $snippet "gl-program" } " is a predicate class comprising values returned by OpenGL to represent proram objects. The following words are provided for creating and manipulating these objects:"
-    { $list
-        { { $link <gl-program> } ", " { $link <simple-gl-program> } " - Link a set of shaders into a GLSL program" }
-        { { $link gl-program-ok? } " - Check whether a program object linked successfully" }
-        { { $link check-gl-program } " - Throw an error unless a program object linked successfully" }
-        { { $link gl-program-info-log } " - Retrieve the info log of messages generated by the GLSL linker" }
-        { { $link gl-program-shaders } " - Retrieve the set of shader objects composing the GLSL program" }
-        { { $link delete-gl-program } " - Invalidate a program object and all its attached shaders" }
-        { { $link with-gl-program } " - Use a program object" }
-    }
-} ;
-
-HELP: <gl-program>
-{ $values { "shaders" "A sequence of " { $link gl-shader } " objects." } { "program" "a new " { $link gl-program } } } 
-{ $description "Creates a new GLSL program object, attaches all the shader objects in the " { $snippet "shaders" } " sequence, and attempts to link them. The returned object can be checked for validity by " { $link check-gl-program } " or " { $link gl-program-ok? } ". Errors and warnings generated by the GLSL linker will be collected in the info log, available from " { $link gl-program-info-log } ".\n\nWhen the program object and its attached shaders are no longer needed, it should be deleted using " { $link delete-gl-program } "." } ;
-
-HELP: <simple-gl-program>
-{ $values { "vertex-shader-source" "A string containing GLSL vertex shader source" } { "fragment-shader-source" "A string containing GLSL fragment shader source" } { "program" "a new " { $link gl-program } } }
-{ $description "Wrapper for " { $link <gl-program> } " for the simple case of compiling a single vertex shader and fragment shader and linking them into a GLSL program. Throws an exception if compiling or linking fails." } ;
-
-{ <gl-program> <simple-gl-program> } related-words
-
-HELP: gl-program-ok?
-{ $values { "program" "A " { $link gl-program } " object" } { "?" "a boolean" } }
-{ $description "Returns a boolean value indicating whether the given program object linked successfully. Link errors and warnings are available in the program's info log, which can be gotten using " { $link gl-program-info-log } "." } ;
-
-HELP: check-gl-program
-{ $values { "program" "A " { $link gl-program } " object" } }
-{ $description "Throws an error containing the " { $link gl-program-info-log } " for the program object if it failed to link. Otherwise, the program object is left on the stack." } ;
-
-HELP: gl-program-info-log
-{ $values { "program" "A " { $link gl-program } " object" } { "log" string } }
-{ $description "Retrieves the info log for " { $snippet "program" } ", including any errors or warnings generated in linking the program object." } ;
-
-HELP: delete-gl-program
-{ $values { "program" "A " { $link gl-program } " object" } }
-{ $description "Deletes the program object, invalidating it and releasing any resources allocated for it by the OpenGL implementation. Any attached " { $link gl-shader } "s are also deleted.\n\nIf the shader objects should be preserved, they should each be detached using " { $link detach-gl-program-shader } ". The program object can then be destroyed alone using " { $link delete-gl-program-only } "." } ;
-
-HELP: with-gl-program
-{ $values { "program" "A " { $link gl-program } " object" } { "quot" "A quotation with stack effect " { $snippet "( program -- )" } } }
-{ $description "Enables " { $snippet "program" } " for all OpenGL calls made in the dynamic extent of " { $snippet "quot" } ". " { $snippet "program" } " is left on the top of the stack when " { $snippet "quot" } " is called. The fixed-function pipeline is restored at the end of " { $snippet "quot" } "." } ;
-
-ABOUT: "gl-utilities"
diff --git a/extra/opengl/shaders/shaders.factor b/extra/opengl/shaders/shaders.factor
deleted file mode 100755 (executable)
index 476bb1b..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-! Copyright (C) 2008 Joe Groff.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel opengl.gl alien.c-types continuations namespaces
-assocs alien alien.strings libc opengl math sequences combinators
-combinators.lib macros arrays io.encodings.ascii fry
-specialized-arrays.uint destructors accessors ;
-IN: opengl.shaders
-
-: with-gl-shader-source-ptr ( string quot -- )
-    swap ascii malloc-string [ <void*> swap call ] keep free ; inline
-
-: <gl-shader> ( source kind -- shader )
-    glCreateShader dup rot
-    [ 1 swap f glShaderSource ] with-gl-shader-source-ptr
-    [ glCompileShader ] keep
-    gl-error ;
-
-: (gl-shader?) ( object -- ? )
-    dup integer? [ glIsShader c-bool> ] [ drop f ] if ;
-
-: gl-shader-get-int ( shader enum -- value )
-    0 <int> [ glGetShaderiv ] keep *int ;
-
-: gl-shader-ok? ( shader -- ? )
-    GL_COMPILE_STATUS gl-shader-get-int c-bool> ;
-
-: <vertex-shader> ( source -- vertex-shader )
-    GL_VERTEX_SHADER <gl-shader> ; inline
-
-: (vertex-shader?) ( object -- ? )
-    dup (gl-shader?)
-    [ GL_SHADER_TYPE gl-shader-get-int GL_VERTEX_SHADER = ]
-    [ drop f ] if ;
-
-: <fragment-shader> ( source -- fragment-shader )
-    GL_FRAGMENT_SHADER <gl-shader> ; inline
-
-: (fragment-shader?) ( object -- ? )
-    dup (gl-shader?)
-    [ GL_SHADER_TYPE gl-shader-get-int GL_FRAGMENT_SHADER = ]
-    [ drop f ] if ;
-
-: gl-shader-info-log-length ( shader -- log-length )
-    GL_INFO_LOG_LENGTH gl-shader-get-int ; inline
-
-: gl-shader-info-log ( shader -- log )
-    dup gl-shader-info-log-length dup [
-        1 calloc &free
-        [ 0 <int> swap glGetShaderInfoLog ] keep
-        ascii alien>string
-    ] with-destructors ;
-
-: check-gl-shader ( shader -- shader )
-    dup gl-shader-ok? [ dup gl-shader-info-log throw ] unless ;
-
-: delete-gl-shader ( shader -- ) glDeleteShader ; inline
-
-PREDICATE: gl-shader < integer (gl-shader?) ;
-PREDICATE: vertex-shader < gl-shader (vertex-shader?) ;
-PREDICATE: fragment-shader < gl-shader (fragment-shader?) ;
-
-! Programs
-
-: <gl-program> ( shaders -- program )
-    glCreateProgram swap
-    [ dupd glAttachShader ] each
-    [ glLinkProgram ] keep
-    gl-error ;
-    
-: (gl-program?) ( object -- ? )
-    dup integer? [ glIsProgram c-bool> ] [ drop f ] if ;
-
-: gl-program-get-int ( program enum -- value )
-    0 <int> [ glGetProgramiv ] keep *int ;
-
-: gl-program-ok? ( program -- ? )
-    GL_LINK_STATUS gl-program-get-int c-bool> ;
-
-: gl-program-info-log-length ( program -- log-length )
-    GL_INFO_LOG_LENGTH gl-program-get-int ; inline
-
-: gl-program-info-log ( program -- log )
-    dup gl-program-info-log-length dup [
-        1 calloc &free
-        [ 0 <int> swap glGetProgramInfoLog ] keep
-        ascii alien>string
-    ] with-destructors ;
-
-: check-gl-program ( program -- program )
-    dup gl-program-ok? [ dup gl-program-info-log throw ] unless ;
-
-: gl-program-shaders-length ( program -- shaders-length )
-    GL_ATTACHED_SHADERS gl-program-get-int ; inline
-
-: gl-program-shaders ( program -- shaders )
-    dup gl-program-shaders-length
-    0 <int>
-    over <uint-array>
-    [ underlying>> glGetAttachedShaders ] keep ;
-
-: delete-gl-program-only ( program -- )
-    glDeleteProgram ; inline
-
-: detach-gl-program-shader ( program shader -- )
-    glDetachShader ; inline
-
-: delete-gl-program ( program -- )
-    dup gl-program-shaders [
-        2dup detach-gl-program-shader delete-gl-shader
-    ] each delete-gl-program-only ;
-
-: with-gl-program ( program quot -- )
-    over glUseProgram [ 0 glUseProgram ] [ ] cleanup ; inline
-
-PREDICATE: gl-program < integer (gl-program?) ;
-
-: <simple-gl-program> ( vertex-shader-source fragment-shader-source -- program )
-    >r <vertex-shader> check-gl-shader
-    r> <fragment-shader> check-gl-shader
-    2array <gl-program> check-gl-program ;
-
diff --git a/extra/opengl/shaders/summary.txt b/extra/opengl/shaders/summary.txt
deleted file mode 100644 (file)
index c55f766..0000000
+++ /dev/null
@@ -1 +0,0 @@
-OpenGL Shading Language (GLSL) support
\ No newline at end of file
diff --git a/extra/opengl/shaders/tags.txt b/extra/opengl/shaders/tags.txt
deleted file mode 100755 (executable)
index 21154b6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-opengl
-bindings
\ No newline at end of file
diff --git a/extra/oracle/authors.txt b/extra/oracle/authors.txt
deleted file mode 100644 (file)
index 7c29e7c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Elie Chaftari
diff --git a/extra/oracle/liboci/authors.txt b/extra/oracle/liboci/authors.txt
deleted file mode 100755 (executable)
index 7c29e7c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Elie Chaftari
diff --git a/extra/oracle/liboci/liboci.factor b/extra/oracle/liboci/liboci.factor
deleted file mode 100644 (file)
index aa04aef..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-! Copyright (C) 2007 Elie CHAFTARI
-! See http://factorcode.org/license.txt for BSD license.
-!
-! Adapted from oci.h and ociap.h
-! Tested with Oracle version - 10.1.0.3 Instant Client
-!
-! DYLD_LIBRARY_PATH="/usr/local/oracle/instantclient10_1"
-! export DYLD_LIBRARY_PATH
-
-USING: alien alien.syntax combinators kernel system ;
-
-IN: oracle.liboci
-
-"oci" {
-    { [ os winnt? ] [ "oci.dll" "stdcall" ] }
-    { [ os macosx? ] [ "$DYLD_LIBRARY_PATH/libclntsh.dylib" "cdecl" ] }
-    { [ os unix? ] [ "$DYLD_LIBRARY_PATH/libclntsh.so.10.1" "cdecl" ] }
-} cond add-library
-
-! ===============================================
-! Attribute Types
-! ===============================================
-
-: OCI_ATTR_USERNAME 22  ; inline ! username attribute
-: OCI_ATTR_PASSWORD 23  ; inline ! password attribute
-
-! ===============================================
-! Various Modes
-! ===============================================
-
-: OCI_DEFAULT   HEX: 00 ; inline ! default value for parameters and attributes
-: OCI_THREADED  HEX: 01 ; inline ! appl. in threaded environment
-: OCI_OBJECT    HEX: 02 ; inline ! application in object environment
-
-! ===============================================
-! Execution Modes
-! ===============================================
-
-: OCI_DESCRIBE_ONLY   HEX: 10 ; inline ! only describe the statement
-
-! ===============================================
-! Credential Types
-! ===============================================
-
-: OCI_CRED_RDBMS      1 ; inline ! database username/password
-: OCI_CRED_EXT        2 ; inline ! externally provided credentials
-: OCI_CRED_PROXY      3 ; inline ! proxy authentication
-
-! ===============================================
-! Error Return Values
-! ===============================================
-
-: OCI_SUCCESS               0     ; inline ! maps to SQL_SUCCESS of SAG CLI
-: OCI_SUCCESS_WITH_INFO     1     ; inline ! maps to SQL_SUCCESS_WITH_INFO
-: OCI_RESERVED_FOR_INT_USE  200   ; inline ! reserved
-: OCI_NO_DATA               100   ; inline ! maps to SQL_NO_DATA
-: OCI_ERROR                 -1    ; inline ! maps to SQL_ERROR
-: OCI_INVALID_HANDLE        -2    ; inline ! maps to SQL_INVALID_HANDLE
-: OCI_NEED_DATA             99    ; inline ! maps to SQL_NEED_DATA
-: OCI_STILL_EXECUTING       -3123 ; inline ! OCI would block error
-
-! ===============================================
-! Parsing Syntax Types
-! ===============================================
-
-: OCI_V7_SYNTAX            2 ; inline ! V815 language - for backwards compatibility
-: OCI_V8_SYNTAX            3 ; inline ! V815 language - for backwards compatibility
-: OCI_NTV_SYNTAX           1 ; inline ! Use what so ever is the native lang of server
-
-! ===============================================
-! Scrollable Cursor Fetch Options
-! For non-scrollable cursor, the only valid
-! (and default) orientation is OCI_FETCH_NEXT
-! ===============================================
-
-: OCI_FETCH_CURRENT       HEX: 01 ; inline ! refetching current position
-: OCI_FETCH_NEXT          HEX: 02 ; inline ! next row
-: OCI_FETCH_FIRST         HEX: 04 ; inline ! first row of the result set
-: OCI_FETCH_LAST          HEX: 08 ; inline ! the last row of the result set
-: OCI_FETCH_PRIOR         HEX: 10 ; inline ! the previous row relative to current
-: OCI_FETCH_ABSOLUTE      HEX: 20 ; inline ! absolute offset from first
-: OCI_FETCH_RELATIVE      HEX: 40 ; inline ! offset relative to current
-: OCI_FETCH_RESERVED_1    HEX: 80 ; inline ! reserved
-
-! ===============================================
-! Handle Types
-! ===============================================
-
-: OCI_HTYPE_ENV            1  ; inline ! environment handle
-: OCI_HTYPE_ERROR          2  ; inline ! error handle
-: OCI_HTYPE_SVCCTX         3  ; inline ! service handle
-: OCI_HTYPE_STMT           4  ; inline ! statement handle
-: OCI_HTYPE_BIND           5  ; inline ! bind handle
-: OCI_HTYPE_DEFINE         6  ; inline ! define handle
-: OCI_HTYPE_DESCRIBE       7  ; inline ! describe handle
-: OCI_HTYPE_SERVER         8  ; inline ! server handle
-: OCI_HTYPE_SESSION        9  ; inline ! authentication handle
-
-! ===============================================
-! Attribute Types
-! ===============================================
-
-: OCI_ATTR_FNCODE                   1  ; inline ! the OCI function code
-: OCI_ATTR_OBJECT                   2  ; inline ! is the environment initialized in object mode
-: OCI_ATTR_NONBLOCKING_MODE         3  ; inline ! non blocking mode
-: OCI_ATTR_SQLCODE                  4  ; inline ! the SQL verb
-: OCI_ATTR_ENV                      5  ; inline ! the environment handle
-: OCI_ATTR_SERVER                   6  ; inline ! the server handle
-: OCI_ATTR_SESSION                  7  ; inline ! the user session handle
-: OCI_ATTR_TRANS                    8  ; inline ! the transaction handle
-: OCI_ATTR_ROW_COUNT                9  ; inline ! the rows processed so far
-: OCI_ATTR_SQLFNCODE                10 ; inline ! the SQL verb of the statement
-: OCI_ATTR_PREFETCH_ROWS            11 ; inline ! sets the number of rows to prefetch
-: OCI_ATTR_NESTED_PREFETCH_ROWS     12 ; inline ! the prefetch rows of nested table
-: OCI_ATTR_PREFETCH_MEMORY          13 ; inline ! memory limit for rows fetched
-: OCI_ATTR_NESTED_PREFETCH_MEMORY   14 ; inline ! memory limit for nested rows
-: OCI_ATTR_CHAR_COUNT               15 ; inline ! this specifies the bind and define size in characters
-
-! ===============================================
-! OCI integer types
-! ===============================================
-
-TYPEDEF: ushort ub2
-TYPEDEF: short sb2
-TYPEDEF: uint ub4
-TYPEDEF: int sb4
-
-! ===============================================
-! Input data types (ocidfn.h)
-! ===============================================
-
-: SQLT_CHR                  1    ; inline ! (ORANET TYPE) character string
-: SQLT_NUM                  2    ; inline ! (ORANET TYPE) oracle numeric
-: SQLT_INT                  3    ; inline ! (ORANET TYPE) integer
-: SQLT_FLT                  4    ; inline ! (ORANET TYPE) Floating point number
-: SQLT_STR                  5    ; inline ! zero terminated string
-: SQLT_ODT                  156  ; inline ! OCIDate type
-
-! ===============================================
-! Input datetimes and intervals (ocidfn.h)
-! ===============================================
-
-: SQLT_DATE                184   ; inline ! ANSI Date
-: SQLT_TIME                185   ; inline ! TIME
-: SQLT_TIME_TZ             186   ; inline ! TIME WITH TIME ZONE
-: SQLT_TIMESTAMP           187   ; inline ! TIMESTAMP
-: SQLT_TIMESTAMP_TZ        188   ; inline ! TIMESTAMP WITH TIME ZONE
-: SQLT_INTERVAL_YM         189   ; inline ! INTERVAL YEAR TO MONTH
-: SQLT_INTERVAL_DS         190   ; inline ! INTERVAL DAY TO SECOND
-: SQLT_TIMESTAMP_LTZ       232   ; inline ! TIMESTAMP WITH LOCAL TZ
-
-! ===============================================
-! Opaque pointer types
-! ===============================================
-
-TYPEDEF: void dvoid
-TYPEDEF: void oci_env
-TYPEDEF: void oci_server
-TYPEDEF: void oci_error
-TYPEDEF: void oci_svc_ctx
-TYPEDEF: void oci_session
-TYPEDEF: void oci_stmt
-
-LIBRARY: oci
-
-! ===============================================
-! ociap.h
-! ===============================================
-
-FUNCTION: int OCIInitialize ( ub4 mode, void* ctxp, void* malocfp, void* ralocfp, dvoid* mfreefp ) ;
-FUNCTION: int OCITerminate ( ub4 mode ) ;
-FUNCTION: int OCIEnvInit ( void* envhpp, ub4 mode, size_t xtramem_sz, dvoid* usrmempp ) ;
-FUNCTION: int OCIEnvCreate ( dvoid* envhpp, ub4 mode, void* ctxp, void* malocfp, void* ralocfp, void* mfreefp, size_t xtramemz, dvoid* usrmempp ) ;
-FUNCTION: int OCIHandleAlloc ( void* parenth, dvoid* hndlpp, ub4 type, size_t xtramem_sz, dvoid* usrmempp ) ;
-FUNCTION: int OCIServerAttach ( void* srvhp, void* errhp, char* dblink, sb4 dblink_len, ub4 mode ) ;
-FUNCTION: int OCIServerDetach ( void* srvhp, void* errhp, ub4 mode ) ;
-FUNCTION: int OCIHandleFree ( dvoid* p0, ub4 p1 ) ;
-FUNCTION: int OCILogon ( void* envhp, void* errhp, dvoid* svchpp, uchar* username, ub4 uname_len, uchar* passwd, ub4 password_len, uchar* dsn, ub4 dsn_len ) ;
-FUNCTION: int OCILogoff ( void* p0, void* p1 ) ;
-FUNCTION: void OCIErrorGet ( void* handlp, ub4 recordno, char* sqlstate, sb4* errcodep, uchar* bufp, ub4 bufsize, ub4 type ) ;
-FUNCTION: int OCIStmtPrepare ( void* stmtp, void* errhp, uchar* stmt, ub4 stmt_len, ub4 language, ub4 mode ) ;
-FUNCTION: int OCIStmtExecute ( void* svchp, void* stmtp1, void* errhp, ub4 iters, ub4 rowoff, void* snap_in, void* snap_out, ub4 mode ) ;
-FUNCTION: int OCIParamGet ( void* hndlp, ub4 htype, void* errhp, dvoid* parmdpp, ub4 pos ) ;
-FUNCTION: int OCIAttrGet ( void* trgthndlp, ub4 trghndltyp, void* attributep, ub4* sizep, ub4 attrtype, void* errhp ) ;
-FUNCTION: int OCIAttrSet ( dvoid* trgthndlp, ub4 trgthndltyp, dvoid* attributep, ub4 size, ub4 attrtype, oci_error* errhp ) ;
-FUNCTION: int OCIDefineByPos ( void* stmtp, dvoid* defnpp, void* errhp, ub4 position, void* valuep, sb4 value_sz, ub2 dty, sb2* indp, ub2* rlenp, ub2* rcodep, ub4 mode ) ;
-FUNCTION: int OCIStmtFetch ( void* stmthp, void* errhp, ub4 p2, ub2 p3, ub4 p4 ) ;
-FUNCTION: int OCITransStart ( void* svchp, void* errhp, ushort p2, ushort p3 ) ;
-FUNCTION: int OCITransCommit ( void* svchp, void* errhp, ushort p2 ) ;
-FUNCTION: int OCITransRollback ( void* svchp, void* errhp, ushort p2 ) ;
-FUNCTION: int OCISessionBegin ( oci_svc_ctx* svchp, oci_error* errhp,  oci_session* usrhp, ub4 credt, ub4 mode ) ;
-FUNCTION: int OCISessionEnd ( oci_svc_ctx* svchp, oci_error* errhp,  oci_session* usrhp, ub4 mode ) ;
-FUNCTION: int OCIServerVersion ( void* handlp, void* errhp, uchar* bufsz, int bufsz, short hndltype ) ;
diff --git a/extra/oracle/oracle-tests.factor b/extra/oracle/oracle-tests.factor
deleted file mode 100755 (executable)
index 2f957ac..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-USING: oracle oracle.liboci prettyprint tools.test
-kernel ;
-
-[
-    "testuser" "testpassword" "//localhost/test1" log-on .
-
-    allocate-statement-handle
-
-    "CREATE TABLE TESTTABLE ( COL1 VARCHAR(40), COL2 NUMBER)" prepare-statement
-
-    [ t ] [ execute-statement ] unit-test
-
-    "INSERT INTO TESTTABLE (COL1, COL2) VALUES('hello', 50)" prepare-statement
-
-    [ t ] [ execute-statement ] unit-test
-
-    "INSERT INTO TESTTABLE (COL1, COL2) VALUES('hi', 60)" prepare-statement
-
-    [ t ] [ execute-statement ] unit-test
-
-    "INSERT INTO TESTTABLE (COL1, COL2) VALUES('bye', 70)" prepare-statement
-
-    [ t ] [ execute-statement ] unit-test
-
-    "COMMIT" prepare-statement
-
-    [ t ] [ execute-statement ] unit-test
-
-    "SELECT * FROM TESTTABLE" prepare-statement
-
-    1 SQLT_STR define-by-position run-query
-
-    [ V{ "hello" "hi" "bye" "50" "60" "70" } ] [
-    2 SQLT_STR define-by-position run-query gather-results
-    ] unit-test
-
-    clear-result
-
-    "UPDATE TESTTABLE SET COL2 = 10 WHERE COL1='hi'" prepare-statement
-
-    [ t ] [ execute-statement ] unit-test
-
-    "COMMIT" prepare-statement
-
-    [ t ] [ execute-statement ] unit-test
-
-    "SELECT * FROM TESTTABLE WHERE COL1 = 'hi'" prepare-statement
-
-    [ V{ "10" } ] [
-    2 SQLT_STR define-by-position run-query gather-results
-    ] unit-test
-
-    clear-result
-
-    "DROP TABLE TESTTABLE" prepare-statement
-
-    execute-statement
-
-    free-statement-handle log-off clean-up terminate
-] drop
diff --git a/extra/oracle/oracle.factor b/extra/oracle/oracle.factor
deleted file mode 100644 (file)
index e61a47a..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-! Copyright (C) 2007 Elie CHAFTARI
-! See http://factorcode.org/license.txt for BSD license.
-!
-! Adapted from oci.h and ociap.h
-! Tested with Oracle version - 10.1.0.3 Instant Client
-
-USING: alien alien.c-types alien.strings combinators kernel math
-namespaces oracle.liboci prettyprint sequences
-io.encodings.ascii accessors ;
-
-IN: oracle
-
-SYMBOL: env
-SYMBOL: err
-SYMBOL: srv
-SYMBOL: svc
-SYMBOL: ses
-SYMBOL: stm
-SYMBOL: buf
-SYMBOL: res
-
-SYMBOL: con
-
-TUPLE: connection username password db ;
-
-C: <connection> connection
-
-! =========================================================
-! Error-handling routines
-! =========================================================
-
-: get-oci-error ( object -- * )
-    1 f "uint*" <c-object> dup >r 512 "uchar" <c-array> dup >r
-    512 OCI_HTYPE_ERROR OCIErrorGet r> r> *uint drop
-    ascii alien>string throw ;
-
-: check-result ( result -- )
-    {
-        { OCI_SUCCESS [ ] }
-        { OCI_ERROR [ err get get-oci-error ] }
-        { OCI_INVALID_HANDLE [ "invalid handle" throw ] }
-        [ "operation failed" throw ]
-    } case ;
-
-: check-status ( status -- bool )
-    {
-        { OCI_SUCCESS [ t ] }
-        { OCI_ERROR [ err get get-oci-error ] }
-        { OCI_INVALID_HANDLE [ "invalid handle" throw ] }
-        { OCI_NO_DATA [ f ] }
-        [ "operation failed" throw ]
-    } case ;
-
-! =========================================================
-! Initialization and handle-allocation routines
-! =========================================================
-
-! Legacy initialization routine
-: oci-initialize ( -- )
-    OCI_DEFAULT f f f f OCIInitialize check-result ;
-
-! Legacy initialization routine
-: oci-env-init ( -- )
-    "void*" <c-object> dup OCI_DEFAULT 0 f OCIEnvInit
-    check-result *void* env set ;
-
-: create-environment ( -- )
-    "void*" <c-object> dup OCI_DEFAULT f f f f 0 f OCIEnvCreate 
-    check-result *void* env set ;
-
-: allocate-error-handle ( -- )
-    env get
-    "void*" <c-object> tuck OCI_HTYPE_ERROR 0 f OCIHandleAlloc 
-    check-result *void* err set ;
-
-: allocate-service-handle ( -- )
-    env get
-    "void*" <c-object> tuck OCI_HTYPE_SVCCTX 0 f OCIHandleAlloc 
-    check-result *void* svc set ;
-
-: allocate-session-handle ( -- )
-    env get
-    "void*" <c-object> tuck OCI_HTYPE_SESSION 0 f OCIHandleAlloc 
-    check-result *void* ses set ;
-
-: allocate-server-handle ( -- )
-    env get
-    "void*" <c-object> tuck OCI_HTYPE_SERVER 0 f OCIHandleAlloc 
-    check-result *void* srv set ;
-
-: init ( -- )
-    oci-initialize
-    oci-env-init
-    allocate-error-handle
-    allocate-service-handle
-    allocate-session-handle
-    allocate-server-handle ;
-
-! =========================================================
-! Single user session logon routine
-! =========================================================
-
-: oci-log-on ( -- )
-    env get err get svc get 
-    con get username>> dup length swap ascii malloc-string swap 
-    con get password>> dup length swap ascii malloc-string swap
-    con get db>> dup length swap ascii malloc-string swap
-    OCILogon check-result ;
-
-! =========================================================
-! Attach to server and attribute-setting routines
-! =========================================================
-
-: attach-to-server ( -- )
-    srv get err get con get db>> dup length OCI_DEFAULT
-    OCIServerAttach check-result ;
-
-: set-service-attribute ( -- )
-    svc get OCI_HTYPE_SVCCTX srv get 0 OCI_ATTR_SERVER err get OCIAttrSet check-result ;
-
-: set-username-attribute ( -- )
-    ses get OCI_HTYPE_SESSION con get username>> dup length swap ascii malloc-string swap 
-    OCI_ATTR_USERNAME err get OCIAttrSet check-result ;
-
-: set-password-attribute ( -- )
-    ses get OCI_HTYPE_SESSION con get password>> dup length swap ascii malloc-string swap 
-    OCI_ATTR_PASSWORD err get OCIAttrSet check-result ;
-
-: set-attributes ( -- )
-    set-service-attribute
-    set-username-attribute
-    set-password-attribute ;
-
-! =========================================================
-! Session startup routines
-! =========================================================
-
-: begin-session ( -- )
-    svc get err get ses get OCI_CRED_RDBMS OCI_DEFAULT OCISessionBegin check-result ;
-
-: set-authentication-handle ( -- )
-    svc get OCI_HTYPE_SVCCTX ses get 0 OCI_ATTR_SESSION err get OCIAttrSet check-result ;
-
-! =========================================================
-! Statement preparation and execution routines
-! =========================================================
-
-: allocate-statement-handle ( -- )
-    env get
-    "void*" <c-object> tuck OCI_HTYPE_STMT 0 f OCIHandleAlloc 
-    check-result *void* stm set ;
-
-: prepare-statement ( statement -- )
-    >r stm get err get r> dup length swap ascii malloc-string swap
-    OCI_NTV_SYNTAX OCI_DEFAULT OCIStmtPrepare check-result ;
-
-: calculate-size ( type -- size )
-    {
-        { SQLT_INT [ "int" heap-size ] }
-        { SQLT_FLT [ "float" heap-size ] }
-        { SQLT_CHR [ "char" heap-size ] }
-        { SQLT_NUM [ "int" heap-size 10 * ] }
-        { SQLT_STR [ 64 ] }
-        { SQLT_ODT [ 256 ] }
-    } case ;
-
-: define-by-position ( position type -- )
-    >r >r stm get f <void*> err get
-    r> r> dup calculate-size >r [ "char" malloc-array dup buf set ] keep 1+
-    r> f f f OCI_DEFAULT OCIDefineByPos check-result ;
-
-: execute-statement ( -- bool )
-    svc get stm get err get 1 0 f f OCI_DEFAULT OCIStmtExecute check-status ;
-
-: fetch-statement ( -- bool )
-    stm get err get 1 OCI_FETCH_NEXT OCI_DEFAULT OCIStmtFetch check-status ;
-
-: free-statement-handle ( -- )
-    stm get OCI_HTYPE_STMT OCIHandleFree check-result ;
-
-! =========================================================
-! Log off and detach from server routines
-! =========================================================
-
-: end-session ( -- )
-    svc get err get ses get OCI_DEFAULT OCISessionEnd check-result ;
-
-: detach-from-server ( -- )
-    srv get err get OCI_DEFAULT OCIServerDetach check-result ;
-
-: log-off ( -- )
-    end-session
-    detach-from-server ;
-
-! =========================================================
-! Clean-up and termination routines
-! =========================================================
-
-: free-service-handle ( -- )
-    svc get OCI_HTYPE_SVCCTX OCIHandleFree check-result ;
-
-: free-server-handle ( -- )
-    srv get OCI_HTYPE_SERVER OCIHandleFree check-result ;
-
-: free-error-handle ( -- )
-    err get OCI_HTYPE_ERROR OCIHandleFree check-result ;
-
-: free-environment-handle ( -- )
-    env get OCI_HTYPE_ENV OCIHandleFree check-result ;
-
-: clean-up ( -- )
-    free-service-handle
-    free-server-handle
-    free-error-handle
-    free-environment-handle ;
-
-: terminate ( -- )
-    OCI_DEFAULT OCITerminate check-result ;
-
-! =========================================================
-! Utility routines
-! =========================================================
-
-: server-version ( -- )
-    srv get err get 512 "uchar" malloc-array dup >r 512 OCI_HTYPE_SERVER
-    OCIServerVersion check-result r> ascii alien>string . ;
-
-! =========================================================
-! Public routines
-! =========================================================
-
-: log-on ( username password db -- )
-    <connection> con set 
-    init attach-to-server set-attributes
-    begin-session set-authentication-handle 
-    V{ } clone res set ;
-
-: fetch-each ( object -- object )
-    fetch-statement [
-        buf get ascii alien>string res get swap suffix res set
-        fetch-each
-    ] [ ] if ;
-
-: run-query ( object -- object )
-    execute-statement [
-        buf get ascii alien>string res get swap suffix res set
-        fetch-each
-    ] [ ] if ;
-
-: gather-results ( -- seq )
-    res get ;
-
-: show-result ( -- )
-    res get [ . ] each ;
-
-: clear-result ( -- )
-    V{ } clone res set ;
diff --git a/extra/oracle/summary.txt b/extra/oracle/summary.txt
deleted file mode 100644 (file)
index 0596680..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Oracle database bindings
diff --git a/extra/oracle/tags.txt b/extra/oracle/tags.txt
deleted file mode 100644 (file)
index aa0d57e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-database
index 84d33bb77fdf960d15215143978c7f082e04dd6d..b7c2458c6b032db74434f15d64880b026714a43b 100644 (file)
@@ -17,7 +17,7 @@ C: <ori> ori
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: make-matrix ( quot width -- matrix ) >r { } make r> group ; inline
+: make-matrix ( quot width -- matrix ) [ { } make ] dip group ; inline
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
diff --git a/extra/otug-talk/2bi.png b/extra/otug-talk/2bi.png
new file mode 100644 (file)
index 0000000..8f431f8
Binary files /dev/null and b/extra/otug-talk/2bi.png differ
diff --git a/extra/otug-talk/2bi_at.png b/extra/otug-talk/2bi_at.png
new file mode 100644 (file)
index 0000000..55d42c2
Binary files /dev/null and b/extra/otug-talk/2bi_at.png differ
diff --git a/extra/otug-talk/2bi_star.png b/extra/otug-talk/2bi_star.png
new file mode 100644 (file)
index 0000000..0fff376
Binary files /dev/null and b/extra/otug-talk/2bi_star.png differ
diff --git a/extra/otug-talk/authors.txt b/extra/otug-talk/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/extra/otug-talk/bi.png b/extra/otug-talk/bi.png
new file mode 100644 (file)
index 0000000..2470c9f
Binary files /dev/null and b/extra/otug-talk/bi.png differ
diff --git a/extra/otug-talk/bi_at.png b/extra/otug-talk/bi_at.png
new file mode 100644 (file)
index 0000000..282f2f1
Binary files /dev/null and b/extra/otug-talk/bi_at.png differ
diff --git a/extra/otug-talk/bi_star.png b/extra/otug-talk/bi_star.png
new file mode 100644 (file)
index 0000000..e94e371
Binary files /dev/null and b/extra/otug-talk/bi_star.png differ
diff --git a/extra/otug-talk/otug-talk.factor b/extra/otug-talk/otug-talk.factor
new file mode 100644 (file)
index 0000000..b52749d
--- /dev/null
@@ -0,0 +1,368 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: slides help.markup math arrays hashtables namespaces
+sequences kernel sequences parser memoize io.encodings.binary
+locals kernel.private tools.vocabs.browser assocs quotations
+ tools.vocabs tools.annotations tools.crossref
+help.topics math.functions compiler.tree.optimizer
+compiler.cfg.optimizer fry
+ui.gadgets.panes tetris tetris.game combinators generalizations
+multiline sequences.private ;
+IN: otug-talk
+
+USING: cairo cairo.ffi cairo.gadgets accessors
+io.backend ui.gadgets ;
+
+TUPLE: png-gadget < cairo-gadget surface ;
+
+: <png-gadget> ( file -- gadget )
+    png-gadget new-gadget
+    swap normalize-path
+    cairo_image_surface_create_from_png >>surface ; inline
+
+M: png-gadget pref-dim* ( gadget -- )
+    surface>>
+    [ cairo_image_surface_get_width ]
+    [ cairo_image_surface_get_height ]
+    bi 2array ;
+
+M: png-gadget render-cairo* ( gadget -- )
+    cr swap surface>> 0 0 cairo_set_source_surface
+    cr cairo_paint ;
+
+M: png-gadget ungraft* ( gadget -- )
+    surface>> cairo_surface_destroy ;
+
+: $bitmap ( element -- )
+    [ first <png-gadget> gadget. ] ($block) ;
+
+: $tetris ( element -- )
+    drop [ <default-tetris> <tetris-gadget> gadget. ] ($block) ;
+
+: otug-slides
+{
+    { $slide "Factor!"
+        { $url "http://factorcode.org" }
+        "Development started in 2003"
+        "Open source (BSD license)"
+        "Influenced by Forth, Lisp, and Smalltalk"
+        "Blurs the line between language and library"
+        "Interactive development"
+    }
+    { $slide "Part 1: the language" }
+    { $slide "Basics"
+        "Stack based, dynamically typed"
+        { "A " { $emphasis "word" } " is a named piece of code" }
+        { "Values are passed between words on a " { $emphasis "stack" } }
+        "Code evaluates left to right"
+        "Example:"
+        { $code "2 3 + ." }
+    }
+    { $slide "Quotations"
+        { "A " { $emphasis "quotation" } " is a block of code pushed on the stack" }
+        { "Syntax: " { $snippet "[ ... ]" } }
+        "Example:"
+        { $code
+            "\"/etc/passwd\" ascii file-lines"
+            "[ \"#\" head? not ] filter"
+            "[ \":\" split first ] map"
+            "."
+        }
+    }
+    { $slide "Words"
+        { "We can define new words with " { $snippet ": name ... ;" } " syntax" }
+        { $code ": remove-comments ( lines -- lines' )" "    [ \"#\" head? not ] filter ;" }
+        { "Words are grouped into " { $emphasis "vocabularies" } }
+        { $link "vocab-index" }
+        "Libraries and applications are vocabularies"
+        { $vocab-link "spheres" }
+    }
+    { $slide "Constructing quotations"
+        { "Suppose we want a " { $snippet "remove-comments*" } " word" }
+        { $code ": remove-comments* ( lines string -- lines' )" "    [ ??? head? not ] filter ;" }
+        { "We use " { $link POSTPONE: '[ } " instead of " { $link POSTPONE: [ } }
+        { "Create “holes” with " { $link _ } }
+        "Holes filled in left to right when quotation pushed on the stack"
+    }
+    { $slide "Constructing quotations"
+        { $code ": remove-comments* ( lines string -- lines' )" "    '[ _ head? not ] filter ;" "" ": remove-comments ( lines -- lines' )" "    \"#\" remove-comments* ;" }
+        { { $link @ } " inserts a quotation" }
+        { $code ": replicate ( n quot -- seq )" "    '[ drop @ ] map ;" }
+        { $code "10 [ 1 10 [a,b] random ] replicate ." }
+    }
+    { $slide "Combinators"
+        { "A " { $emphasis "combinator" } " is a word taking quotations as input" }
+        { "Used for control flow, data flow, iteration" }
+        { $code "100 [ 5 mod 3 = [ \"Fizz!\" print ] when ] each" }
+        { "Control flow: " { $link if } ", " { $link when } ", " { $link unless } ", " { $link cond } }
+        { "Iteration: " { $link map } ", " { $link filter } ", " { $link all? } ", ..." }
+    }
+    { $slide "Data flow combinators - simple example"
+        "All examples so far used “pipeline style”"
+        "What about using a value more than once, or operating on values not at top of stack?"
+        { $code "{ 10 70 54 } [ sum ] [ length ] bi / ." }
+        { $code "5 [ 1 + ] [ sqrt ] [ 1 - ] tri 3array ." }
+    }
+    { $slide "Data flow combinators - cleave family"
+        { { $link bi } ", " { $link tri } ", " { $link cleave } }
+        { $bitmap "resource:extra/otug-talk/bi.png" }
+    }
+    { $slide "Data flow combinators - cleave family"
+        { { $link 2bi } ", " { $link 2tri } ", " { $link 2cleave } }
+        { $bitmap "resource:extra/otug-talk/2bi.png" }
+    }
+    { $slide "Data flow combinators"
+        "First, let's define a data type:"
+        { $code "TUPLE: person first-name last-name ;" }
+        "Make an instance:"
+        { $code "person new" "    \"Joe\" >>first-name" "    \"Sixpack\" >>last-name" }
+    }
+    { $slide "Data flow combinators"
+        "Let's do stuff with it:"
+        { $code
+            "[ first-name>> ] [ last-name>> ] bi"
+            "[ 2 head ] [ 5 head ] bi*"
+            "[ >upper ] bi@"
+            "\".\" glue ."
+        }
+    }
+    { $slide "Data flow combinators - spread family"
+        { { $link bi* } ", " { $link tri* } ", " { $link spread } }
+        { $bitmap "resource:extra/otug-talk/bi_star.png" }
+    }
+    { $slide "Data flow combinators - spread family"
+        { { $link 2bi* } }
+        { $bitmap "resource:extra/otug-talk/2bi_star.png" }
+    }
+    { $slide "Data flow combinators - apply family"
+        { { $link bi@ } ", " { $link tri@ } ", " { $link napply } }
+        { $bitmap "resource:extra/otug-talk/bi_at.png" }
+    }
+    { $slide "Data flow combinators - apply family"
+        { { $link 2bi@ } }
+        { $bitmap "resource:extra/otug-talk/2bi_at.png" }
+    }
+    { $slide "Shuffle words"
+        "When data flow combinators are not enough"
+        { $link "shuffle-words" }
+        "Lower-level, Forth/PostScript-style stack manipulation"
+    }
+    { $slide "Locals"
+        "When data flow combinators and shuffle words are not enough"
+        "Name your input parameters"
+        "Used in about 1% of all words"
+    }
+    { $slide "Locals example"
+        "Area of a triangle using Heron's formula"
+        { $code
+            <" :: area ( a b c -- x )
+    a b c + + 2 / :> p
+    p
+    p a - *
+    p b - *
+    p c - * sqrt ;">
+        }
+    }
+    { $slide "Previous example without locals"
+        "A bit unwieldy..."
+        { $code
+            <" : area ( a b c -- x )
+    [ ] [ + + 2 / ] 3bi
+    [ '[ _ - ] tri@ ] [ neg ] bi
+    * * * sqrt ;"> }
+    }
+    { $slide "More idiomatic version"
+        "But there's a trick: put the points in an array"
+        { $code <" : v-n ( v n -- w ) '[ _ - ] map ;
+
+: area ( points -- x )
+    [ 0 suffix ] [ sum 2 / ] bi
+    v-n product sqrt ;"> }
+    }
+    ! { $slide "The parser"
+    !     "All data types have a literal syntax"
+    !     "Literal hashtables and arrays are very useful in data-driven code"
+    !     { $code "H{ { \"cookies\" 12 } { \"milk\" 10 } }" }
+    !     "Libraries can define new parsing words"
+    ! }
+    { $slide "Programming without named values"
+        "Minimal glue between words"
+        "Easy multiple return values"
+        { "Avoid useless variable names: " { $snippet "x" } ", " { $snippet "n" } ", " { $snippet "a" } ", ..." }
+        { { $link at } " and " { $link at* } }
+        { $code "at* [ ... ] [ ... ] if" }
+    }
+    { $slide "Stack language idioms"
+        "Enables new idioms not possible before"
+        "We get the effect of “keyword parameters” for free"
+        { $vocab-link "smtp-example" }
+    }
+    { $slide "“Perfect” factoring"
+        { $table
+            { { $link head } { $link head-slice } }
+            { { $link tail } { $link tail-slice } }
+        }
+        { "Modifier: " { $link from-end } }
+        { "Modifier: " { $link short } }
+        "4*2*2=16 operations, 6 words!"
+    }
+    { $slide "Modifiers"
+        "“Modifiers” can express MN combinations using M+N words"
+        { $code
+            "\"Hello, Joe\" 4 head ."
+            "\"Hello, Joe\" 3 tail ."
+            "\"Hello, Joe\" 3 from-end tail ."
+        }
+        { $code
+            "\"Hello world\" 5 short head ."
+            "\"Hi\" 5 short tail ."
+        }
+    }
+    { $slide "Modifiers"
+        { "C-style " { $snippet "while" } " and " { $snippet "do while" } " loops" }
+    }
+    { $slide "Modifiers"
+        { $code ": bank ( n -- n )" "    readln string>number +" "    dup \"Balance: $\" write . ;" }
+        { $code "0 [ dup 0 > ] [ bank ] [ ] while" }
+    }
+    { $slide "Modifiers"
+        { $code "0 [ dup 0 > ] [ bank ] [ ] do while" }
+        { { $link do } " executes one iteration of a " { $link while } " loop" }
+        { { $link while } " calls " { $link do } }
+    }
+    { $slide "More “pipeline style” code"
+        { "Suppose we want to get the price of the customer's first order, but any one of the steps along the way could be a nil value (" { $link f } " in Factor):" }
+        { $code
+            "dup [ orders>> ] when"
+            "dup [ first ] when"
+            "dup [ price>> ] when"
+        }
+    }
+    { $slide "This is hard with mainstream syntax!"
+        { $code
+            <" var customer = ...;
+var orders = (customer == null ? null : customer.orders);
+var order = (orders == null ? null : orders[0]);
+var price = (order == null ? null : order.price);"> }
+    }
+    { $slide "An ad-hoc solution"
+        "Something like..."
+        { $code "var price = customer.?orders.?[0].?price;" }
+    }
+    ! { $slide "Stack languages are fundamental"
+    !     "Very simple semantics"
+    !     "Easy to generate stack code programatically"
+    !     "Everything is almost entirely library code in Factor"
+    !     "Factor is easy to extend"
+    ! }
+    { $slide "Part 2: the implementation" }
+    { $slide "Interactive development"
+        { $tetris }
+    }
+    { $slide "Application deployment"
+        { $vocab-link "webkit-demo" }
+        "Demonstrates Cocoa binding"
+        "Let's deploy a stand-alone binary with the deploy tool"
+        "Deploy tool generates binaries with no external dependencies"
+    }
+    { $slide "The UI"
+        "Renders with OpenGL"
+        "Backends for Cocoa, Windows, X11: managing windows, input events, clipboard"
+        "Cross-platform API"
+    }
+    { $slide "UI example"
+        { $code
+    <" <pile>
+    { 5 5 } >>gap
+    1 >>fill
+    "Hello world!" <label> add-gadget
+    "Click me!" [ drop beep ]
+    <bevel-button> add-gadget
+    <editor> <scroller> add-gadget
+"UI test" open-window "> }
+    }
+    { $slide "Help system"
+        "Help markup is just literal data"
+        { "Look at the help for " { $link T{ link f + } } }
+        "These slides are built with the help system and a custom style sheet"
+        { $vocab-link "otug-talk" }
+    }
+    { $slide "The VM"
+        "Lowest level is the VM: ~12,000 lines of C"
+        "Generational garbage collection"
+        "Non-optimizing compiler"
+        "Loads an image file and runs it"
+        "Initial image generated from another Factor instance:"
+        { $code "\"x86.32\" make-image" }
+    }
+    { $slide "The core library"
+        "Core library, ~9,000 lines of Factor"
+        "Source parser, arrays, strings, math, hashtables, basic I/O, ..."
+        "Packaged into boot image because VM doesn't have a parser"
+    }
+    { $slide "The basis library"
+        "Basis library, ~80,000 lines of Factor"
+        "Bootstrap process loads code from basis, runs compiler, saves image"
+        "Loaded by default: optimizing compiler, tools, help system, UI, ..."
+        "Optional: HTTP server, XML, database access, ..."
+    }
+    { $slide "Non-optimizing compiler"
+        "Glues together chunks of machine code"
+        "Most words compiled as calls, some inlined"
+        "Used for listener interactions, and bootstrap"
+    }
+    { $slide "Optimizing compiler"
+        "Converts Factor code into high-level SSA form"
+        "Performs global optimizations"
+        "Converts high-level SSA into low-level SSA"
+        "Performs local optimizations"
+        "Register allocation"
+        "Machine code generation: x86, x86-64, PowerPC"
+    }
+    { $slide "Optimizing compiler"
+        "Makes high-level language features cheap to use"
+        "Eliminate redundant method dispatch by inferring types"
+        "Eliminate redundant integer overflow checks by inferring ranges"
+    }
+    { $slide "Optimizing compiler"
+        "Eliminate redundant memory allocation (escape analysis)"
+        "Eliminate redundant loads/stores (alias analysis)"
+        "Eliminate redundant computations (value numbering)"
+    }
+    { $slide "Project infrastructure"
+        { $url "http://factorcode.org" }
+        { $url "http://concatenative.org" }
+        { $url "http://docs.factorcode.org" }
+        { $url "http://planet.factorcode.org" }
+        "Uses our HTTP server, SSL, DB, Atom libraries..."
+    }
+    { $slide "Project infrastructure"
+        "Build farm, written in Factor"
+        "12 platforms"
+        "Builds Factor and all libraries, runs tests, makes binaries"
+        "Good for increasing stability"
+    }
+    { $slide "Community"
+        "#concatenative irc.freenode.net: 60-70 users"
+        "factor-talk@lists.sf.net: 189 subscribers"
+        "About 30 people have code in the Factor repository"
+        "Easy to get started: binaries, lots of docs, friendly community..."
+    }
+    { $slide "Selling points"
+        "Expressive language"
+        "Comprehensive library"
+        "Efficient implementation"
+        "Powerful interactive tools"
+        "Stand-alone application deployment"
+        "Moving fast"
+    }
+    { $slide "That's all, folks"
+        "It is hard to cover everything in a single talk"
+        "Factor has many cool things that I didn't talk about"
+        "Questions?"
+    }
+} ;
+
+: otug-talk ( -- ) otug-slides slides-window ;
+
+MAIN: otug-talk
diff --git a/extra/otug-talk/summary.txt b/extra/otug-talk/summary.txt
new file mode 100644 (file)
index 0000000..571a4c2
--- /dev/null
@@ -0,0 +1 @@
+Slides from a talk at OTUG by Slava Pestov, December 2008
diff --git a/extra/otug-talk/tags.txt b/extra/otug-talk/tags.txt
new file mode 100644 (file)
index 0000000..cb5fc20
--- /dev/null
@@ -0,0 +1 @@
+demos
diff --git a/extra/pack/authors.txt b/extra/pack/authors.txt
deleted file mode 100644 (file)
index 7c1b2f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
diff --git a/extra/pack/pack-tests.factor b/extra/pack/pack-tests.factor
deleted file mode 100755 (executable)
index b1a354c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-USING: io io.streams.string kernel namespaces make
-pack strings tools.test ;
-
-[ B{ 1 0 2 0 0 3 0 0 0 4 0 0 0 0 0 0 0 5 } ] [
-    { 1 2 3 4 5 }
-    "cstiq" pack-be
-] unit-test
-
-[ { 1 2 3 4 5 } ] [
-    { 1 2 3 4 5 }
-    "cstiq" [ pack-be ] keep unpack-be
-] unit-test
-
-[ B{ 1 2 0 3 0 0 4 0 0 0 5 0 0 0 0 0 0 0 } ] [
-    [
-        { 1 2 3 4 5 } "cstiq" pack-le
-    ] with-scope
-] unit-test
-
-[ { 1 2 3 4 5 } ] [
-    { 1 2 3 4 5 }
-    "cstiq" [ pack-le ] keep unpack-le
-] unit-test
-
-[ { -1 -2 -3 -4 -5 } ] [
-    { -1 -2 -3 -4 -5 }
-    "cstiq" [ pack-le ] keep unpack-le
-] unit-test
-
-[ { -1 -2 -3 -4 -5 3.14 } ] [
-    { -1 -2 -3 -4 -5 3.14 }
-    "cstiqd" [ pack-be ] keep unpack-be
-] unit-test
-
-[ { -1 -2 -3 -4 -5 } ] [
-    { -1 -2 -3 -4 -5 }
-    "cstiq" [ pack-native ] keep unpack-native
-] unit-test
-
-[ 2 ] [
-    [ 2 "int" b, ] B{ } make
-    <string-reader> [ "int" read-native ] with-input-stream
-] unit-test
-
-[ "FRAM" ] [ "FRAM\0" [ read-c-string ] with-string-reader ] unit-test
-[ f ] [ "" [ read-c-string ] with-string-reader ] unit-test
-[ 5 ] [ "FRAM\0\u000005\0\0\0\0\0\0\0" [ read-c-string drop read-u64 ] with-string-reader ] unit-test
-
diff --git a/extra/pack/pack.factor b/extra/pack/pack.factor
deleted file mode 100755 (executable)
index 0e5cb7d..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-USING: alien alien.c-types arrays assocs byte-arrays io
-io.binary io.streams.string kernel math math.parser namespaces
-make parser prettyprint quotations sequences strings vectors
-words macros math.functions math.bitwise ;
-IN: pack
-
-SYMBOL: big-endian
-
-: big-endian? ( -- ? )
-    1 <int> *char zero? ;
-
-: >endian ( obj n -- str )
-    big-endian get [ >be ] [ >le ] if ; inline
-
-: endian> ( obj -- str )
-    big-endian get [ be> ] [ le> ] if ; inline
-
-GENERIC: b, ( n obj -- )
-M: integer b, ( m n -- ) >endian % ;
-
-! for doing native, platform-dependent sized values
-M: string b, ( n string -- ) heap-size b, ;
-: read-native ( string -- n ) heap-size read endian> ;
-
-! Portable
-: s8, ( n -- ) 1 b, ;
-: u8, ( n -- ) 1 b, ;
-: s16, ( n -- ) 2 b, ;
-: u16, ( n -- ) 2 b, ;
-: s24, ( n -- ) 3 b, ;
-: u24, ( n -- ) 3 b, ;
-: s32, ( n -- ) 4 b, ;
-: u32, ( n -- ) 4 b, ;
-: s64, ( n -- ) 8 b, ;
-: u64, ( n -- ) 8 b, ;
-: s128, ( n -- ) 16 b, ;
-: u128, ( n -- ) 16 b, ;
-: float, ( n -- ) float>bits 4 b, ;
-: double, ( n -- ) double>bits 8 b, ;
-: c-string, ( str -- ) % 0 u8, ;
-
-: (>128-ber) ( n -- )
-    dup 0 > [
-        [ HEX: 7f bitand HEX: 80 bitor , ] keep -7 shift
-        (>128-ber)
-    ] [
-        drop
-    ] if ;
-
-: >128-ber ( n -- str )
-    [
-        [ HEX: 7f bitand , ] keep -7 shift
-        (>128-ber)
-    ] { } make reverse ;
-
-: >signed ( x n -- y )
-    2dup neg 1+ shift 1 = [ 2^ - ] [ drop ] if ;
-
-: read-signed ( n -- str )
-    dup read endian> swap 8 * >signed ;
-
-: read-unsigned ( n -- m ) read endian> ;
-
-: read-s8 ( -- n ) 1 read-signed ;
-: read-u8 ( -- n ) 1 read-unsigned ;
-: read-s16 ( -- n ) 2 read-signed ;
-: read-u16 ( -- n ) 2 read-unsigned ;
-: read-s24 ( -- n ) 3 read-signed ;
-: read-u24 ( -- n ) 3 read-unsigned ;
-: read-s32 ( -- n ) 4 read-signed ;
-: read-u32 ( -- n ) 4 read-unsigned ;
-: read-s64 ( -- n ) 8 read-signed ;
-: read-u64 ( -- n ) 8 read-signed ;
-: read-s128 ( -- n ) 16 read-signed ;
-: read-u128 ( -- n ) 16 read-unsigned ;
-
-: read-float ( -- n )
-    4 read endian> bits>float ;
-
-: read-double ( -- n )
-    8 read endian> bits>double ;
-
-: read-c-string ( -- str/f )
-    "\0" read-until [ drop f ] unless ;
-
-: read-c-string* ( n -- str/f )
-    read [ zero? ] trim-right [ f ] when-empty ;
-
-: (read-128-ber) ( n -- n )
-    read1
-    [ [ 7 shift ] [ 7 clear-bit ] bi* bitor ] keep
-    7 bit? [ (read-128-ber) ] when ;
-    
-: read-128-ber ( -- n )
-    0 (read-128-ber) ;
-
-: pack-table ( -- hash )
-    H{
-        { CHAR: c s8, }
-        { CHAR: C u8, }
-        { CHAR: s s16, }
-        { CHAR: S u16, }
-        { CHAR: t s24, }
-        { CHAR: T u24, }
-        { CHAR: i s32, }
-        { CHAR: I u32, }
-        { CHAR: q s64, }
-        { CHAR: Q u64, }
-        { CHAR: f float, }
-        { CHAR: F float, }
-        { CHAR: d double, }
-        { CHAR: D double, }
-    } ;
-
-: unpack-table ( -- hash )
-    H{
-        { CHAR: c read-s8 }
-        { CHAR: C read-u8 }
-        { CHAR: s read-s16 }
-        { CHAR: S read-u16 }
-        { CHAR: t read-s24 }
-        { CHAR: T read-u24 }
-        { CHAR: i read-s32 }
-        { CHAR: I read-u32 }
-        { CHAR: q read-s64 }
-        { CHAR: Q read-u64 }
-        { CHAR: f read-float }
-        { CHAR: F read-float }
-        { CHAR: d read-double }
-        { CHAR: D read-double }
-    } ;
-
-MACRO: (pack) ( seq str -- quot )
-    [
-        [
-            [
-                swap , pack-table at ,
-            ] 2each
-        ] [ ] make 1quotation %
-       [ B{ } make ] %
-    ] [ ] make ;
-
-: pack-native ( seq str -- seq )
-    [
-        big-endian? big-endian set (pack)
-    ] with-scope ;
-
-: pack-be ( seq str -- seq )
-    [ big-endian on (pack) ] with-scope ;
-
-: pack-le ( seq str -- seq )
-    [ big-endian off (pack) ] with-scope ;
-
-
-MACRO: (unpack) ( str -- quot )
-    [
-        [
-            [ unpack-table at , \ , , ] each
-        ] [ ] make
-        1quotation [ { } make ] append
-        1quotation %
-        \ with-string-reader ,
-    ] [ ] make ;
-
-: unpack-native ( seq str -- seq )
-    [
-        big-endian? big-endian set (unpack)
-    ] with-scope ;
-
-: unpack-be ( seq str -- seq )
-    [ big-endian on (unpack) ] with-scope ;
-
-: unpack-le ( seq str -- seq )
-    [ big-endian off (unpack) ] with-scope ;
index 0ee91bc326bbfb325c61ef8b6c234a4e712d22c0..69f7a3bb921c9226db30cc5d4106dbbaf2d4241f 100755 (executable)
@@ -43,11 +43,11 @@ C: <parse-result> parse-result
     2over shorter? [
         3drop f
     ] [
-        >r [ length head-slice ] keep r> string=
+        [ [ length head-slice ] keep ] dip string=
     ] if ;
 
 : ?string-head ( str head ignore-case -- newstr ? )
-    >r 2dup r> string-head?
+    [ 2dup ] dip string-head?
     [ length tail-slice t ] [ drop f ] if ;
 
 TUPLE: token-parser string ignore-case? ;
@@ -60,7 +60,7 @@ C: <token-parser> token-parser
 
 M: token-parser parse ( input parser -- list )
     [ string>> ] [ ignore-case?>> ] bi
-    >r tuck r> ?string-head
+    [ tuck ] dip ?string-head
     [ <parse-results> ] [ 2drop nil ] if ;
 
 : 1token ( n -- parser ) 1string token ;
@@ -76,7 +76,7 @@ M: satisfy-parser parse ( input parser -- list )
     over empty? [
         2drop nil
     ] [
-        quot>> >r unclip-slice dup r> call
+        quot>> [ unclip-slice dup ] dip call
         [ swap <parse-results> ] [ 2drop nil ] if
     ] if ;
 
@@ -134,7 +134,7 @@ TUPLE: and-parser parsers ;
 
 : <&> ( parser1 parser2 -- parser )
     over and-parser? [
-        >r parsers>> r> suffix
+        [ parsers>> ] dip suffix
     ] [
         2array
     ] if and-parser boa ;
@@ -146,7 +146,7 @@ TUPLE: and-parser parsers ;
     swap [
         dup unparsed>> rot parse
         [
-            >r parsed>> r>
+            [ parsed>> ] dip
             [ parsed>> 2array ] keep
             unparsed>> <parse-result>
         ] lazy-map-with
@@ -191,7 +191,7 @@ C: sp sp-parser ( p1 -- parser )
 M: sp-parser parse ( input parser -- list )
     #! Skip all leading whitespace from the input then call
     #! the parser on the remaining input.
-    >r trim-left-slice r> p1>> parse ;
+    [ trim-left-slice ] dip p1>> parse ;
 
 TUPLE: just-parser p1 ;
 
@@ -346,4 +346,4 @@ LAZY: surrounded-by ( parser start end -- parser' )
     dupd exactly-n swap <*> <&> ;
 
 : from-m-to-n ( parser m n -- parser' )
-    >r [ exactly-n ] 2keep r> swap - at-most-n <:&:> ;
+    [ [ exactly-n ] 2keep ] dip swap - at-most-n <:&:> ;
index 7c23dcce0b2e31eecee52595e3e82967f8b52ca2..2becd937f25df767cd7df71e509b42e0792b1a95 100755 (executable)
@@ -17,7 +17,7 @@ SYMBOL: ignore-case?
 
 : char-between?-quot ( ch1 ch2 -- quot )
     ignore-case? get
-    [ [ ch>upper ] bi@ [ >r >r ch>upper r> r> between? ] ]
+    [ [ ch>upper ] bi@ [ [ ch>upper ] 2dip between? ] ]
     [ [ between? ] ]
     if 2curry ;
 
@@ -79,7 +79,7 @@ PRIVATE>
     [ hex> ] <@ ;
 
 : satisfy-tokens ( assoc -- parser )
-    [ >r token r> <@literal ] { } assoc>map <or-parser> ;
+    [ [ token ] dip <@literal ] { } assoc>map <or-parser> ;
 
 : 'simple-escape-char' ( -- parser )
     {
@@ -270,7 +270,7 @@ TUPLE: regexp source parser ignore-case? ;
     ] keep regexp boa ;
 
 : do-ignore-case ( string regexp -- string regexp )
-    dup ignore-case?>> [ >r >upper r> ] when ;
+    dup ignore-case?>> [ [ >upper ] dip ] when ;
 
 : matches? ( string regexp -- ? )
     do-ignore-case parser>> just parse nil? not ;
index b80e3a9ddbb499fce1ab8ad629504e27c2ef8f85..7ec294ca2e9137d5364b774c41481725374c878f 100755 (executable)
@@ -7,16 +7,16 @@ USING: kernel continuations arrays sequences quotations ;
     [ 1array swap keep first continue-with ] callcc1 nip ;
 
 : (bshift) ( v r k -- obj )
-    >r dup first -rot r>
+    [ dup first -rot ] dip
     [
         rot set-first
         continue-with
     ] callcc1
-    >r drop nip set-first r> ;
+    [ drop nip set-first ] dip ;
 
 : bshift ( r quot -- )
     swap [ ! quot r k
-        over >r
-        [ (bshift) ] 2curry swap call
-        r> first continue-with
+        over [
+            [ (bshift) ] 2curry swap call
+        ] dip first continue-with
     ] callcc1 2nip ; inline
diff --git a/extra/porter-stemmer/authors.txt b/extra/porter-stemmer/authors.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/extra/porter-stemmer/porter-stemmer-docs.factor b/extra/porter-stemmer/porter-stemmer-docs.factor
deleted file mode 100644 (file)
index e16190f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-IN: porter-stemmer
-USING: help.markup help.syntax ;
-
-HELP: step1a
-{ $values { "str" "a string" } { "newstr" "a new string" } }
-{ $description "Gets rid of plurals." }
-{ $examples
-    { $table
-        { "Input:" "Output:" }
-        { "caresses" "caress" }
-        { "ponies" "poni" }
-        { "ties" "ti" }
-        { "caress" "caress" }
-        { "cats" "cat" }
-    }
-} ;
-
-HELP: step1b
-{ $values { "str" "a string" } { "newstr" "a new string" } }
-{ $description "Gets rid of \"-ed\" and \"-ing\" suffixes." }
-{ $examples
-    { $table
-        { "Input:" "Output:" }
-        { "feed"  "feed" }
-        { "agreed"  "agree" }
-        { "disabled"  "disable" }
-        { "matting"  "mat" }
-        { "mating"  "mate" }
-        { "meeting"  "meet" }
-        { "milling"  "mill" }
-        { "messing"  "mess" }
-        { "meetings"  "meet" }
-    }
-} ;
-
-HELP: step1c
-{ $values { "str" "a string" } { "newstr" "a new string" } }
-{ $description "Turns a terminal y to i when there is another vowel in the stem." } ;
-
-HELP: step2
-{ $values { "str" "a string" } { "newstr" "a new string" } }
-{ $description "Maps double suffices to single ones. so -ization maps to -ize etc. note that the string before the suffix must give positive " { $link consonant-seq } "." } ;
-
-HELP: step3
-{ $values { "str" "a string" } { "newstr" "a new string" } }
-{ $description "Deals with -c-, -full, -ness, etc. Similar strategy to " { $link step2 } "." } ;
-
-HELP: step5
-{ $values { "str" "a string" } { "newstr" "a new string" } }
-{ $description "Removes a final -e and changes a final -ll to -l if " { $link consonant-seq } " is greater than 1," } ;
-
-HELP: stem
-{ $values { "str" "a string" } { "newstr" "a new string" } }
-{ $description "Applies the Porter stemming algorithm to the input string." } ;
-
-ARTICLE: "porter-stemmer" "Porter stemming algorithm"
-"The help system uses the Porter stemming algorithm to normalize words when building the full-text search index."
-$nl
-"The Factor implementation of the algorithm is based on the Common Lisp version, which was hand-translated from ANSI C by Steven M. Haflich. The original ANSI C was written by Martin Porter."
-$nl
-"A detailed description of the algorithm, along with implementations in various languages, can be at in " { $url "http://www.tartarus.org/~martin/PorterStemmer" } "."
-$nl
-"The main word of the algorithm takes an English word as input and outputs its stem:"
-{ $subsection stem }
-"The algorithm consists of a number of steps:"
-{ $subsection step1a }
-{ $subsection step1b }
-{ $subsection step1c }
-{ $subsection step2 }
-{ $subsection step3 }
-{ $subsection step4 }
-{ $subsection step5 } ;
-
-ABOUT: "porter-stemmer"
diff --git a/extra/porter-stemmer/porter-stemmer-tests.factor b/extra/porter-stemmer/porter-stemmer-tests.factor
deleted file mode 100644 (file)
index 42c3586..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-IN: porter-stemmer.tests
-USING: arrays io kernel porter-stemmer sequences tools.test
-io.files io.encodings.utf8 ;
-
-[ 0 ] [ "xa" consonant-seq ] unit-test
-[ 0 ] [ "xxaa" consonant-seq ] unit-test
-[ 1 ] [ "xaxa" consonant-seq ] unit-test
-[ 2 ] [ "xaxaxa" consonant-seq ] unit-test
-[ 3 ] [ "xaxaxaxa" consonant-seq ] unit-test
-[ 3 ] [ "zzzzxaxaxaxaeee" consonant-seq ] unit-test
-
-[ t ] [ 0 "fish" consonant? ] unit-test
-[ f ] [ 0 "and" consonant? ] unit-test
-[ t ] [ 0 "yes" consonant? ] unit-test
-[ f ] [ 1 "gym" consonant? ] unit-test
-
-[ t ] [ 5 "splitting" double-consonant? ] unit-test
-[ f ] [ 2 "feel" double-consonant? ] unit-test
-
-[ f ] [ "xxxz" stem-vowel? ] unit-test
-[ t ] [ "baobab" stem-vowel? ] unit-test
-
-[ t ] [ "hop" cvc? ] unit-test
-[ t ] [ "cav" cvc? ] unit-test
-[ t ] [ "lov" cvc? ] unit-test
-[ t ] [ "crim" cvc? ] unit-test
-[ f ] [ "show" cvc? ] unit-test
-[ f ] [ "box" cvc? ] unit-test
-[ f ] [ "tray" cvc? ] unit-test
-[ f ] [ "meet" cvc? ] unit-test
-
-[ "caress" ] [ "caresses" step1a step1b "" like ] unit-test
-[ "poni" ] [ "ponies" step1a step1b "" like ] unit-test
-[ "ti" ] [ "ties" step1a step1b "" like ] unit-test
-[ "caress" ] [ "caress" step1a step1b "" like ] unit-test
-[ "cat" ] [ "cats" step1a step1b "" like ] unit-test
-[ "feed" ] [ "feed" step1a step1b "" like ] unit-test
-[ "agree" ] [ "agreed" step1a step1b "" like ] unit-test
-[ "disable" ] [ "disabled" step1a step1b "" like ] unit-test
-[ "mat" ] [ "matting" step1a step1b "" like ] unit-test
-[ "mate" ] [ "mating" step1a step1b "" like ] unit-test
-[ "meet" ] [ "meeting" step1a step1b "" like ] unit-test
-[ "mill" ] [ "milling" step1a step1b "" like ] unit-test
-[ "mess" ] [ "messing" step1a step1b "" like ] unit-test
-[ "meet" ] [ "meetings" step1a step1b "" like ] unit-test
-
-[ "fishi" ] [ "fishy" step1c ] unit-test
-[ "by" ] [ "by" step1c ] unit-test
-
-[ "realizat" ] [ "realization" step4 ] unit-test
-[ "ion" ] [ "ion" step4 ] unit-test
-[ "able" ] [ "able" step4 ] unit-test
-
-[ "fear" ] [ "feare" step5 "" like ] unit-test
-[ "mate" ] [ "mate" step5 "" like ] unit-test
-[ "hell" ] [ "hell" step5 "" like ] unit-test
-[ "mate" ] [ "mate" step5 "" like ] unit-test
-
-[ { } ] [
-    "resource:extra/porter-stemmer/test/voc.txt" utf8 file-lines
-    [ stem ] map
-    "resource:extra/porter-stemmer/test/output.txt" utf8 file-lines
-    [ 2array ] 2map [ first2 = not ] filter
-] unit-test
diff --git a/extra/porter-stemmer/porter-stemmer.factor b/extra/porter-stemmer/porter-stemmer.factor
deleted file mode 100644 (file)
index 7ae273f..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-IN: porter-stemmer
-USING: kernel math parser sequences combinators splitting ;
-
-: consonant? ( i str -- ? )
-    2dup nth dup "aeiou" member? [
-        3drop f
-    ] [
-        CHAR: y = [
-            over zero?
-            [ 2drop t ] [ >r 1- r> consonant? not ] if
-        ] [
-            2drop t
-        ] if
-    ] if ;
-
-: skip-vowels ( i str -- i str )
-    2dup bounds-check? [
-        2dup consonant? [ >r 1+ r> skip-vowels ] unless
-    ] when ;
-
-: skip-consonants ( i str -- i str )
-    2dup bounds-check? [
-        2dup consonant? [ >r 1+ r> skip-consonants ] when
-    ] when ;
-
-: (consonant-seq) ( n i str -- n )
-    skip-vowels
-    2dup bounds-check? [
-        >r 1+ >r 1+ r> r> skip-consonants >r 1+ r>
-        (consonant-seq)
-    ] [
-        2drop
-    ] if ;
-
-: consonant-seq ( str -- n )
-    0 0 rot skip-consonants (consonant-seq) ;
-
-: stem-vowel? ( str -- ? )
-    [ length ] keep [ consonant? ] curry all? not ;
-
-: double-consonant? ( i str -- ? )
-    over 1 < [
-        2drop f
-    ] [
-        2dup nth >r over 1- over nth r> = [
-            consonant?
-        ] [
-            2drop f
-        ] if
-    ] if ;
-
-: consonant-end? ( n seq -- ? )
-    [ length swap - ] keep consonant? ;
-
-: last-is? ( str possibilities -- ? ) >r peek r> member? ;
-
-: cvc? ( str -- ? )
-    {
-        { [ dup length 3 < ] [ drop f ] }
-        { [ 1 over consonant-end? not ] [ drop f ] }
-        { [ 2 over consonant-end? ] [ drop f ] }
-        { [ 3 over consonant-end? not ] [ drop f ] }
-        [ "wxy" last-is? not ]
-    } cond ;
-
-: r ( str oldsuffix newsuffix -- str )
-    pick consonant-seq 0 > [ nip ] [ drop ] if append ;
-
-: step1a ( str -- newstr )
-    dup peek CHAR: s = [
-        {
-            { [ "sses" ?tail ] [ "ss" append ] }
-            { [ "ies" ?tail ] [ "i" append ] }
-            { [ dup "ss" tail? ] [ ] }
-            { [ "s" ?tail ] [ ] }
-            [ ]
-        } cond
-    ] when ;
-
-: -eed ( str -- str )
-    dup consonant-seq 0 > "ee" "eed" ? append ;
-
-: -ed ( str -- str ? )
-    dup stem-vowel? [ [ "ed" append ] unless ] keep ;
-
-: -ing ( str -- str ? )
-    dup stem-vowel? [ [ "ing" append ] unless ] keep ;
-
-: -ed/ing ( str -- str )
-    {
-        { [ "at" ?tail ] [ "ate" append ] }
-        { [ "bl" ?tail ] [ "ble" append ] }
-        { [ "iz" ?tail ] [ "ize" append ] }
-        {
-            [ dup length 1- over double-consonant? ]
-            [ dup "lsz" last-is? [ but-last-slice ] unless ]
-        }
-        {
-            [ t ]
-            [
-                dup consonant-seq 1 = over cvc? and
-                [ "e" append ] when
-            ]
-        }
-    } cond ;
-
-: step1b ( str -- newstr )
-    {
-        { [ "eed" ?tail ] [ -eed ] }
-        {
-            [
-                {
-                    { [ "ed" ?tail ] [ -ed ] }
-                    { [ "ing" ?tail ] [ -ing ] }
-                    [ f ]
-                } cond
-            ] [ -ed/ing ]
-        }
-        [ ]
-    } cond ;
-
-: step1c ( str -- newstr )
-    dup but-last-slice stem-vowel? [
-        "y" ?tail [ "i" append ] when
-    ] when ;
-
-: step2 ( str -- newstr )
-    {
-        { [ "ational" ?tail ] [ "ational" "ate"  r ] }
-        { [ "tional"  ?tail ] [ "tional"  "tion" r ] }
-        { [ "enci"    ?tail ] [ "enci"    "ence" r ] }
-        { [ "anci"    ?tail ] [ "anci"    "ance" r ] }
-        { [ "izer"    ?tail ] [ "izer"    "ize"  r ] }
-        { [ "bli"     ?tail ] [ "bli"     "ble"  r ] }
-        { [ "alli"    ?tail ] [ "alli"    "al"   r ] }
-        { [ "entli"   ?tail ] [ "entli"   "ent"  r ] }
-        { [ "eli"     ?tail ] [ "eli"     "e"    r ] }
-        { [ "ousli"   ?tail ] [ "ousli"   "ous"  r ] }
-        { [ "ization" ?tail ] [ "ization" "ize"  r ] }
-        { [ "ation"   ?tail ] [ "ation"   "ate"  r ] }
-        { [ "ator"    ?tail ] [ "ator"    "ate"  r ] }
-        { [ "alism"   ?tail ] [ "alism"   "al"   r ] }
-        { [ "iveness" ?tail ] [ "iveness" "ive"  r ] }
-        { [ "fulness" ?tail ] [ "fulness" "ful"  r ] }
-        { [ "ousness" ?tail ] [ "ousness" "ous"  r ] }
-        { [ "aliti"   ?tail ] [ "aliti"   "al"   r ] }
-        { [ "iviti"   ?tail ] [ "iviti"   "ive"  r ] }
-        { [ "biliti"  ?tail ] [ "biliti"  "ble"  r ] }
-        { [ "logi"    ?tail ] [ "logi"    "log"  r ] }
-        [ ]
-    } cond ;
-
-: step3 ( str -- newstr )
-    {
-        { [ "icate" ?tail ] [ "icate" "ic" r ] }
-        { [ "ative" ?tail ] [ "ative" ""   r ] }
-        { [ "alize" ?tail ] [ "alize" "al" r ] }
-        { [ "iciti" ?tail ] [ "iciti" "ic" r ] }
-        { [ "ical"  ?tail ] [ "ical"  "ic" r ] }
-        { [ "ful"   ?tail ] [ "ful"   ""   r ] }
-        { [ "ness"  ?tail ] [ "ness"  ""   r ] }
-        [ ]
-    } cond ;
-
-: -ion ( str -- newstr )
-    [
-        "ion"
-    ] [
-        dup "st" last-is? [ "ion" append ] unless
-    ] if-empty ;
-
-: step4 ( str -- newstr )
-    dup {
-        { [ "al"    ?tail ] [ ] }
-        { [ "ance"  ?tail ] [ ] }
-        { [ "ence"  ?tail ] [ ] }
-        { [ "er"    ?tail ] [ ] }
-        { [ "ic"    ?tail ] [ ] }
-        { [ "able"  ?tail ] [ ] }
-        { [ "ible"  ?tail ] [ ] }
-        { [ "ant"   ?tail ] [ ] }
-        { [ "ement" ?tail ] [ ] }
-        { [ "ment"  ?tail ] [ ] }
-        { [ "ent"   ?tail ] [ ] }
-        { [ "ion"   ?tail ] [ -ion ] }
-        { [ "ou"    ?tail ] [ ] }
-        { [ "ism"   ?tail ] [ ] }
-        { [ "ate"   ?tail ] [ ] }
-        { [ "iti"   ?tail ] [ ] }
-        { [ "ous"   ?tail ] [ ] }
-        { [ "ive"   ?tail ] [ ] }
-        { [ "ize"   ?tail ] [ ] }
-        [ ]
-    } cond dup consonant-seq 1 > [ nip ] [ drop ] if ;
-
-: remove-e? ( str -- ? )
-    dup consonant-seq dup 1 >
-    [ 2drop t ]
-    [ 1 = [ but-last-slice cvc? not ] [ drop f ] if ] if ;
-
-: remove-e ( str -- newstr )
-    dup peek CHAR: e = [
-        dup remove-e? [ but-last-slice ] when
-    ] when ;
-
-: ll->l ( str -- newstr )
-    {
-        { [ dup peek CHAR: l = not ] [ ] }
-        { [ dup length 1- over double-consonant? not ] [ ] }
-        { [ dup consonant-seq 1 > ] [ but-last-slice ] }
-        [ ]
-    } cond ;
-
-: step5 ( str -- newstr ) remove-e ll->l ;
-
-: stem ( str -- newstr )
-    dup length 2 <= [
-        step1a step1b step1c step2 step3 step4 step5 "" like
-    ] unless ;
diff --git a/extra/porter-stemmer/summary.txt b/extra/porter-stemmer/summary.txt
deleted file mode 100644 (file)
index dd7746b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Porter stemming algorithm
diff --git a/extra/porter-stemmer/test/output.txt b/extra/porter-stemmer/test/output.txt
deleted file mode 100644 (file)
index 595cb67..0000000
+++ /dev/null
@@ -1,23531 +0,0 @@
-a
-aaron
-abaissiez
-abandon
-abandon
-abas
-abash
-abat
-abat
-abat
-abat
-abat
-abbess
-abbei
-abbei
-abbomin
-abbot
-abbot
-abbrevi
-ab
-abel
-aberga
-abergavenni
-abet
-abet
-abhomin
-abhor
-abhorr
-abhor
-abhor
-abhor
-abhorson
-abid
-abid
-abil
-abil
-abject
-abjectli
-abject
-abjur
-abjur
-abl
-abler
-aboard
-abod
-abod
-abod
-abod
-abomin
-abomin
-abomin
-abort
-abort
-abound
-abound
-about
-abov
-abr
-abraham
-abram
-abreast
-abridg
-abridg
-abridg
-abridg
-abroach
-abroad
-abrog
-abrook
-abrupt
-abrupt
-abruptli
-absenc
-absent
-absei
-absolut
-absolut
-absolv
-absolv
-abstain
-abstemi
-abstin
-abstract
-absurd
-absyrtu
-abund
-abund
-abundantli
-abu
-abus
-abus
-abus
-abus
-abus
-abut
-abi
-abysm
-ac
-academ
-academ
-accent
-accent
-accept
-accept
-accept
-accept
-accept
-access
-accessari
-access
-accid
-accid
-accident
-accident
-accid
-accit
-accit
-accit
-acclam
-accommod
-accommod
-accommod
-accommod
-accommodo
-accompani
-accompani
-accompani
-accomplic
-accomplish
-accomplish
-accomplish
-accomplish
-accompt
-accord
-accord
-accord
-accordeth
-accord
-accordingli
-accord
-accost
-accost
-account
-account
-account
-account
-accoutr
-accoutr
-accoutr
-accru
-accumul
-accumul
-accumul
-accur
-accurs
-accurst
-accu
-accus
-accus
-accus
-accusativo
-accus
-accus
-accus
-accus
-accus
-accuseth
-accus
-accustom
-accustom
-ac
-acerb
-ach
-acheron
-ach
-achiev
-achiev
-achiev
-achiev
-achiev
-achiev
-achiev
-achiev
-achil
-ach
-achitophel
-acknowledg
-acknowledg
-acknowledg
-acknowledg
-acknown
-acold
-aconitum
-acordo
-acorn
-acquaint
-acquaint
-acquaint
-acquaint
-acquir
-acquir
-acquisit
-acquit
-acquitt
-acquitt
-acquit
-acr
-acr
-across
-act
-actaeon
-act
-act
-action
-action
-actium
-activ
-activ
-activ
-actor
-actor
-act
-actual
-actur
-acut
-acut
-ad
-adag
-adalla
-adam
-adam
-add
-ad
-adder
-adder
-addeth
-addict
-addict
-addict
-ad
-addit
-addit
-addl
-address
-address
-addrest
-add
-adher
-adher
-adieu
-adieu
-adjac
-adjoin
-adjoin
-adjourn
-adjudg
-adjudg
-adjunct
-administ
-administr
-admir
-admir
-admir
-admir
-admir
-admir
-admir
-admir
-admiringli
-admiss
-admit
-admit
-admitt
-admit
-admit
-admonish
-admonish
-admonish
-admonish
-admonit
-ado
-adoni
-adopt
-adopt
-adoptedli
-adopt
-adopti
-adopt
-ador
-ador
-ador
-ador
-ador
-ador
-adorest
-adoreth
-ador
-adorn
-adorn
-adorn
-adorn
-adorn
-adown
-adramadio
-adrian
-adriana
-adriano
-adriat
-adsum
-adul
-adulter
-adulter
-adulter
-adulteress
-adulteri
-adulter
-adulteri
-adultress
-advanc
-advanc
-advanc
-advanc
-advanc
-advanc
-advanc
-advantag
-advantag
-advantag
-advantag
-advantag
-advantag
-advent
-adventur
-adventur
-adventur
-adventur
-adventur
-adventur
-adversari
-adversari
-advers
-advers
-advers
-advers
-adverti
-advertis
-advertis
-advertis
-advertis
-advic
-advi
-advis
-advis
-advisedli
-advis
-advis
-advoc
-advoc
-aeacida
-aeacid
-aedil
-aedil
-aegeon
-aegion
-aegl
-aemelia
-aemilia
-aemiliu
-aenea
-aeolu
-aer
-aerial
-aeri
-aesculapiu
-aeson
-aesop
-aetna
-afar
-afear
-afeard
-affabl
-affabl
-affair
-affair
-affair
-affect
-affect
-affect
-affect
-affectedli
-affecteth
-affect
-affect
-affection
-affection
-affect
-affect
-affeer
-affianc
-affianc
-affianc
-affi
-affin
-affin
-affin
-affirm
-affirm
-affirm
-afflict
-afflict
-afflict
-afflict
-afflict
-afford
-affordeth
-afford
-affrai
-affright
-affright
-affright
-affront
-affront
-affi
-afield
-afir
-afloat
-afoot
-afor
-aforehand
-aforesaid
-afraid
-afresh
-afric
-africa
-african
-afront
-after
-afternoon
-afterward
-afterward
-ag
-again
-against
-agamemmon
-agamemnon
-agat
-agaz
-ag
-ag
-agenor
-agent
-agent
-ag
-aggrav
-aggrief
-agil
-agincourt
-agit
-aglet
-agniz
-ago
-agon
-agoni
-agre
-agre
-agre
-agreement
-agre
-agrippa
-aground
-agu
-aguecheek
-agu
-aguefac
-agu
-ah
-aha
-ahungri
-ai
-aialvolio
-aiaria
-aid
-aidanc
-aidant
-aid
-aid
-aidless
-aid
-ail
-aim
-aim
-aimest
-aim
-aim
-ainsi
-aio
-air
-air
-airless
-air
-airi
-ajax
-akil
-al
-alabast
-alack
-alacr
-alarbu
-alarm
-alarm
-alarum
-alarum
-ala
-alb
-alban
-alban
-albani
-albeit
-albion
-alchemist
-alchemi
-alcibiad
-alcid
-alder
-alderman
-aldermen
-al
-alecto
-alehous
-alehous
-alencon
-alengon
-aleppo
-al
-alewif
-alexand
-alexand
-alexandria
-alexandrian
-alexa
-alia
-alic
-alien
-aliena
-alight
-alight
-alight
-alii
-alik
-alisand
-aliv
-all
-alla
-allai
-allai
-allai
-allay
-allay
-allai
-alleg
-alleg
-alleg
-alleg
-allegi
-allegi
-allei
-allei
-allhallowma
-allianc
-allicholi
-alli
-alli
-allig
-allig
-allon
-allot
-allot
-allot
-allotteri
-allow
-allow
-allow
-allow
-allow
-allur
-allur
-allur
-allur
-allus
-alli
-allycholli
-almain
-almanac
-almanack
-almanac
-almighti
-almond
-almost
-alm
-almsman
-alo
-aloft
-alon
-along
-alonso
-aloof
-aloud
-alphabet
-alphabet
-alphonso
-alp
-alreadi
-also
-alt
-altar
-altar
-alter
-alter
-alter
-alter
-althaea
-although
-altitud
-altogeth
-alton
-alwai
-alwai
-am
-amaimon
-amain
-amak
-amamon
-amaz
-amaz
-amaz
-amazedli
-amazed
-amaz
-amaz
-amazeth
-amaz
-amazon
-amazonian
-amazon
-ambassador
-ambassador
-amber
-ambiguid
-ambigu
-ambigu
-ambit
-ambit
-ambiti
-ambiti
-ambl
-ambl
-ambl
-ambl
-ambo
-ambuscado
-ambush
-amen
-amend
-amend
-amend
-amend
-amerc
-america
-am
-amiabl
-amid
-amidst
-amien
-ami
-amiss
-amiti
-amiti
-amnipot
-among
-amongst
-amor
-amor
-amort
-amount
-amount
-amour
-amphimacu
-ampl
-ampler
-amplest
-amplifi
-amplifi
-ampli
-ampthil
-amurath
-amynta
-an
-anatomiz
-anatom
-anatomi
-ancestor
-ancestor
-ancestri
-anchis
-anchor
-anchorag
-anchor
-anchor
-anchor
-anchovi
-ancient
-ancientri
-ancient
-ancu
-and
-andiron
-andpholu
-andren
-andrew
-andromach
-andronici
-andronicu
-anew
-ang
-angel
-angelica
-angel
-angelo
-angel
-anger
-angerli
-anger
-ang
-angier
-angl
-anglai
-angl
-angler
-angleterr
-anglia
-angl
-anglish
-angrili
-angri
-anguish
-angu
-anim
-anim
-animi
-anjou
-ankl
-anna
-annal
-ann
-annex
-annex
-annexion
-annex
-annothan
-announc
-annoi
-annoy
-annoi
-annual
-anoint
-anoint
-anon
-anoth
-anselmo
-answer
-answer
-answer
-answerest
-answer
-answer
-ant
-ant
-antenor
-antenorid
-anteroom
-anthem
-anthem
-anthoni
-anthropophagi
-anthropophaginian
-antiat
-antic
-anticip
-anticip
-anticipatest
-anticip
-anticip
-antick
-anticli
-antic
-antidot
-antidot
-antigonu
-antiopa
-antipathi
-antipholu
-antipholus
-antipod
-antiquari
-antiqu
-antiqu
-antium
-antoniad
-antonio
-antoniu
-antoni
-antr
-anvil
-ani
-anybodi
-anyon
-anyth
-anywher
-ap
-apac
-apart
-apart
-apart
-ap
-apemantu
-apennin
-ap
-apiec
-apish
-apollinem
-apollo
-apollodoru
-apolog
-apoplex
-apoplexi
-apostl
-apostl
-apostropha
-apoth
-apothecari
-appal
-appal
-appal
-appal
-apparel
-apparel
-apparel
-appar
-appar
-apparit
-apparit
-appeach
-appeal
-appeal
-appear
-appear
-appear
-appeareth
-appear
-appear
-appea
-appeas
-appeas
-appel
-appel
-appele
-appel
-appelez
-appel
-appel
-appelon
-appendix
-apperil
-appertain
-appertain
-appertain
-appertain
-appertin
-appertin
-appetit
-appetit
-applaud
-applaud
-applaud
-applaus
-applaus
-appl
-appl
-appletart
-applianc
-applianc
-applic
-appli
-appli
-appli
-appli
-appoint
-appoint
-appoint
-appoint
-appoint
-apprehend
-apprehend
-apprehend
-apprehens
-apprehens
-apprehens
-apprendr
-apprenn
-apprenticehood
-appri
-approach
-approach
-approach
-approacheth
-approach
-approb
-approof
-appropri
-approv
-approv
-approv
-approv
-approv
-appurten
-appurten
-apricock
-april
-apron
-apron
-apt
-apter
-aptest
-aptli
-apt
-aqua
-aquilon
-aquitain
-arabia
-arabian
-arais
-arbitr
-arbitr
-arbitr
-arbitr
-arbor
-arbour
-arc
-arch
-archbishop
-archbishopr
-archdeacon
-arch
-archelau
-archer
-archer
-archeri
-archibald
-archidamu
-architect
-arcu
-ard
-arden
-ardent
-ardour
-ar
-argal
-argier
-argo
-argosi
-argosi
-argu
-argu
-argu
-argu
-argu
-argument
-argument
-argu
-ariachn
-ariadn
-ariel
-ari
-aright
-arinado
-arini
-arion
-aris
-aris
-ariseth
-aris
-aristod
-aristotl
-arithmet
-arithmetician
-ark
-arm
-arma
-armado
-armado
-armagnac
-arm
-arm
-armenia
-armi
-armigero
-arm
-armipot
-armor
-armour
-armour
-armour
-armour
-armouri
-arm
-armi
-arn
-aroint
-aros
-arous
-arous
-arragon
-arraign
-arraign
-arraign
-arraign
-arrant
-arra
-arrai
-arrearag
-arrest
-arrest
-arrest
-arriv
-arriv
-arriv
-arriv
-arriv
-arriv
-arriv
-arrog
-arrog
-arrog
-arrow
-arrow
-art
-artemidoru
-arteri
-arthur
-articl
-articl
-articul
-artific
-artifici
-artilleri
-artir
-artist
-artist
-artless
-artoi
-art
-artu
-arviragu
-as
-asaph
-ascaniu
-ascend
-ascend
-ascendeth
-ascend
-ascens
-ascent
-ascrib
-ascrib
-ash
-asham
-asham
-asher
-ash
-ashford
-ashor
-ashout
-ashi
-asia
-asid
-ask
-askanc
-ask
-asker
-asketh
-ask
-ask
-aslant
-asleep
-asmath
-asp
-aspect
-aspect
-aspen
-aspers
-aspic
-aspici
-aspic
-aspir
-aspir
-aspir
-aspir
-asquint
-ass
-assail
-assail
-assail
-assail
-assail
-assaileth
-assail
-assail
-assassin
-assault
-assault
-assault
-assai
-assai
-assai
-assembl
-assembl
-assembl
-assembl
-assembl
-assent
-ass
-assez
-assign
-assign
-assign
-assinico
-assist
-assist
-assist
-assist
-assist
-assist
-assist
-associ
-associ
-associ
-assuag
-assubjug
-assum
-assum
-assum
-assumpt
-assur
-assur
-assur
-assur
-assuredli
-assur
-assyrian
-astonish
-astonish
-astraea
-astrai
-astrea
-astronom
-astronom
-astronom
-astronomi
-asund
-at
-atalanta
-at
-at
-athenian
-athenian
-athen
-athol
-athversari
-athwart
-atla
-atomi
-atomi
-aton
-aton
-aton
-atropo
-attach
-attach
-attach
-attain
-attaind
-attain
-attaint
-attaint
-attaintur
-attempt
-attempt
-attempt
-attempt
-attempt
-attend
-attend
-attend
-attend
-attend
-attend
-attendeth
-attend
-attend
-attent
-attent
-attent
-attentiven
-attest
-attest
-attir
-attir
-attir
-attir
-attornei
-attornei
-attornei
-attorneyship
-attract
-attract
-attract
-attract
-attribut
-attribut
-attribut
-attribut
-attribut
-atwain
-au
-aubrei
-auburn
-aucun
-audaci
-audaci
-audac
-audibl
-audienc
-audi
-audit
-auditor
-auditor
-auditori
-audr
-audrei
-aufidiu
-aufidius
-auger
-aught
-augment
-augment
-augment
-augment
-augur
-augur
-augur
-augur
-augur
-auguri
-august
-augustu
-auld
-aumerl
-aunchient
-aunt
-aunt
-auricular
-aurora
-auspici
-aussi
-auster
-auster
-auster
-auster
-austria
-aut
-authent
-author
-author
-author
-author
-author
-author
-autolycu
-autr
-autumn
-auvergn
-avail
-avail
-avaric
-avarici
-avaunt
-av
-aveng
-aveng
-aveng
-aver
-avert
-av
-avez
-avi
-avoid
-avoid
-avoid
-avoid
-avoirdupoi
-avouch
-avouch
-avouch
-avouch
-avow
-aw
-await
-await
-awak
-awak
-awak
-awaken
-awaken
-awaken
-awak
-awak
-award
-award
-awasi
-awai
-aw
-aweari
-aweless
-aw
-awhil
-awkward
-awl
-awoo
-awork
-awri
-ax
-axl
-axletre
-ay
-ay
-ayez
-ayli
-azur
-azur
-b
-ba
-baa
-babbl
-babbl
-babbl
-babe
-babe
-babi
-baboon
-baboon
-babi
-babylon
-bacar
-bacchan
-bacchu
-bach
-bachelor
-bachelor
-back
-backbit
-backbitten
-back
-back
-backward
-backwardli
-backward
-bacon
-bacon
-bad
-bade
-badg
-badg
-badg
-badli
-bad
-bae
-baffl
-baffl
-baffl
-bag
-baggag
-bagot
-bagpip
-bag
-bail
-bailiff
-baillez
-baili
-baisant
-baise
-baiser
-bait
-bait
-bait
-bait
-bait
-bajazet
-bak
-bake
-bake
-baker
-baker
-bake
-bake
-bal
-balanc
-balanc
-balconi
-bald
-baldrick
-bale
-bale
-balk
-ball
-ballad
-ballad
-ballast
-ballast
-ballet
-ballow
-ball
-balm
-balm
-balmi
-balsam
-balsamum
-balth
-balthasar
-balthazar
-bame
-ban
-banburi
-band
-bandi
-band
-bandit
-banditti
-banditto
-band
-bandi
-bandi
-bane
-bane
-bang
-bangor
-banish
-banish
-banish
-banish
-banist
-bank
-bankrout
-bankrupt
-bankrupt
-bank
-banner
-banneret
-banner
-ban
-bann
-banquet
-banquet
-banquet
-banquet
-banquo
-ban
-baptism
-baptista
-baptiz
-bar
-barbarian
-barbarian
-barbar
-barbar
-barbari
-barbason
-barb
-barber
-barbermong
-bard
-bardolph
-bard
-bare
-bare
-barefac
-barefac
-barefoot
-barehead
-bare
-bare
-bar
-bargain
-bargain
-barg
-bargulu
-bare
-bark
-bark
-barkloughli
-bark
-barki
-barlei
-barm
-barn
-barnacl
-barnardin
-barn
-barn
-barnet
-barn
-baron
-baron
-baroni
-barr
-barraba
-barrel
-barrel
-barren
-barrenli
-barren
-barricado
-barricado
-barrow
-bar
-barson
-barter
-bartholomew
-ba
-basan
-base
-baseless
-base
-base
-baser
-base
-basest
-bash
-bash
-basilisco
-basilisk
-basilisk
-basimecu
-basin
-basingstok
-basin
-basi
-bask
-basket
-basket
-bass
-bassanio
-basset
-bassianu
-basta
-bastard
-bastard
-bastardli
-bastard
-bastardi
-bast
-bast
-bastinado
-bast
-bat
-batail
-batch
-bate
-bate
-bate
-bath
-bath
-bath
-bath
-bath
-bate
-batler
-bat
-batt
-battalia
-battalion
-batten
-batter
-batter
-batter
-batteri
-battl
-battl
-battlefield
-battlement
-battl
-batti
-baubl
-baubl
-baubl
-baulk
-bavin
-bawcock
-bawd
-bawdri
-bawd
-bawdi
-bawl
-bawl
-bai
-bai
-baynard
-bayonn
-bai
-be
-beach
-beach
-beachi
-beacon
-bead
-bead
-beadl
-beadl
-bead
-beadsmen
-beagl
-beagl
-beak
-beak
-beam
-beam
-beam
-bean
-bean
-bear
-beard
-beard
-beardless
-beard
-bearer
-bearer
-bearest
-beareth
-bear
-bear
-beast
-beastliest
-beastli
-beastli
-beast
-beat
-beat
-beaten
-beat
-beatric
-beat
-beau
-beaufort
-beaumond
-beaumont
-beauteou
-beauti
-beauti
-beautifi
-beauti
-beautifi
-beauti
-beaver
-beaver
-becam
-becaus
-bechanc
-bechanc
-bechanc
-beck
-beckon
-beckon
-beck
-becom
-becom
-becom
-becom
-becom
-becom
-bed
-bedabbl
-bedash
-bedaub
-bedazzl
-bedchamb
-bedcloth
-bed
-bedeck
-bedeck
-bedew
-bedfellow
-bedfellow
-bedford
-bedlam
-bedrench
-bedrid
-bed
-bedtim
-bedward
-bee
-beef
-beef
-beehiv
-been
-beer
-bee
-beest
-beetl
-beetl
-beev
-befal
-befallen
-befal
-befel
-befit
-befit
-befit
-befor
-befor
-beforehand
-befortun
-befriend
-befriend
-befriend
-beg
-began
-beget
-beget
-beget
-begg
-beggar
-beggar
-beggarli
-beggarman
-beggar
-beggari
-beg
-begin
-beginn
-begin
-begin
-begin
-begnawn
-begon
-begot
-begotten
-begrim
-beg
-beguil
-beguil
-beguil
-beguil
-beguil
-begun
-behalf
-behalf
-behav
-behav
-behavedst
-behavior
-behavior
-behaviour
-behaviour
-behead
-behead
-beheld
-behest
-behest
-behind
-behold
-behold
-behold
-beholdest
-behold
-behold
-behoof
-behoofful
-behoov
-behov
-behov
-behowl
-be
-bel
-belariu
-belch
-belch
-beldam
-beldam
-beldam
-bele
-belgia
-beli
-beli
-belief
-beliest
-believ
-believ
-believ
-believ
-believest
-believ
-belik
-bell
-bellario
-bell
-belli
-belli
-bellman
-bellona
-bellow
-bellow
-bellow
-bellow
-bell
-belli
-belly
-belman
-belmont
-belock
-belong
-belong
-belong
-belong
-belov
-belov
-belov
-below
-belt
-belzebub
-bemad
-bemet
-bemet
-bemoan
-bemoan
-bemock
-bemoil
-bemonst
-ben
-bench
-bencher
-bench
-bend
-bend
-bend
-bend
-bene
-beneath
-benedicit
-benedick
-benedict
-benedictu
-benefactor
-benefic
-benefici
-benefit
-benefit
-benefit
-benet
-benevol
-benevol
-beni
-benison
-bennet
-bent
-bentii
-bentivolii
-bent
-benumb
-benvolio
-bepaint
-beprai
-bequeath
-bequeath
-bequeath
-bequest
-ber
-berard
-berattl
-berai
-bere
-bereav
-bereav
-bereav
-bereft
-bergamo
-bergomask
-berhym
-berhym
-berkelei
-bermooth
-bernardo
-berod
-berown
-berri
-berri
-berrord
-berri
-bertram
-berwick
-bescreen
-beseech
-beseech
-beseech
-beseech
-beseek
-beseem
-beseemeth
-beseem
-beseem
-beset
-beshrew
-besid
-besid
-besieg
-besieg
-besieg
-beslubb
-besmear
-besmear
-besmirch
-besom
-besort
-besot
-bespak
-bespeak
-bespic
-bespok
-bespot
-bess
-bessi
-best
-bestain
-best
-bestial
-bestir
-bestirr
-bestow
-bestow
-bestow
-bestow
-bestraught
-bestrew
-bestrid
-bestrid
-bestrid
-bet
-betak
-beteem
-bethink
-bethought
-bethroth
-bethump
-betid
-betid
-betideth
-betim
-betim
-betoken
-betook
-betoss
-betrai
-betrai
-betrai
-betrai
-betrim
-betroth
-betroth
-betroth
-bett
-bet
-better
-better
-better
-better
-bet
-bettr
-between
-betwixt
-bevel
-beverag
-bevi
-bevi
-bewail
-bewail
-bewail
-bewail
-bewar
-bewast
-beweep
-bewept
-bewet
-bewhor
-bewitch
-bewitch
-bewitch
-bewrai
-beyond
-bezonian
-bezonian
-bianca
-bianco
-bia
-bibbl
-bicker
-bid
-bidden
-bid
-bid
-biddi
-bide
-bide
-bide
-bid
-bien
-bier
-bifold
-big
-bigami
-biggen
-bigger
-big
-bigot
-bilberri
-bilbo
-bilbo
-bilbow
-bill
-billet
-billet
-billiard
-bill
-billow
-billow
-bill
-bin
-bind
-bindeth
-bind
-bind
-biondello
-birch
-bird
-bird
-birdlim
-bird
-birnam
-birth
-birthdai
-birthdom
-birthplac
-birthright
-birthright
-birth
-bi
-biscuit
-bishop
-bishop
-bisson
-bit
-bitch
-bite
-biter
-bite
-bite
-bit
-bitt
-bitten
-bitter
-bitterest
-bitterli
-bitter
-blab
-blabb
-blab
-blab
-black
-blackamoor
-blackamoor
-blackberri
-blackberri
-blacker
-blackest
-blackfriar
-blackheath
-blackmer
-black
-black
-bladder
-bladder
-blade
-blade
-blade
-blain
-blam
-blame
-blame
-blame
-blameless
-blame
-blanc
-blanca
-blanch
-blank
-blanket
-blank
-blasphem
-blasphem
-blasphem
-blasphemi
-blast
-blast
-blast
-blastment
-blast
-blaz
-blaze
-blaze
-blaze
-blazon
-blazon
-blazon
-bleach
-bleach
-bleak
-blear
-blear
-bleat
-bleat
-bleat
-bled
-bleed
-bleedest
-bleedeth
-bleed
-bleed
-blemish
-blemish
-blench
-blench
-blend
-blend
-blent
-bless
-bless
-blessedli
-blessed
-bless
-blesseth
-bless
-bless
-blest
-blew
-blind
-blind
-blindfold
-blind
-blindli
-blind
-blind
-blink
-blink
-bliss
-blist
-blister
-blister
-blith
-blithild
-bloat
-block
-blockish
-block
-bloi
-blood
-blood
-bloodhound
-bloodi
-bloodier
-bloodiest
-bloodili
-bloodless
-blood
-bloodsh
-bloodshed
-bloodstain
-bloodi
-bloom
-bloom
-blossom
-blossom
-blossom
-blot
-blot
-blot
-blot
-blount
-blow
-blow
-blower
-blowest
-blow
-blown
-blow
-blows
-blubb
-blubber
-blubber
-blue
-bluecap
-bluest
-blunt
-blunt
-blunter
-bluntest
-blunt
-bluntli
-blunt
-blunt
-blur
-blurr
-blur
-blush
-blush
-blushest
-blush
-blust
-bluster
-bluster
-bluster
-bo
-boar
-board
-board
-board
-board
-boarish
-boar
-boast
-boast
-boast
-boast
-boast
-boat
-boat
-boatswain
-bob
-bobb
-boblibindo
-bobtail
-bocchu
-bode
-bode
-bodement
-bode
-bodg
-bodi
-bodi
-bodiless
-bodili
-bode
-bodkin
-bodi
-bodykin
-bog
-boggl
-boggler
-bog
-bohemia
-bohemian
-bohun
-boil
-boil
-boil
-boist
-boister
-boister
-boitier
-bold
-bolden
-bolder
-boldest
-boldli
-bold
-bold
-bolingbrok
-bolster
-bolt
-bolt
-bolter
-bolter
-bolt
-bolt
-bombard
-bombard
-bombast
-bon
-bona
-bond
-bondag
-bond
-bondmaid
-bondman
-bondmen
-bond
-bondslav
-bone
-boneless
-bone
-bonfir
-bonfir
-bonjour
-bonn
-bonnet
-bonnet
-bonni
-bono
-bonto
-bonvil
-bood
-book
-bookish
-book
-boon
-boor
-boorish
-boor
-boot
-boot
-booti
-bootless
-boot
-booti
-bor
-bora
-borachio
-bordeaux
-border
-border
-border
-border
-bore
-borea
-bore
-bore
-born
-born
-borough
-borough
-borrow
-borrow
-borrow
-borrow
-borrow
-bosko
-bosko
-boski
-bosom
-bosom
-boson
-boss
-bosworth
-botch
-botcher
-botch
-botchi
-both
-bot
-bottl
-bottl
-bottl
-bottom
-bottomless
-bottom
-bouciqualt
-boug
-bough
-bough
-bought
-bounc
-bounc
-bound
-bound
-bounden
-boundeth
-bound
-boundless
-bound
-bounteou
-bounteous
-bounti
-bounti
-bountifulli
-bounti
-bourbier
-bourbon
-bourchier
-bourdeaux
-bourn
-bout
-bout
-bove
-bow
-bowcas
-bow
-bowel
-bower
-bow
-bowl
-bowler
-bowl
-bowl
-bow
-bowsprit
-bowstr
-box
-box
-boi
-boyet
-boyish
-boi
-brabant
-brabantio
-brabbl
-brabbler
-brac
-brace
-bracelet
-bracelet
-brach
-braci
-brag
-bragg
-braggard
-braggard
-braggart
-braggart
-brag
-brag
-bragless
-brag
-braid
-braid
-brain
-brain
-brainford
-brainish
-brainless
-brain
-brainsick
-brainsickli
-brake
-brakenburi
-brake
-brambl
-bran
-branch
-branch
-branchless
-brand
-brand
-brandish
-brandon
-brand
-bra
-brass
-brassi
-brat
-brat
-brav
-brave
-brave
-brave
-braver
-braveri
-brave
-bravest
-brave
-brawl
-brawler
-brawl
-brawl
-brawn
-brawn
-brai
-brai
-braz
-brazen
-brazier
-breach
-breach
-bread
-breadth
-break
-breaker
-breakfast
-break
-break
-breast
-breast
-breast
-breastplat
-breast
-breath
-breath
-breath
-breather
-breather
-breath
-breathest
-breath
-breathless
-breath
-brecknock
-bred
-breech
-breech
-breech
-breed
-breeder
-breeder
-breed
-breed
-brees
-breez
-breff
-bretagn
-brethen
-bretheren
-brethren
-brevi
-breviti
-brew
-brewag
-brewer
-brewer
-brew
-brew
-briareu
-briar
-brib
-bribe
-briber
-bribe
-brick
-bricklay
-brick
-bridal
-bride
-bridegroom
-bridegroom
-bride
-bridg
-bridgenorth
-bridg
-bridget
-bridl
-bridl
-brief
-briefer
-briefest
-briefli
-brief
-brier
-brier
-brigandin
-bright
-brighten
-brightest
-brightli
-bright
-brim
-brim
-brim
-brimston
-brind
-brine
-bring
-bringer
-bringeth
-bring
-bring
-bring
-brinish
-brink
-brisk
-briski
-bristl
-bristl
-bristli
-bristol
-bristow
-britain
-britain
-britain
-british
-briton
-briton
-brittani
-brittl
-broach
-broach
-broad
-broader
-broadsid
-broca
-brock
-brogu
-broil
-broil
-broil
-broke
-broken
-brokenli
-broker
-broker
-broke
-broke
-brooch
-brooch
-brood
-brood
-brood
-brook
-brook
-broom
-broomstaff
-broth
-brothel
-brother
-brotherhood
-brotherhood
-brotherli
-brother
-broth
-brought
-brow
-brown
-browner
-brownist
-browni
-brow
-brows
-brows
-brui
-bruis
-bruis
-bruis
-bruis
-bruit
-bruit
-brundusium
-brunt
-brush
-brush
-brute
-brutish
-brutu
-bubbl
-bubbl
-bubbl
-bubukl
-buck
-bucket
-bucket
-buck
-buckingham
-buckl
-buckl
-buckler
-buckler
-bucklersburi
-buckl
-buckram
-buck
-bud
-bud
-bud
-budg
-budger
-budget
-bud
-buff
-buffet
-buffet
-buffet
-bug
-bugbear
-bugl
-bug
-build
-build
-buildeth
-build
-build
-build
-built
-bulk
-bulk
-bull
-bullcalf
-bullen
-bullen
-bullet
-bullet
-bullock
-bull
-bulli
-bulmer
-bulwark
-bulwark
-bum
-bumbast
-bump
-bumper
-bum
-bunch
-bunch
-bundl
-bung
-bunghol
-bungl
-bunt
-buoi
-bur
-burbolt
-burd
-burden
-burden
-burden
-burden
-burden
-burgh
-burgher
-burgher
-burglari
-burgomast
-burgonet
-burgundi
-burial
-buri
-burier
-buriest
-burli
-burn
-burn
-burnet
-burneth
-burn
-burnish
-burn
-burnt
-burr
-burrow
-bur
-burst
-burst
-burst
-burthen
-burthen
-burton
-buri
-buri
-bush
-bushel
-bush
-bushi
-busi
-busili
-busin
-busi
-busi
-buskin
-buski
-buss
-buss
-buss
-bustl
-bustl
-busi
-but
-butche
-butcher
-butcher
-butcheri
-butcherli
-butcher
-butcheri
-butler
-butt
-butter
-butter
-butterfli
-butterfli
-butterwoman
-butteri
-buttock
-buttock
-button
-buttonhol
-button
-buttress
-buttri
-butt
-buxom
-bui
-buyer
-bui
-bui
-buzz
-buzzard
-buzzard
-buzzer
-buzz
-by
-bye
-byzantium
-c
-ca
-cabbag
-cabilero
-cabin
-cabin
-cabl
-cabl
-cackl
-cacodemon
-caddi
-caddiss
-cade
-cadenc
-cadent
-cade
-cadmu
-caduceu
-cadwal
-cadwallad
-caeliu
-caelo
-caesar
-caesarion
-caesar
-cage
-cage
-cagion
-cain
-caith
-caitiff
-caitiff
-caiu
-cak
-cake
-cake
-calab
-calai
-calam
-calam
-calcha
-calcul
-calen
-calendar
-calendar
-calf
-caliban
-caliban
-calipoli
-caliti
-caliv
-call
-callat
-call
-callet
-call
-call
-calm
-calmest
-calmli
-calm
-calm
-calpurnia
-calumni
-calumni
-calumni
-calumni
-calv
-calv
-calv
-calveskin
-calydon
-cam
-cambio
-cambria
-cambric
-cambric
-cambridg
-cambys
-came
-camel
-camelot
-camel
-camest
-camillo
-camlet
-camomil
-camp
-campeiu
-camp
-camp
-can
-canakin
-canari
-canari
-cancel
-cancel
-cancel
-cancel
-cancel
-cancer
-candidatu
-candi
-candl
-candl
-candlestick
-candi
-canidiu
-cank
-canker
-cankerblossom
-canker
-cannib
-cannib
-cannon
-cannon
-cannon
-cannot
-canon
-canoniz
-canon
-canon
-canon
-canopi
-canopi
-canopi
-canst
-canstick
-canterburi
-cantl
-canton
-canu
-canva
-canvass
-canzonet
-cap
-capabl
-capabl
-capac
-capac
-caparison
-capdv
-cape
-capel
-capel
-caper
-caper
-capet
-caphi
-capilet
-capitain
-capit
-capit
-capitol
-capitul
-capocchia
-capon
-capon
-capp
-cappadocia
-capriccio
-caprici
-cap
-capt
-captain
-captain
-captainship
-captiou
-captiv
-captiv
-captiv
-captiv
-captiv
-captiv
-captum
-capuciu
-capulet
-capulet
-car
-carack
-carack
-carat
-carawai
-carbonado
-carbuncl
-carbuncl
-carbuncl
-carcanet
-carcas
-carcas
-carcass
-carcass
-card
-cardecu
-card
-carder
-cardin
-cardin
-cardin
-cardmak
-card
-carduu
-care
-care
-career
-career
-care
-carefulli
-careless
-carelessli
-careless
-care
-caret
-cargo
-carl
-carlisl
-carlot
-carman
-carmen
-carnal
-carnal
-carnarvonshir
-carnat
-carnat
-carol
-carou
-carous
-carous
-carous
-carous
-carp
-carpent
-carper
-carpet
-carpet
-carp
-carriag
-carriag
-carri
-carrier
-carrier
-carri
-carrion
-carrion
-carri
-carri
-car
-cart
-carter
-carthag
-cart
-carv
-carv
-carv
-carver
-carv
-carv
-ca
-casa
-casaer
-casca
-case
-casement
-casement
-case
-cash
-cashier
-case
-cask
-casket
-casket
-casket
-casqu
-casqu
-cassado
-cassandra
-cassibelan
-cassio
-cassiu
-cassock
-cast
-castalion
-castawai
-castawai
-cast
-caster
-castig
-castig
-castil
-castiliano
-cast
-castl
-castl
-cast
-casual
-casual
-casualti
-casualti
-cat
-cataian
-catalogu
-cataplasm
-cataract
-catarrh
-catastroph
-catch
-catcher
-catch
-catch
-cate
-catechis
-catech
-catech
-cater
-caterpillar
-cater
-caterwaul
-cate
-catesbi
-cathedr
-catlik
-catl
-catl
-cato
-cat
-cattl
-caucasu
-caudl
-cauf
-caught
-cauldron
-cau
-caus
-caus
-causeless
-causer
-caus
-causest
-causeth
-cautel
-cautel
-cautel
-cauter
-caution
-caution
-cavaleiro
-cavaleri
-cavali
-cave
-cavern
-cavern
-cave
-caveto
-caviari
-cavil
-cavil
-cawdor
-cawdron
-caw
-ce
-cea
-ceas
-ceas
-ceaseth
-cedar
-cedar
-cediu
-celebr
-celebr
-celebr
-celebr
-celer
-celesti
-celia
-cell
-cellar
-cellarag
-celsa
-cement
-censer
-censor
-censorinu
-censur
-censur
-censur
-censur
-censur
-censur
-centaur
-centaur
-centr
-cent
-centuri
-centurion
-centurion
-centuri
-cerberu
-cerecloth
-cerement
-ceremoni
-ceremoni
-ceremoni
-ceremoni
-ceremoni
-cere
-cern
-certain
-certain
-certainli
-certainti
-certainti
-cert
-certif
-certifi
-certifi
-certifi
-ce
-cesario
-cess
-cess
-cestern
-cetera
-cett
-chace
-chaf
-chafe
-chafe
-chafe
-chaff
-chaffless
-chafe
-chain
-chain
-chair
-chair
-chalic
-chalic
-chalic
-chalk
-chalk
-chalki
-challeng
-challeng
-challeng
-challeng
-challeng
-challeng
-cham
-chamber
-chamber
-chamberlain
-chamberlain
-chambermaid
-chambermaid
-chamber
-chameleon
-champ
-champagn
-champain
-champain
-champion
-champion
-chanc
-chanc
-chanc
-chancellor
-chanc
-chandler
-chang
-chang
-changeabl
-chang
-chang
-changel
-changel
-changer
-chang
-changest
-chang
-channel
-channel
-chanson
-chant
-chanticl
-chant
-chantri
-chantri
-chant
-chao
-chap
-chape
-chapel
-chapeless
-chapel
-chaplain
-chaplain
-chapless
-chaplet
-chapmen
-chap
-chapter
-charact
-charact
-characterless
-charact
-characteri
-charact
-charbon
-chare
-chare
-charg
-charg
-charg
-charg
-charg
-chargeth
-charg
-chariest
-chari
-chare
-chariot
-chariot
-charit
-charit
-chariti
-chariti
-charlemain
-charl
-charm
-charm
-charmer
-charmeth
-charmian
-charm
-charmingli
-charm
-charneco
-charnel
-charoloi
-charon
-charter
-charter
-chartreux
-chari
-charybdi
-cha
-chase
-chase
-chaser
-chaseth
-chase
-chast
-chast
-chasti
-chastis
-chastis
-chastis
-chastiti
-chat
-chatham
-chatillon
-chat
-chatt
-chattel
-chatter
-chatter
-chattl
-chaud
-chaunt
-chaw
-chawdron
-che
-cheap
-cheapen
-cheaper
-cheapest
-cheapli
-cheapsid
-cheat
-cheat
-cheater
-cheater
-cheat
-cheat
-check
-check
-checker
-check
-check
-cheek
-cheek
-cheer
-cheer
-cheerer
-cheer
-cheerfulli
-cheer
-cheerless
-cheerli
-cheer
-chees
-chequer
-cher
-cherish
-cherish
-cherish
-cherish
-cherish
-cherri
-cherri
-cherrypit
-chertsei
-cherub
-cherubim
-cherubin
-cherubin
-cheshu
-chess
-chest
-chester
-chestnut
-chestnut
-chest
-cheta
-chev
-cheval
-chevali
-chevali
-cheveril
-chew
-chew
-chewet
-chew
-chez
-chi
-chick
-chicken
-chicken
-chicurmurco
-chid
-chidden
-chide
-chider
-chide
-chide
-chief
-chiefest
-chiefli
-chien
-child
-child
-childer
-childhood
-childhood
-child
-childish
-childish
-childlik
-child
-children
-chill
-chill
-chime
-chime
-chimnei
-chimneypiec
-chimnei
-chimurcho
-chin
-china
-chine
-chine
-chink
-chink
-chin
-chipp
-chipper
-chip
-chiron
-chirp
-chirrah
-chirurgeonli
-chisel
-chitoph
-chivalr
-chivalri
-choic
-choic
-choicest
-choir
-choir
-chok
-choke
-choke
-choke
-choke
-choler
-choler
-choler
-chollor
-choos
-chooser
-choos
-chooseth
-choos
-chop
-chopin
-choplog
-chopp
-chop
-chop
-choppi
-chop
-chopt
-chor
-chorist
-choru
-chose
-chosen
-chough
-chough
-chrish
-christ
-christen
-christendom
-christendom
-christen
-christen
-christian
-christianlik
-christian
-christma
-christom
-christoph
-christophero
-chronicl
-chronicl
-chronicl
-chronicl
-chronicl
-chrysolit
-chuck
-chuck
-chud
-chuff
-church
-church
-churchman
-churchmen
-churchyard
-churchyard
-churl
-churlish
-churlishli
-churl
-churn
-chu
-cicatric
-cicatric
-cice
-cicero
-cicet
-ciel
-ciitzen
-cilicia
-cimber
-cimmerian
-cinabl
-cinctur
-cinder
-cine
-cinna
-cinqu
-cipher
-cipher
-circa
-circ
-circl
-circl
-circlet
-circl
-circuit
-circum
-circumcis
-circumfer
-circummur
-circumscrib
-circumscrib
-circumscript
-circumspect
-circumst
-circumstanc
-circumst
-circumstanti
-circumv
-circumvent
-cistern
-citadel
-cital
-cite
-cite
-cite
-citi
-cite
-citizen
-citizen
-cittern
-citi
-civet
-civil
-civil
-civilli
-clack
-clad
-claim
-claim
-claim
-clamb
-clamber
-clammer
-clamor
-clamor
-clamor
-clamour
-clamour
-clang
-clangor
-clap
-clapp
-clap
-clapper
-clap
-clap
-clare
-clarenc
-claret
-claribel
-clasp
-clasp
-clatter
-claud
-claudio
-claudiu
-claus
-claw
-claw
-claw
-claw
-clai
-clai
-clean
-cleanliest
-cleanli
-clean
-cleans
-cleans
-clear
-clearer
-clearest
-clearli
-clear
-clear
-cleav
-cleav
-clef
-cleft
-cleitu
-clemenc
-clement
-cleomen
-cleopatpa
-cleopatra
-clepeth
-clept
-clerestori
-clergi
-clergyman
-clergymen
-clerk
-clerkli
-clerk
-clew
-client
-client
-cliff
-clifford
-clifford
-cliff
-clifton
-climat
-climatur
-climb
-climb
-climber
-climbeth
-climb
-climb
-clime
-cling
-clink
-clink
-clinquant
-clip
-clipp
-clipper
-clippeth
-clip
-clipt
-clitu
-clo
-cloak
-cloakbag
-cloak
-clock
-clock
-clod
-cloddi
-clodpol
-clog
-clog
-clog
-cloister
-cloistress
-cloquenc
-clo
-close
-close
-close
-close
-closer
-close
-closest
-closet
-close
-closur
-cloten
-cloten
-cloth
-clothair
-clothariu
-cloth
-cloth
-clothier
-clothier
-cloth
-cloth
-clotpol
-clotpol
-cloud
-cloud
-cloudi
-cloud
-cloudi
-clout
-clout
-clout
-cloven
-clover
-clove
-clovest
-clowder
-clown
-clownish
-clown
-cloi
-cloi
-cloi
-cloyless
-cloyment
-cloi
-club
-club
-cluck
-clung
-clust
-cluster
-clutch
-clyster
-cneiu
-cnemi
-co
-coach
-coach
-coachmak
-coact
-coactiv
-coagul
-coal
-coal
-coars
-coars
-coast
-coast
-coast
-coat
-coat
-coat
-cobbl
-cobbl
-cobbler
-cobham
-cobloaf
-cobweb
-cobweb
-cock
-cockatric
-cockatric
-cockl
-cockl
-cocknei
-cockpit
-cock
-cocksur
-coctu
-cocytu
-cod
-cod
-codl
-codpiec
-codpiec
-cod
-coelestibu
-coesar
-coeur
-coffer
-coffer
-coffin
-coffin
-cog
-cog
-cogit
-cogit
-cognit
-cogniz
-cogscomb
-cohabit
-coher
-coher
-coher
-coher
-cohort
-coif
-coign
-coil
-coin
-coinag
-coiner
-coin
-coin
-col
-colbrand
-colcho
-cold
-colder
-coldest
-coldli
-cold
-coldspur
-colebrook
-colic
-collar
-collar
-collater
-colleagu
-collect
-collect
-collect
-colleg
-colleg
-colli
-collier
-collier
-collop
-collus
-colm
-colmekil
-coloquintida
-color
-color
-colossu
-colour
-colour
-colour
-colour
-colour
-colt
-colt
-colt
-columbin
-columbin
-colvil
-com
-comagen
-comart
-comb
-combat
-combat
-combat
-combat
-combat
-combin
-combin
-combin
-combin
-combin
-combless
-combust
-come
-comedian
-comedian
-comedi
-comeli
-come
-comer
-comer
-come
-comest
-comet
-cometh
-comet
-comfect
-comfit
-comfit
-comfort
-comfort
-comfort
-comfort
-comfort
-comfortless
-comfort
-comic
-comic
-come
-come
-cominiu
-comma
-command
-command
-command
-command
-command
-command
-command
-command
-command
-comm
-commenc
-commenc
-commenc
-commenc
-commenc
-commenc
-commend
-commend
-commend
-commend
-commend
-commend
-commend
-comment
-commentari
-comment
-comment
-commerc
-commingl
-commiser
-commiss
-commission
-commiss
-commit
-commit
-committ
-commit
-commit
-commix
-commix
-commixt
-commixtur
-commodi
-commod
-commod
-common
-commonalti
-common
-common
-commonli
-common
-commonw
-commonwealth
-commot
-commot
-commun
-communicat
-commun
-commun
-commun
-commun
-comonti
-compact
-compani
-companion
-companion
-companionship
-compani
-compar
-compar
-compar
-compar
-compar
-comparison
-comparison
-compartn
-compass
-compass
-compass
-compass
-compassion
-compeer
-compel
-compel
-compel
-compel
-compel
-compens
-compet
-compet
-compet
-competitor
-competitor
-compil
-compil
-compil
-complain
-complain
-complainest
-complain
-complain
-complain
-complaint
-complaint
-complement
-complement
-complet
-complexion
-complexion
-complexion
-complic
-compli
-compliment
-compliment
-compliment
-complot
-complot
-complot
-compli
-compo
-compos
-compos
-composit
-compost
-compostur
-composur
-compound
-compound
-compound
-comprehend
-comprehend
-comprehend
-compremis
-compri
-compris
-compromi
-compromis
-compt
-comptibl
-comptrol
-compulsatori
-compuls
-compuls
-compuncti
-comput
-comrad
-comrad
-comutu
-con
-concav
-concav
-conceal
-conceal
-conceal
-conceal
-conceal
-conceal
-conceit
-conceit
-conceitless
-conceit
-conceiv
-conceiv
-conceiv
-conceiv
-conceiv
-concept
-concept
-concepti
-concern
-concern
-concerneth
-concern
-concern
-concern
-conclav
-conclud
-conclud
-conclud
-conclud
-conclud
-conclus
-conclus
-concolinel
-concord
-concubin
-concupisc
-concupi
-concur
-concur
-concur
-condemn
-condemn
-condemn
-condemn
-condemn
-condescend
-condign
-condit
-condition
-condit
-condol
-condol
-condol
-conduc
-conduct
-conduct
-conduct
-conductor
-conduit
-conduit
-conect
-conei
-confect
-confectionari
-confect
-confederaci
-confeder
-confeder
-confer
-confer
-conferr
-confer
-confess
-confess
-confess
-confesseth
-confess
-confess
-confess
-confessor
-confid
-confid
-confid
-confin
-confin
-confin
-confineless
-confin
-confin
-confin
-confirm
-confirm
-confirm
-confirm
-confirm
-confirm
-confirm
-confirm
-confirm
-confisc
-confisc
-confisc
-confix
-conflict
-conflict
-conflict
-confluenc
-conflux
-conform
-conform
-confound
-confound
-confound
-confound
-confront
-confront
-confu
-confus
-confusedli
-confus
-confus
-confut
-confut
-congeal
-congeal
-congeal
-conge
-conger
-congest
-congi
-congratul
-congre
-congreet
-congreg
-congreg
-congreg
-congreg
-congruent
-congru
-coni
-conjectur
-conjectur
-conjectur
-conjoin
-conjoin
-conjoin
-conjointli
-conjunct
-conjunct
-conjunct
-conjur
-conjur
-conjur
-conjur
-conjur
-conjur
-conjur
-conjur
-conjur
-conjuro
-conn
-connect
-conniv
-conqu
-conquer
-conquer
-conquer
-conqueror
-conqueror
-conquer
-conquest
-conquest
-conqur
-conrad
-con
-consanguin
-consanguin
-conscienc
-conscienc
-conscienc
-conscion
-consecr
-consecr
-consecr
-consent
-consent
-consent
-consent
-consequ
-consequ
-consequ
-conserv
-conserv
-conserv
-consid
-consider
-consider
-consider
-consider
-consid
-consid
-consid
-consid
-consign
-consign
-consist
-consisteth
-consist
-consistori
-consist
-consol
-consol
-conson
-conson
-consort
-consort
-consortest
-conspectu
-conspir
-conspiraci
-conspir
-conspir
-conspir
-conspir
-conspir
-conspir
-conspir
-conspir
-constabl
-constabl
-constanc
-constanc
-constanc
-constant
-constantin
-constantinopl
-constantli
-constel
-constitut
-constrain
-constrain
-constraineth
-constrain
-constraint
-constr
-construct
-constru
-consul
-consul
-consulship
-consulship
-consult
-consult
-consult
-consum
-consum
-consum
-consum
-consum
-consumm
-consumm
-consumpt
-consumpt
-contagion
-contagi
-contain
-contain
-contain
-contamin
-contamin
-contemn
-contemn
-contemn
-contemn
-contempl
-contempl
-contempl
-contempt
-contempt
-contempt
-contemptu
-contemptu
-contend
-contend
-contend
-contendon
-content
-contenta
-content
-contenteth
-content
-contenti
-contentless
-contento
-content
-contest
-contest
-contin
-contin
-contin
-contin
-continu
-continu
-continu
-continu
-continuantli
-continu
-continu
-continu
-continu
-continu
-continu
-contract
-contract
-contract
-contract
-contradict
-contradict
-contradict
-contradict
-contrari
-contrarieti
-contrarieti
-contrari
-contrari
-contrari
-contr
-contribut
-contributor
-contrit
-contriv
-contriv
-contriv
-contriv
-contriv
-contriv
-control
-control
-control
-control
-control
-control
-controversi
-contumeli
-contumeli
-contum
-contus
-conveni
-conveni
-conveni
-conveni
-conveni
-convent
-conventicl
-convent
-conver
-convers
-convers
-convers
-convers
-convers
-convers
-convers
-convers
-convert
-convert
-convertest
-convert
-convertit
-convertit
-convert
-convei
-convey
-convey
-convey
-convei
-convict
-convict
-convinc
-convinc
-convinc
-conviv
-convoc
-convoi
-convuls
-coni
-cook
-cookeri
-cook
-cool
-cool
-cool
-cool
-coop
-coop
-cop
-copatain
-cope
-cophetua
-copi
-copi
-copiou
-copper
-copperspur
-coppic
-copul
-copul
-copi
-cor
-coragio
-coral
-coram
-corambu
-coranto
-coranto
-corbo
-cord
-cord
-cordelia
-cordial
-cordi
-cord
-core
-corin
-corinth
-corinthian
-coriolanu
-corioli
-cork
-corki
-cormor
-corn
-cornelia
-corneliu
-corner
-corner
-cornerston
-cornet
-cornish
-corn
-cornuto
-cornwal
-corollari
-coron
-coron
-coronet
-coronet
-corpor
-corpor
-corpor
-corps
-corpul
-correct
-correct
-correct
-correct
-correction
-correct
-correspond
-correspond
-correspond
-correspons
-corrig
-corriv
-corriv
-corrobor
-corros
-corrupt
-corrupt
-corrupt
-corrupt
-corrupt
-corrupt
-corrupt
-corrupt
-corruptli
-corrupt
-cors
-cors
-corslet
-cosmo
-cost
-costard
-costermong
-costlier
-costli
-cost
-cot
-cote
-cote
-cotsal
-cotsol
-cotswold
-cottag
-cottag
-cotu
-couch
-couch
-couch
-couch
-coud
-cough
-cough
-could
-couldst
-coulter
-council
-councillor
-council
-counsel
-counsel
-counsellor
-counsellor
-counselor
-counselor
-counsel
-count
-count
-countenanc
-counten
-counten
-counter
-counterchang
-countercheck
-counterfeit
-counterfeit
-counterfeit
-counterfeitli
-counterfeit
-countermand
-countermand
-countermin
-counterpart
-counterpoint
-counterpoi
-counterpois
-counter
-countervail
-countess
-countess
-counti
-count
-countless
-countri
-countrv
-countri
-countryman
-countrymen
-count
-counti
-couper
-coupl
-coupl
-couplement
-coupl
-couplet
-couplet
-cour
-courag
-courag
-courag
-courag
-courier
-courier
-couronn
-cour
-cours
-cours
-courser
-courser
-cours
-cours
-court
-court
-courteou
-courteous
-courtesan
-courtesi
-courtesi
-courtezan
-courtezan
-courtier
-courtier
-courtlik
-courtli
-courtnei
-court
-courtship
-cousin
-cousin
-couterfeit
-coutum
-coven
-coven
-covent
-coventri
-cover
-cover
-cover
-coverlet
-cover
-covert
-covertli
-covertur
-covet
-covet
-covet
-covet
-covet
-covet
-covet
-covet
-cow
-coward
-coward
-cowardic
-cowardli
-coward
-cowardship
-cowish
-cowl
-cowslip
-cowslip
-cox
-coxcomb
-coxcomb
-coi
-coystril
-coz
-cozen
-cozenag
-cozen
-cozen
-cozen
-cozen
-cozier
-crab
-crab
-crab
-crack
-crack
-cracker
-cracker
-crack
-crack
-cradl
-cradl
-cradl
-craft
-craft
-crafti
-craftier
-craftili
-craft
-craftsmen
-crafti
-cram
-cramm
-cramp
-cramp
-cram
-crank
-crank
-cranmer
-cranni
-cranni
-cranni
-crant
-crare
-crash
-crassu
-crav
-crave
-crave
-craven
-craven
-crave
-craveth
-crave
-crawl
-crawl
-crawl
-craz
-craze
-crazi
-creak
-cream
-creat
-creat
-creat
-creat
-creation
-creator
-creatur
-creatur
-credenc
-credent
-credibl
-credit
-creditor
-creditor
-credo
-credul
-credul
-creed
-creek
-creek
-creep
-creep
-creep
-crept
-crescent
-cresciv
-cresset
-cressid
-cressida
-cressid
-cressi
-crest
-crest
-crestfal
-crestless
-crest
-cretan
-crete
-crevic
-crew
-crew
-crib
-cribb
-crib
-cricket
-cricket
-cri
-criedst
-crier
-cri
-criest
-crieth
-crime
-crime
-crimeless
-crime
-crimin
-crimson
-cring
-crippl
-crisp
-crisp
-crispian
-crispianu
-crispin
-critic
-critic
-critic
-croak
-croak
-croak
-crocodil
-cromer
-cromwel
-crone
-crook
-crookback
-crook
-crook
-crop
-cropp
-crosbi
-cross
-cross
-cross
-crossest
-cross
-cross
-crossli
-cross
-crost
-crotchet
-crouch
-crouch
-crow
-crowd
-crowd
-crowd
-crowd
-crowflow
-crow
-crowkeep
-crown
-crown
-crowner
-crownet
-crownet
-crown
-crown
-crow
-crudi
-cruel
-cruell
-crueller
-cruelli
-cruel
-cruelti
-crum
-crumbl
-crumb
-crupper
-crusado
-crush
-crush
-crushest
-crush
-crust
-crust
-crusti
-crutch
-crutch
-cry
-cry
-crystal
-crystallin
-crystal
-cub
-cubbert
-cubiculo
-cubit
-cub
-cuckold
-cuckoldli
-cuckold
-cuckoo
-cucullu
-cudgel
-cudgel
-cudgel
-cudgel
-cudgel
-cue
-cue
-cuff
-cuff
-cuiqu
-cull
-cull
-cullion
-cullionli
-cullion
-culpabl
-culverin
-cum
-cumber
-cumberland
-cun
-cunningli
-cun
-cuor
-cup
-cupbear
-cupboard
-cupid
-cupid
-cuppel
-cup
-cur
-curan
-curat
-curb
-curb
-curb
-curb
-curd
-curdi
-curd
-cure
-cure
-cureless
-curer
-cure
-curfew
-cure
-curio
-curios
-curiou
-curious
-curl
-curl
-curl
-curl
-curranc
-currant
-current
-current
-currish
-curri
-cur
-curs
-curs
-curs
-cursi
-curs
-cursorari
-curst
-curster
-curstest
-curst
-cursi
-curtail
-curtain
-curtain
-curtal
-curti
-curtl
-curtsi
-curtsi
-curtsi
-curvet
-curvet
-cush
-cushion
-cushion
-custalorum
-custard
-custodi
-custom
-customari
-custom
-custom
-custom
-custom
-custur
-cut
-cutler
-cutpurs
-cutpurs
-cut
-cutter
-cut
-cuttl
-cxsar
-cyclop
-cydnu
-cygnet
-cygnet
-cym
-cymbal
-cymbelin
-cyme
-cynic
-cynthia
-cypress
-cypriot
-cypru
-cyru
-cytherea
-d
-dabbl
-dace
-dad
-daedalu
-daemon
-daff
-daf
-daffest
-daffodil
-dagger
-dagger
-dagonet
-daili
-daintier
-dainti
-daintiest
-daintili
-dainti
-daintri
-dainti
-daisi
-daisi
-daisi
-dale
-dallianc
-dalli
-dalli
-dalli
-dalli
-dalmatian
-dam
-damag
-damascu
-damask
-damask
-dame
-dame
-damm
-damn
-damnabl
-damnabl
-damnat
-damn
-damn
-damoisel
-damon
-damosella
-damp
-dam
-damsel
-damson
-dan
-danc
-danc
-dancer
-danc
-danc
-dandl
-dandi
-dane
-dang
-danger
-danger
-danger
-danger
-dangl
-daniel
-danish
-dank
-dankish
-dansker
-daphn
-dappl
-dappl
-dar
-dardan
-dardanian
-dardaniu
-dare
-dare
-dare
-dare
-darest
-dare
-dariu
-dark
-darken
-darken
-darken
-darker
-darkest
-darkl
-darkli
-dark
-darl
-darl
-darnel
-darraign
-dart
-dart
-darter
-dartford
-dart
-dart
-dash
-dash
-dash
-dastard
-dastard
-dat
-datchet
-date
-date
-dateless
-date
-daub
-daughter
-daughter
-daunt
-daunt
-dauntless
-dauphin
-daventri
-davi
-daw
-dawn
-dawn
-daw
-dai
-daylight
-dai
-dazzl
-dazzl
-dazzl
-de
-dead
-deadli
-deaf
-deaf
-deaf
-deaf
-deal
-dealer
-dealer
-dealest
-deal
-deal
-deal
-dealt
-dean
-deaneri
-dear
-dearer
-dearest
-dearli
-dear
-dear
-dearth
-dearth
-death
-deathb
-death
-death
-deathsman
-deathsmen
-debar
-debas
-debat
-debat
-debat
-debateth
-debat
-debauch
-debil
-debil
-debitor
-debonair
-deborah
-debosh
-debt
-debt
-debtor
-debtor
-debt
-debuti
-decai
-decai
-decay
-decai
-decai
-decea
-deceas
-deceas
-deceit
-deceit
-deceit
-deceiv
-deceiv
-deceiv
-deceiv
-deceiv
-deceiv
-deceiv
-deceivest
-deceiveth
-deceiv
-decemb
-decent
-decepti
-decern
-decid
-decid
-decim
-deciph
-deciph
-decis
-deciu
-deck
-deck
-deck
-deckt
-declar
-declar
-declens
-declens
-declin
-declin
-declin
-declin
-declin
-decoct
-decorum
-decrea
-decreas
-decreas
-decre
-decre
-decre
-decrepit
-dedic
-dedic
-dedic
-dedic
-deed
-deedless
-deed
-deem
-deem
-deep
-deeper
-deepest
-deepli
-deep
-deepvow
-deer
-deess
-defac
-defac
-defac
-defac
-defac
-defac
-defam
-default
-defeat
-defeat
-defeat
-defeatur
-defect
-defect
-defect
-defenc
-defenc
-defend
-defend
-defend
-defend
-defend
-defend
-defend
-defens
-defens
-defens
-defer
-deferr
-defianc
-defici
-defi
-defi
-defil
-defil
-defil
-defil
-defil
-defin
-defin
-definit
-definit
-definit
-deflow
-deflow
-deflow
-deform
-deform
-deform
-deform
-deftli
-defunct
-defunct
-defus
-defi
-defi
-degener
-degrad
-degre
-degre
-deifi
-deifi
-deign
-deign
-deiphobu
-deiti
-deiti
-deja
-deject
-deject
-delabreth
-delai
-delai
-delai
-delai
-delect
-deliber
-delic
-delic
-delici
-delici
-delight
-delight
-delight
-delight
-delinqu
-deliv
-deliv
-deliver
-deliv
-deliv
-deliv
-deliveri
-delpho
-delud
-delud
-delug
-delv
-delver
-delv
-demand
-demand
-demand
-demand
-demean
-demeanor
-demeanour
-demerit
-demesn
-demetriu
-demi
-demigod
-demis
-demoisel
-demon
-demonstr
-demonstr
-demonstr
-demonstr
-demonstr
-demonstr
-demur
-demur
-demur
-den
-denai
-deni
-denial
-denial
-deni
-denier
-deni
-deniest
-deni
-denmark
-denni
-denni
-denot
-denot
-denot
-denounc
-denounc
-denounc
-den
-denunci
-deni
-deni
-deo
-depart
-depart
-departest
-depart
-departur
-depech
-depend
-depend
-depend
-depend
-depend
-depend
-depend
-depend
-depend
-depend
-depend
-depend
-deplor
-deplor
-depopul
-depo
-depos
-depos
-depos
-depositari
-deprav
-deprav
-deprav
-deprav
-deprav
-depress
-depriv
-depriv
-depth
-depth
-deput
-deput
-deput
-deputi
-deput
-deputi
-deracin
-derbi
-derceta
-dere
-derid
-deris
-deriv
-deriv
-deriv
-deriv
-deriv
-deriv
-derog
-derog
-derog
-de
-desartless
-descant
-descend
-descend
-descend
-descend
-descens
-descent
-descent
-describ
-describ
-describ
-descri
-descript
-descript
-descri
-desdemon
-desdemona
-desert
-desert
-deserv
-deserv
-deserv
-deservedli
-deserv
-deserv
-deserv
-deservest
-deserv
-deserv
-design
-design
-design
-design
-desir
-desir
-desir
-desir
-desir
-desirest
-desir
-desir
-desist
-desk
-desol
-desol
-desp
-despair
-despair
-despair
-despatch
-desper
-desper
-desper
-despi
-despis
-despis
-despis
-despiseth
-despis
-despit
-despit
-despoil
-dest
-destin
-destin
-destini
-destini
-destitut
-destroi
-destroi
-destroy
-destroy
-destroi
-destroi
-destruct
-destruct
-det
-detain
-detain
-detect
-detect
-detect
-detect
-detector
-detect
-detent
-determin
-determin
-determin
-determin
-determin
-determin
-determin
-detest
-detest
-detest
-detest
-detest
-detract
-detract
-detract
-deucalion
-deuc
-deum
-deux
-devant
-devest
-devic
-devic
-devil
-devilish
-devil
-devi
-devis
-devis
-devis
-devis
-devoid
-devonshir
-devot
-devot
-devot
-devour
-devour
-devour
-devour
-devour
-devout
-devoutli
-dew
-dewberri
-dewdrop
-dewlap
-dewlapp
-dew
-dewi
-dexter
-dexteri
-dexter
-di
-diabl
-diablo
-diadem
-dial
-dialect
-dialogu
-dialogu
-dial
-diamet
-diamond
-diamond
-dian
-diana
-diaper
-dibbl
-dic
-dice
-dicer
-dich
-dick
-dicken
-dickon
-dicki
-dictat
-diction
-dictynna
-did
-diddl
-didest
-dido
-didst
-die
-di
-diedst
-di
-diest
-diet
-diet
-dieter
-dieu
-diff
-differ
-differ
-differ
-differ
-differ
-differ
-differ
-difficil
-difficult
-difficulti
-difficulti
-diffid
-diffid
-diffu
-diffus
-diffusest
-dig
-digest
-digest
-digest
-digest
-digg
-dig
-dighton
-dignifi
-dignifi
-dignifi
-digniti
-digniti
-digress
-digress
-digress
-dig
-digt
-dilat
-dilat
-dilat
-dilatori
-dild
-dildo
-dilemma
-dilemma
-dilig
-dilig
-diluculo
-dim
-dimens
-dimens
-diminish
-diminish
-diminut
-diminut
-diminut
-dimm
-dim
-dim
-dimpl
-dimpl
-dim
-din
-dine
-dine
-diner
-dine
-ding
-dine
-dinner
-dinner
-dinnertim
-dint
-diom
-diomed
-diomed
-dion
-dip
-dipp
-dip
-dip
-dir
-dire
-direct
-direct
-direct
-direct
-direct
-directitud
-direct
-directli
-direct
-dire
-dire
-direst
-dirg
-dirg
-dirt
-dirti
-di
-disabl
-disabl
-disabl
-disabl
-disadvantag
-disagre
-disallow
-disanim
-disannul
-disannul
-disappoint
-disarm
-disarm
-disarmeth
-disarm
-disast
-disast
-disastr
-disbench
-disbranch
-disburden
-disbur
-disburs
-disburs
-discandi
-discandi
-discard
-discard
-discas
-discas
-discern
-discern
-discern
-discern
-discern
-discharg
-discharg
-discharg
-discharg
-discipl
-discipl
-disciplin
-disciplin
-disciplin
-disciplin
-disclaim
-disclaim
-disclaim
-disclo
-disclos
-disclos
-disclos
-discolour
-discolour
-discolour
-discomfit
-discomfit
-discomfitur
-discomfort
-discomfort
-discommend
-disconsol
-discont
-discont
-discontentedli
-discont
-discont
-discontinu
-discontinu
-discord
-discord
-discord
-discours
-discours
-discours
-discours
-discours
-discourtesi
-discov
-discov
-discov
-discover
-discoveri
-discov
-discov
-discoveri
-discredit
-discredit
-discredit
-discreet
-discreetli
-discret
-discret
-discuss
-disdain
-disdain
-disdaineth
-disdain
-disdainfulli
-disdain
-disdain
-disdnguish
-disea
-diseas
-diseas
-diseas
-disedg
-disembark
-disfigur
-disfigur
-disfurnish
-disgorg
-disgrac
-disgrac
-disgrac
-disgrac
-disgrac
-disgrac
-disgraci
-disgui
-disguis
-disguis
-disguis
-disguis
-disguis
-dish
-dishabit
-dishclout
-dishearten
-dishearten
-dish
-dishonest
-dishonestli
-dishonesti
-dishonor
-dishonor
-dishonor
-dishonour
-dishonour
-dishonour
-dishonour
-disinherit
-disinherit
-disjoin
-disjoin
-disjoin
-disjoint
-disjunct
-dislik
-dislik
-disliken
-dislik
-dislimn
-disloc
-dislodg
-disloy
-disloyalti
-dismal
-dismantl
-dismantl
-dismask
-dismai
-dismai
-dismemb
-dismemb
-dism
-dismiss
-dismiss
-dismiss
-dismiss
-dismount
-dismount
-disnatur
-disobedi
-disobedi
-disobei
-disobei
-disorb
-disord
-disord
-disorderli
-disord
-disparag
-disparag
-disparag
-dispark
-dispatch
-dispens
-dispens
-dispens
-disper
-dispers
-dispers
-dispersedli
-dispers
-dispit
-displac
-displac
-displac
-displant
-displant
-displai
-displai
-displea
-displeas
-displeas
-displeas
-displeasur
-displeasur
-dispong
-disport
-disport
-dispo
-dispos
-dispos
-dispos
-dispos
-disposit
-disposit
-dispossess
-dispossess
-disprai
-disprais
-disprais
-dispraisingli
-disproperti
-disproport
-disproport
-disprov
-disprov
-disprov
-dispurs
-disput
-disput
-disput
-disput
-disput
-disput
-disput
-disquant
-disquiet
-disquietli
-disrelish
-disrob
-disseat
-dissembl
-dissembl
-dissembl
-dissembl
-dissembl
-dissembl
-dissens
-dissens
-dissenti
-dissev
-dissip
-dissolut
-dissolut
-dissolut
-dissolut
-dissolv
-dissolv
-dissolv
-dissolv
-dissuad
-dissuad
-distaff
-distaff
-distain
-distain
-distanc
-distant
-distast
-distast
-distast
-distemp
-distemp
-distemperatur
-distemperatur
-distemp
-distemp
-distil
-distil
-distil
-distil
-distil
-distil
-distinct
-distinct
-distinctli
-distingu
-distinguish
-distinguish
-distinguish
-distract
-distract
-distractedli
-distract
-distract
-distract
-distrain
-distraught
-distress
-distress
-distress
-distress
-distribut
-distribut
-distribut
-distrust
-distrust
-disturb
-disturb
-disturb
-disturb
-disunit
-disvalu
-disvouch
-dit
-ditch
-ditcher
-ditch
-dite
-ditti
-ditti
-diurnal
-div
-dive
-diver
-diver
-divers
-divers
-divert
-divert
-divert
-dive
-divest
-divid
-divid
-divid
-divid
-divid
-divideth
-divin
-divin
-divin
-divin
-divin
-divin
-divin
-divinest
-divin
-divin
-divis
-divis
-divorc
-divorc
-divorc
-divorc
-divorc
-divulg
-divulg
-divulg
-divulg
-dizi
-dizzi
-do
-doat
-dobbin
-dock
-dock
-doct
-doctor
-doctor
-doctrin
-document
-dodg
-doe
-doer
-doer
-doe
-doest
-doff
-dog
-dogberri
-dogfish
-dogg
-dog
-dog
-doigt
-do
-do
-doit
-doit
-dolabella
-dole
-dole
-doll
-dollar
-dollar
-dolor
-dolor
-dolour
-dolour
-dolphin
-dolt
-dolt
-domest
-domest
-domin
-domin
-domin
-domin
-domin
-domin
-domin
-dominion
-dominion
-domitiu
-dommelton
-don
-donalbain
-donat
-donc
-doncast
-done
-dong
-donn
-donn
-donner
-donnerai
-doom
-doomsdai
-door
-doorkeep
-door
-dorca
-doreu
-doricl
-dormous
-dorothi
-dorset
-dorsetshir
-dost
-dotag
-dotant
-dotard
-dotard
-dote
-dote
-doter
-dote
-doteth
-doth
-dote
-doubl
-doubl
-doubl
-doubler
-doublet
-doublet
-doubl
-doubli
-doubt
-doubt
-doubt
-doubtfulli
-doubt
-doubtless
-doubt
-doug
-dough
-doughti
-doughi
-dougla
-dout
-dout
-dout
-dove
-dovehous
-dover
-dove
-dow
-dowag
-dowdi
-dower
-dowerless
-dower
-dowla
-dowl
-down
-downfal
-downright
-down
-downstair
-downtrod
-downward
-downward
-downi
-dowri
-dowri
-dowsabel
-doxi
-doze
-dozen
-dozen
-dozi
-drab
-drab
-drab
-drachma
-drachma
-draff
-drag
-dragg
-drag
-drag
-dragon
-dragonish
-dragon
-drain
-drain
-drain
-drake
-dram
-dramati
-drank
-draught
-draught
-drave
-draw
-drawbridg
-drawer
-drawer
-draweth
-draw
-drawl
-drawn
-draw
-drayman
-draymen
-dread
-dread
-dread
-dreadfulli
-dread
-dread
-dream
-dreamer
-dreamer
-dream
-dream
-dreamt
-drearn
-dreari
-dreg
-dreg
-drench
-drench
-dress
-dress
-dresser
-dress
-dress
-drest
-drew
-dribbl
-dri
-drier
-dri
-drift
-drili
-drink
-drinketh
-drink
-drink
-drink
-driv
-drive
-drivel
-driven
-drive
-driveth
-drive
-drizzl
-drizzl
-drizzl
-droit
-drolleri
-dromio
-dromio
-drone
-drone
-droop
-droopeth
-droop
-droop
-drop
-dropheir
-droplet
-dropp
-dropper
-droppeth
-drop
-drop
-drop
-dropsi
-dropsi
-dropsi
-dropt
-dross
-drossi
-drought
-drove
-droven
-drovier
-drown
-drown
-drown
-drown
-drow
-drows
-drowsili
-drowsi
-drowsi
-drudg
-drudgeri
-drudg
-drug
-drugg
-drug
-drum
-drumbl
-drummer
-drum
-drum
-drunk
-drunkard
-drunkard
-drunken
-drunkenli
-drunken
-dry
-dryness
-dst
-du
-dub
-dubb
-ducat
-ducat
-ducdam
-duchess
-duchi
-duchi
-duck
-duck
-duck
-dudgeon
-due
-duellist
-duello
-duer
-due
-duff
-dug
-dug
-duke
-dukedom
-dukedom
-duke
-dulcet
-dulch
-dull
-dullard
-duller
-dullest
-dull
-dull
-dull
-dulli
-dul
-duli
-dumain
-dumb
-dumb
-dumbl
-dumb
-dump
-dump
-dun
-duncan
-dung
-dungeon
-dungeon
-dunghil
-dunghil
-dungi
-dunnest
-dunsinan
-dunsmor
-dunstabl
-dupp
-duranc
-dure
-durst
-duski
-dust
-dust
-dusti
-dutch
-dutchman
-duteou
-duti
-duti
-duti
-dwarf
-dwarfish
-dwell
-dweller
-dwell
-dwell
-dwelt
-dwindl
-dy
-dye
-dy
-dyer
-dy
-e
-each
-eager
-eagerli
-eager
-eagl
-eagl
-ean
-eanl
-ear
-ear
-earl
-earldom
-earlier
-earliest
-earli
-earl
-earli
-earn
-earn
-earnest
-earnestli
-earnest
-earn
-ear
-earth
-earthen
-earthlier
-earthli
-earthquak
-earthquak
-earthi
-ea
-eas
-eas
-eas
-eas
-easier
-easiest
-easiliest
-easili
-easi
-eas
-east
-eastcheap
-easter
-eastern
-eastward
-easi
-eat
-eaten
-eater
-eater
-eat
-eat
-eaux
-eav
-ebb
-eb
-ebb
-ebon
-eboni
-ebrew
-ecc
-echapp
-echo
-echo
-eclip
-eclips
-eclips
-ecoli
-ecoutez
-ecstaci
-ecstasi
-ecstasi
-ecu
-eden
-edg
-edgar
-edg
-edg
-edgeless
-edg
-edict
-edict
-edific
-edific
-edifi
-edifi
-edit
-edm
-edmund
-edmund
-edmundsburi
-educ
-educ
-educ
-edward
-eel
-eel
-effect
-effect
-effectless
-effect
-effectu
-effectu
-effemin
-effigi
-effu
-effus
-effus
-eftest
-egal
-egal
-eget
-egeu
-egg
-egg
-eggshel
-eglamour
-eglantin
-egma
-ego
-egregi
-egregi
-egress
-egypt
-egyptian
-egyptian
-eie
-eight
-eighteen
-eighth
-eightpenni
-eighti
-eisel
-either
-eject
-ek
-el
-elb
-elbow
-elbow
-eld
-elder
-elder
-eldest
-eleanor
-elect
-elect
-elect
-eleg
-elegi
-element
-element
-eleph
-eleph
-elev
-eleven
-eleventh
-elf
-elflock
-eliad
-elinor
-elizabeth
-ell
-ell
-ellen
-elm
-eloqu
-eloqu
-els
-elsewher
-elsinor
-eltham
-elv
-elvish
-eli
-elysium
-em
-embal
-embalm
-embalm
-embark
-embark
-embarqu
-embassad
-embassag
-embassi
-embassi
-embattail
-embattl
-embattl
-embai
-embellish
-ember
-emblaz
-emblem
-emblem
-embodi
-embold
-embolden
-emboss
-emboss
-embound
-embowel
-embowel
-embrac
-embrac
-embrac
-embrac
-embrac
-embrac
-embrac
-embrasur
-embroid
-embroideri
-emhrac
-emilia
-emin
-emin
-emin
-emmanuel
-emniti
-empal
-emper
-emperess
-emperi
-emperor
-emperi
-emphasi
-empir
-empir
-empiricut
-empleach
-emploi
-emploi
-employ
-employ
-employ
-empoison
-empress
-empti
-emptier
-empti
-empti
-empti
-empti
-emul
-emul
-emul
-emul
-emul
-en
-enact
-enact
-enact
-enactur
-enamel
-enamel
-enamour
-enamour
-enanmour
-encamp
-encamp
-encav
-enceladu
-enchaf
-enchaf
-enchant
-enchant
-enchant
-enchantingli
-enchant
-enchantress
-enchant
-encha
-encircl
-encircl
-enclo
-enclos
-enclos
-enclos
-encloseth
-enclos
-encloud
-encompass
-encompass
-encompasseth
-encompass
-encor
-encorpor
-encount
-encount
-encount
-encount
-encourag
-encourag
-encourag
-encrimson
-encroach
-encumb
-end
-endamag
-endamag
-endang
-endart
-endear
-endear
-endeavour
-endeavour
-end
-ender
-end
-end
-endit
-endless
-endow
-endow
-endow
-endow
-end
-endu
-endu
-endur
-endur
-endur
-endur
-endur
-endur
-endymion
-enea
-enemi
-enemi
-enerni
-enew
-enfeebl
-enfeebl
-enfeoff
-enfett
-enfold
-enforc
-enforc
-enforc
-enforcedli
-enforc
-enforc
-enforcest
-enfranch
-enfranchi
-enfranchis
-enfranchis
-enfranchis
-enfre
-enfreedom
-engag
-engag
-engag
-engag
-engag
-engaol
-engend
-engend
-engend
-engild
-engin
-engin
-engin
-engin
-engirt
-england
-english
-englishman
-englishmen
-englut
-englut
-engraf
-engraft
-engraft
-engrav
-engrav
-engross
-engross
-engrossest
-engross
-engross
-enguard
-enigma
-enigmat
-enjoin
-enjoin
-enjoi
-enjoi
-enjoy
-enjoi
-enjoi
-enkindl
-enkindl
-enlard
-enlarg
-enlarg
-enlarg
-enlarg
-enlargeth
-enlighten
-enlink
-enmesh
-enmiti
-enmiti
-ennobl
-ennobl
-enobarb
-enobarbu
-enon
-enorm
-enorm
-enough
-enow
-enpatron
-enpierc
-enquir
-enquir
-enquir
-enrag
-enrag
-enrag
-enrag
-enrank
-enrapt
-enrich
-enrich
-enrich
-enridg
-enr
-enrob
-enrob
-enrol
-enrol
-enroot
-enround
-enschedul
-ensconc
-ensconc
-enseam
-ensear
-enseign
-enseignez
-ensembl
-enshelt
-enshield
-enshrin
-ensign
-ensign
-enski
-ensman
-ensnar
-ensnar
-ensnareth
-ensteep
-ensu
-ensu
-ensu
-ensu
-ensu
-enswath
-ent
-entail
-entam
-entangl
-entangl
-entendr
-enter
-enter
-enter
-enterpris
-enterpris
-enter
-entertain
-entertain
-entertain
-entertain
-entertain
-entertain
-enthral
-enthral
-enthron
-enthron
-entic
-entic
-entic
-entir
-entir
-entitl
-entitl
-entitl
-entomb
-entomb
-entrail
-entranc
-entranc
-entrap
-entrapp
-entr
-entreat
-entreat
-entreati
-entreat
-entreat
-entreat
-entreati
-entrench
-entri
-entwist
-envelop
-envenom
-envenom
-envenom
-envi
-envi
-enviou
-envious
-environ
-environ
-envoi
-envi
-envi
-enwheel
-enwomb
-enwrap
-ephesian
-ephesian
-ephesu
-epicur
-epicurean
-epicur
-epicur
-epicuru
-epidamnum
-epidauru
-epigram
-epilepsi
-epilept
-epilogu
-epilogu
-epistl
-epistrophu
-epitaph
-epitaph
-epithet
-epitheton
-epithet
-epitom
-equal
-equal
-equal
-equal
-equal
-equal
-equal
-equinocti
-equinox
-equipag
-equiti
-equivoc
-equivoc
-equivoc
-equivoc
-equivoc
-er
-erbear
-erbear
-erbear
-erbeat
-erblow
-erboard
-erborn
-ercam
-ercast
-ercharg
-ercharg
-ercharg
-ercl
-ercom
-ercov
-ercrow
-erdo
-er
-erebu
-erect
-erect
-erect
-erect
-erect
-erewhil
-erflourish
-erflow
-erflow
-erflow
-erfraught
-erga
-ergal
-erglanc
-ergo
-ergon
-ergrow
-ergrown
-ergrowth
-erhang
-erhang
-erhasti
-erhear
-erheard
-eringo
-erjoi
-erleap
-erleap
-erleaven
-erlook
-erlook
-ermast
-ermengar
-ermount
-ern
-ernight
-ero
-erpaid
-erpart
-erpast
-erpai
-erpeer
-erperch
-erpictur
-erpingham
-erpost
-erpow
-erpress
-erpress
-err
-errand
-errand
-errant
-errat
-erraught
-erreach
-er
-errest
-er
-erron
-error
-error
-err
-errul
-errun
-erset
-ershad
-ershad
-ershin
-ershot
-ersiz
-erskip
-erslip
-erspread
-erst
-erstar
-erstep
-erstunk
-erswai
-erswai
-erswel
-erta
-ertak
-erteem
-erthrow
-erthrown
-erthrow
-ertook
-ertop
-ertop
-ertrip
-erturn
-erudit
-erupt
-erupt
-ervalu
-erwalk
-erwatch
-erween
-erween
-erweigh
-erweigh
-erwhelm
-erwhelm
-erworn
-es
-escalu
-escap
-escap
-escap
-escap
-eschew
-escot
-esil
-especi
-especi
-esper
-espial
-espi
-espi
-espou
-espous
-espi
-esquir
-esquir
-essai
-essai
-essenc
-essenti
-essenti
-ess
-essex
-est
-establish
-establish
-estat
-estat
-esteem
-esteem
-esteemeth
-esteem
-esteem
-estim
-estim
-estim
-estim
-estim
-estrang
-estridg
-estridg
-et
-etc
-etcetera
-et
-etern
-etern
-etern
-etern
-eterniz
-et
-ethiop
-ethiop
-ethiop
-ethiopian
-etna
-eton
-etr
-eunuch
-eunuch
-euphrat
-euphroniu
-euriphil
-europa
-europ
-ev
-evad
-evad
-evan
-evas
-evas
-ev
-even
-even
-evenli
-event
-event
-event
-ever
-everlast
-everlastingli
-evermor
-everi
-everyon
-everyth
-everywher
-evid
-evid
-evid
-evil
-evilli
-evil
-evit
-ew
-ewer
-ewer
-ew
-exact
-exact
-exactest
-exact
-exact
-exact
-exactli
-exact
-exalt
-exalt
-examin
-examin
-examin
-examin
-examin
-examin
-exampl
-exampl
-exampl
-exampl
-exasper
-exasper
-exce
-exceed
-exceedeth
-exceed
-exceedingli
-exce
-excel
-excel
-excel
-excel
-excel
-excel
-excel
-excel
-excel
-except
-except
-except
-except
-except
-exceptless
-excess
-excess
-exchang
-exchang
-exchang
-exchequ
-exchequ
-excit
-excit
-excit
-excit
-exclaim
-exclaim
-exclam
-exclam
-exclud
-excommun
-excommun
-excrement
-excrement
-excurs
-excurs
-excu
-excus
-excus
-excus
-excus
-excusez
-excus
-execr
-execr
-execut
-execut
-execut
-execut
-execution
-execution
-executor
-executor
-exempt
-exempt
-exequi
-exercis
-exercis
-exet
-exeunt
-exhal
-exhal
-exhal
-exhal
-exhal
-exhaust
-exhibit
-exhibit
-exhibit
-exhort
-exhort
-exig
-exil
-exil
-exil
-exion
-exist
-exist
-exit
-exit
-exorcis
-exorc
-exorcist
-expect
-expect
-expect
-expect
-expect
-expect
-expect
-expect
-expect
-expedi
-expedi
-expedi
-expedit
-expediti
-expel
-expel
-expel
-expel
-expend
-expens
-expens
-experienc
-experi
-experi
-experi
-experiment
-experi
-expert
-expert
-expiat
-expiat
-expir
-expir
-expir
-expir
-expir
-expir
-explic
-exploit
-exploit
-expo
-expos
-expos
-exposit
-expositor
-expostul
-expostul
-expostur
-exposur
-expound
-expound
-express
-express
-expresseth
-express
-express
-expressli
-expressur
-expul
-expuls
-exquisit
-exsuffl
-extant
-extempor
-extempor
-extempor
-extend
-extend
-extend
-extent
-extenu
-extenu
-extenu
-extenu
-exterior
-exteriorli
-exterior
-extermin
-extern
-extern
-extinct
-extinct
-extinctur
-extinguish
-extirp
-extirp
-extirp
-extol
-extol
-extol
-exton
-extort
-extort
-extort
-extort
-extra
-extract
-extract
-extract
-extraordinarili
-extraordinari
-extraught
-extravag
-extravag
-extrem
-extrem
-extrem
-extremest
-extrem
-extrem
-exuent
-exult
-exult
-ey
-eya
-eyas
-ey
-eyebal
-eyebal
-eyebrow
-eyebrow
-ei
-eyeless
-eyelid
-eyelid
-ey
-eyesight
-eyestr
-ei
-eyn
-eyri
-fa
-fabian
-fabl
-fabl
-fabric
-fabul
-fac
-face
-face
-facer
-face
-faciant
-facil
-facil
-facineri
-face
-facit
-fact
-faction
-factionari
-faction
-factiou
-factor
-factor
-faculti
-faculti
-fade
-fade
-fadeth
-fadg
-fade
-fade
-fadom
-fadom
-fagot
-fagot
-fail
-fail
-fail
-fain
-faint
-faint
-fainter
-faint
-faintli
-faint
-faint
-fair
-fairer
-fairest
-fairi
-fair
-fair
-fairli
-fair
-fair
-fairwel
-fairi
-fai
-fait
-fait
-faith
-faith
-faithful
-faithfulli
-faithless
-faith
-faitor
-fal
-falchion
-falcon
-falconbridg
-falcon
-falcon
-fall
-fallaci
-fallen
-falleth
-falliabl
-fallibl
-fall
-fallow
-fallow
-fall
-falli
-falor
-fals
-falsehood
-fals
-fals
-falser
-falsifi
-fals
-falstaff
-falstaff
-falter
-fam
-fame
-fame
-familiar
-familiar
-familiarli
-familiar
-famili
-famin
-famish
-famish
-famou
-famous
-famous
-fan
-fanat
-fanci
-fanci
-fane
-fane
-fang
-fangl
-fangless
-fang
-fann
-fan
-fan
-fantasi
-fantasi
-fantast
-fantast
-fantast
-fantastico
-fantasi
-fap
-far
-farborough
-farc
-fardel
-fardel
-fare
-fare
-farewel
-farewel
-farin
-fare
-farm
-farmer
-farmhous
-farm
-farr
-farrow
-farther
-farthest
-farth
-farthingal
-farthingal
-farth
-fartuou
-fa
-fashion
-fashion
-fashion
-fashion
-fast
-fast
-fasten
-fasten
-faster
-fastest
-fast
-fastli
-fastolf
-fast
-fat
-fatal
-fatal
-fate
-fate
-fate
-father
-father
-fatherless
-fatherli
-father
-fathom
-fathomless
-fathom
-fatig
-fat
-fat
-fat
-fatter
-fattest
-fat
-fatuu
-fauconbridg
-faulconbridg
-fault
-faulti
-faultless
-fault
-faulti
-fauss
-faust
-faustus
-faut
-favor
-favor
-favor
-favor
-favour
-favour
-favour
-favouredli
-favour
-favour
-favour
-favourit
-favourit
-favour
-favout
-fawn
-fawneth
-fawn
-fawn
-fai
-fe
-fealti
-fear
-fear
-fearest
-fear
-fearful
-fearfulli
-fear
-fear
-fearless
-fear
-feast
-feast
-feast
-feast
-feat
-feat
-feater
-feather
-feather
-feather
-featli
-feat
-featur
-featur
-featur
-featureless
-featur
-februari
-feck
-fed
-fedari
-federari
-fee
-feebl
-feebl
-feebl
-feebl
-feebli
-feed
-feeder
-feeder
-feedeth
-feed
-feed
-feel
-feeler
-feel
-feelingli
-feel
-fee
-feet
-fehement
-feign
-feign
-feign
-feil
-feith
-felicit
-felic
-fell
-fellest
-felli
-fellow
-fellowli
-fellow
-fellowship
-fellowship
-fell
-felon
-feloni
-feloni
-felt
-femal
-femal
-feminin
-fen
-fenc
-fenc
-fencer
-fenc
-fend
-fennel
-fenni
-fen
-fenton
-fer
-ferdinand
-fere
-fernse
-ferrara
-ferrer
-ferret
-ferri
-ferryman
-fertil
-fertil
-fervenc
-fervour
-feri
-fest
-fest
-fester
-festin
-festin
-festiv
-festiv
-fet
-fetch
-fetch
-fetch
-fetlock
-fetlock
-fett
-fetter
-fetter
-fetter
-fettl
-feu
-feud
-fever
-fever
-fever
-few
-fewer
-fewest
-few
-fickl
-fickl
-fico
-fiction
-fiddl
-fiddler
-fiddlestick
-fidel
-fidelicet
-fidel
-fidiu
-fie
-field
-field
-field
-fiend
-fiend
-fierc
-fierc
-fierc
-fieri
-fife
-fife
-fifteen
-fifteen
-fifteenth
-fifth
-fifti
-fiftyfold
-fig
-fight
-fighter
-fightest
-fighteth
-fight
-fight
-figo
-fig
-figur
-figur
-figur
-figur
-figur
-fike
-fil
-filbert
-filch
-filch
-filch
-file
-file
-file
-filial
-filiu
-fill
-fill
-fillet
-fill
-fillip
-fill
-filli
-film
-fil
-filth
-filth
-filthi
-fin
-final
-finch
-find
-finder
-findeth
-find
-find
-find
-fine
-fineless
-fine
-finem
-fine
-finer
-fine
-finest
-fing
-finger
-finger
-finger
-fingr
-fingr
-finic
-finish
-finish
-finish
-finless
-finn
-fin
-finsburi
-fir
-firago
-fire
-firebrand
-firebrand
-fire
-fire
-firework
-firework
-fire
-firk
-firm
-firmament
-firmli
-firm
-first
-firstl
-fish
-fisher
-fishermen
-fisher
-fish
-fishifi
-fishmong
-fishpond
-fisnomi
-fist
-fist
-fist
-fistula
-fit
-fitchew
-fit
-fitli
-fitment
-fit
-fit
-fit
-fitter
-fittest
-fitteth
-fit
-fitzwat
-five
-fivep
-five
-fix
-fix
-fix
-fixeth
-fix
-fixtur
-fl
-flag
-flag
-flagon
-flagon
-flag
-flail
-flake
-flaki
-flam
-flame
-flamen
-flamen
-flame
-flame
-flaminiu
-flander
-flannel
-flap
-flare
-flash
-flash
-flash
-flask
-flat
-flatli
-flat
-flat
-flatt
-flatter
-flatter
-flatter
-flatter
-flatterest
-flatteri
-flatter
-flatter
-flatteri
-flaunt
-flavio
-flaviu
-flaw
-flaw
-flax
-flaxen
-flai
-flai
-flea
-fleanc
-flea
-fleck
-fled
-fledg
-flee
-fleec
-fleec
-fleec
-fleer
-fleer
-fleer
-fleet
-fleeter
-fleet
-fleme
-flemish
-flesh
-flesh
-fleshli
-fleshment
-fleshmong
-flew
-flexibl
-flexur
-flibbertigibbet
-flicker
-flidg
-flier
-fli
-flieth
-flight
-flight
-flighti
-flinch
-fling
-flint
-flint
-flinti
-flirt
-float
-float
-float
-flock
-flock
-flood
-floodgat
-flood
-floor
-flora
-florenc
-florentin
-florentin
-florentiu
-florizel
-flote
-floulish
-flour
-flourish
-flourish
-flourisheth
-flourish
-flout
-flout
-flout
-flout
-flow
-flow
-flower
-floweret
-flower
-flow
-flown
-flow
-fluellen
-fluent
-flung
-flush
-flush
-fluster
-flute
-flute
-flutter
-flux
-fluxiv
-fly
-fly
-fo
-foal
-foal
-foam
-foam
-foam
-foam
-foami
-fob
-foc
-fodder
-foe
-foeman
-foemen
-foe
-fog
-foggi
-fog
-foh
-foi
-foil
-foil
-foil
-foin
-foin
-foin
-foi
-foison
-foison
-foist
-foix
-fold
-fold
-fold
-folio
-folk
-folk
-folli
-follow
-follow
-follow
-follow
-followest
-follow
-follow
-folli
-fond
-fonder
-fondli
-fond
-font
-fontibel
-food
-fool
-fooleri
-fooleri
-foolhardi
-fool
-foolish
-foolishli
-foolish
-fool
-foot
-footbal
-footboi
-footboi
-foot
-footfal
-foot
-footman
-footmen
-footpath
-footstep
-footstool
-fopp
-fop
-fopperi
-foppish
-fop
-for
-forag
-forag
-forbad
-forbear
-forbear
-forbear
-forbid
-forbidden
-forbiddenli
-forbid
-forbod
-forborn
-forc
-forc
-forc
-forc
-forceless
-forc
-forcibl
-forcibl
-forc
-ford
-fordid
-fordo
-fordo
-fordon
-fore
-forecast
-forefath
-forefath
-forefing
-forego
-foregon
-forehand
-forehead
-forehead
-forehors
-foreign
-foreign
-foreign
-foreknow
-foreknowledg
-foremost
-forenam
-forenoon
-forerun
-forerunn
-forerun
-forerun
-foresaid
-foresaw
-foresai
-forese
-forese
-forese
-foreshow
-foreskirt
-foresp
-forest
-forestal
-forestal
-forest
-forest
-forest
-foretel
-foretel
-foretel
-forethink
-forethought
-foretold
-forev
-foreward
-forewarn
-forewarn
-forewarn
-forfeit
-forfeit
-forfeit
-forfeit
-forfeit
-forfeitur
-forfeitur
-forfend
-forfend
-forg
-forgav
-forg
-forg
-forgeri
-forgeri
-forg
-forget
-forget
-forget
-forget
-forget
-forget
-forgiv
-forgiven
-forgiv
-forgo
-forgo
-forgon
-forgot
-forgotten
-fork
-fork
-fork
-forlorn
-form
-formal
-formal
-form
-former
-formerli
-formless
-form
-fornic
-fornic
-fornicatress
-forr
-forrest
-forsak
-forsaken
-forsaketh
-forslow
-forsook
-forsooth
-forspent
-forspok
-forswear
-forswear
-forswor
-forsworn
-fort
-fort
-forth
-forthcom
-forthlight
-forthright
-forthwith
-fortif
-fortif
-fortifi
-fortifi
-fortifi
-fortinbra
-fortitud
-fortnight
-fortress
-fortress
-fort
-fortun
-fortuna
-fortun
-fortun
-fortun
-fortun
-fortun
-fortward
-forti
-forum
-forward
-forward
-forward
-forward
-forweari
-fosset
-fost
-foster
-foster
-fought
-foughten
-foul
-fouler
-foulest
-foulli
-foul
-found
-foundat
-foundat
-found
-founder
-fount
-fountain
-fountain
-fount
-four
-fourscor
-fourteen
-fourth
-foutra
-fowl
-fowler
-fowl
-fowl
-fox
-fox
-foxship
-fract
-fraction
-fraction
-fragil
-fragment
-fragment
-fragrant
-frail
-frailer
-frailti
-frailti
-fram
-frame
-frame
-frame
-frampold
-fran
-francai
-franc
-franc
-franchis
-franchis
-franchis
-franchis
-francia
-franci
-francisca
-franciscan
-francisco
-frank
-franker
-frankfort
-franklin
-franklin
-frankli
-frank
-frantic
-franticli
-frateretto
-fratrum
-fraud
-fraud
-fraught
-fraughtag
-fraught
-frai
-frai
-freckl
-freckl
-freckl
-frederick
-free
-freed
-freedom
-freedom
-freeheart
-freelier
-freeli
-freeman
-freemen
-freeness
-freer
-free
-freeston
-freetown
-freez
-freez
-freez
-freez
-french
-frenchman
-frenchmen
-frenchwoman
-frenzi
-frequent
-frequent
-fresh
-fresher
-fresh
-freshest
-freshli
-fresh
-fret
-fret
-fret
-fret
-fretten
-fret
-friar
-friar
-fridai
-fridai
-friend
-friend
-friend
-friendless
-friendli
-friendli
-friend
-friendship
-friendship
-friez
-fright
-fright
-frighten
-fright
-fright
-fright
-fring
-fring
-fripperi
-frisk
-fritter
-frivol
-fro
-frock
-frog
-frogmor
-froissart
-frolic
-from
-front
-front
-frontier
-frontier
-front
-frontlet
-front
-frost
-frost
-frosti
-froth
-froward
-frown
-frown
-frowningli
-frown
-froze
-frozen
-fructifi
-frugal
-fruit
-fruiter
-fruit
-fruitfulli
-fruit
-fruition
-fruitless
-fruit
-frush
-frustrat
-frutifi
-fry
-fubb
-fuel
-fugit
-fulfil
-fulfil
-fulfil
-fulfil
-full
-fullam
-fuller
-fuller
-fullest
-full
-fulli
-ful
-fulsom
-fulvia
-fum
-fumbl
-fumbl
-fumblest
-fumbl
-fume
-fume
-fume
-fumit
-fumitori
-fun
-function
-function
-fundament
-funer
-funer
-fur
-furbish
-furi
-furiou
-furlong
-furnac
-furnac
-furnish
-furnish
-furnish
-furnitur
-furniv
-furor
-furr
-furrow
-furrow
-furrow
-furth
-further
-further
-further
-furthermor
-furthest
-furi
-furz
-furz
-fust
-fustian
-fustilarian
-fusti
-fut
-futur
-futur
-g
-gabbl
-gaberdin
-gabriel
-gad
-gad
-gad
-gadshil
-gag
-gage
-gage
-gagg
-gage
-gagn
-gain
-gain
-gainer
-gaingiv
-gain
-gainsaid
-gainsai
-gainsai
-gainsai
-gainst
-gait
-gait
-galath
-gale
-galen
-gale
-gall
-gallant
-gallantli
-gallantri
-gallant
-gall
-galleri
-gallei
-gallei
-gallia
-gallian
-galliard
-galliass
-gallimaufri
-gall
-gallon
-gallop
-gallop
-gallop
-gallow
-gallowai
-gallowglass
-gallow
-gallows
-gall
-gallu
-gam
-gambol
-gambold
-gambol
-gamboi
-game
-gamer
-game
-gamesom
-gamest
-game
-gammon
-gamut
-gan
-gangren
-ganymed
-gaol
-gaoler
-gaoler
-gaol
-gap
-gape
-gape
-gape
-gar
-garb
-garbag
-garboil
-garcon
-gard
-gard
-garden
-garden
-garden
-garden
-gardez
-gardin
-gardon
-gargantua
-gargrav
-garish
-garland
-garland
-garlic
-garment
-garment
-garmet
-garner
-garner
-garnish
-garnish
-garret
-garrison
-garrison
-gart
-garter
-garterd
-garter
-garter
-gasconi
-gash
-gash
-gaskin
-gasp
-gasp
-gast
-gast
-gat
-gate
-gate
-gate
-gath
-gather
-gather
-gather
-gather
-gatori
-gatori
-gaud
-gaudeo
-gaudi
-gaug
-gaul
-gaultre
-gaunt
-gauntlet
-gauntlet
-gav
-gave
-gavest
-gawd
-gawd
-gawsei
-gai
-gay
-gaz
-gaze
-gaze
-gazer
-gazer
-gaze
-gazeth
-gaze
-gear
-geck
-gees
-geffrei
-geld
-geld
-geld
-gelida
-gelidu
-gelt
-gem
-gemini
-gem
-gen
-gender
-gender
-gener
-gener
-gener
-gener
-gener
-gener
-generos
-gener
-genit
-genitivo
-geniu
-gennet
-genoa
-genoux
-gen
-gent
-gentilhomm
-gentil
-gentl
-gentlefolk
-gentleman
-gentlemanlik
-gentlemen
-gentl
-gentler
-gentl
-gentlest
-gentlewoman
-gentlewomen
-gentli
-gentri
-georg
-gerard
-germain
-germain
-german
-german
-german
-germani
-gertrud
-gest
-gest
-gestur
-gestur
-get
-getrud
-get
-getter
-get
-ghastli
-ghost
-ghost
-ghostli
-ghost
-gi
-giant
-giantess
-giantlik
-giant
-gib
-gibber
-gibbet
-gibbet
-gibe
-giber
-gibe
-gibe
-gibingli
-giddili
-giddi
-giddi
-gift
-gift
-gig
-giglet
-giglot
-gilbert
-gild
-gild
-gild
-gilliam
-gillian
-gill
-gillyvor
-gilt
-gimmal
-gimmer
-gin
-ging
-ginger
-gingerbread
-gingerli
-ginn
-gin
-gioucestershir
-gipe
-gipsi
-gipsi
-gird
-gird
-girdl
-girdl
-girdl
-girdl
-girl
-girl
-girt
-girth
-gi
-giv
-give
-given
-giver
-giver
-give
-givest
-giveth
-give
-give
-glad
-glad
-glad
-gladli
-glad
-glami
-glanc
-glanc
-glanc
-glanc
-glanc
-glander
-glansdal
-glare
-glare
-glass
-glass
-glassi
-glaz
-glaze
-gleam
-glean
-glean
-glean
-gleeful
-gleek
-gleek
-gleek
-glend
-glendow
-glib
-glide
-glide
-glide
-glideth
-glide
-glimmer
-glimmer
-glimmer
-glimps
-glimps
-glist
-glisten
-glister
-glister
-glister
-glitt
-glitter
-globe
-globe
-gloom
-gloomi
-glori
-glorifi
-glorifi
-gloriou
-glorious
-glori
-glose
-gloss
-gloss
-glou
-gloucest
-gloucest
-gloucestershir
-glove
-glover
-glove
-glow
-glow
-glow
-glowworm
-gloz
-gloze
-gloze
-glu
-glue
-glu
-glue
-glut
-glutt
-glut
-glutton
-glutton
-gluttoni
-gnarl
-gnarl
-gnat
-gnat
-gnaw
-gnaw
-gnawn
-gnaw
-go
-goad
-goad
-goad
-goal
-goat
-goatish
-goat
-gobbet
-gobbo
-goblet
-goblet
-goblin
-goblin
-god
-god
-godden
-goddess
-goddess
-goddild
-godfath
-godfath
-godhead
-godlik
-godli
-godli
-godmoth
-god
-godson
-goer
-goer
-goe
-goest
-goeth
-goff
-gog
-go
-gold
-golden
-goldenli
-goldsmith
-goldsmith
-golgotha
-golias
-goliath
-gon
-gondola
-gondoli
-gone
-goneril
-gong
-gonzago
-gonzalo
-good
-goodfellow
-goodlier
-goodliest
-goodli
-goodman
-good
-goodnight
-goodrig
-good
-goodwif
-goodwil
-goodwin
-goodwin
-goodyear
-goodyear
-goos
-gooseberri
-goosequil
-goot
-gor
-gorbelli
-gorboduc
-gordian
-gore
-gore
-gorg
-gorg
-gorgeou
-gorget
-gorg
-gorgon
-gormand
-gormand
-gori
-gosl
-gospel
-gospel
-goss
-gossam
-gossip
-gossip
-gossiplik
-gossip
-got
-goth
-goth
-gotten
-gourd
-gout
-gout
-gouti
-govern
-govern
-govern
-gover
-govern
-governor
-governor
-govern
-gower
-gown
-gown
-grac
-grace
-grace
-grace
-gracefulli
-graceless
-grace
-grace
-graciou
-gracious
-gradat
-graff
-graf
-graft
-graft
-grafter
-grain
-grain
-grain
-gramerci
-gramerci
-grammar
-grand
-grandam
-grandam
-grandchild
-grand
-grandeur
-grandfath
-grandjuror
-grandmoth
-grandpr
-grandsir
-grandsir
-grandsir
-grang
-grant
-grant
-grant
-grant
-grape
-grape
-grappl
-grappl
-grappl
-grasp
-grasp
-grasp
-grass
-grasshopp
-grassi
-grate
-grate
-grate
-grate
-gratiano
-gratifi
-gratii
-gratil
-grate
-grati
-gratitud
-gratul
-grav
-grave
-gravedigg
-gravel
-graveless
-gravel
-grave
-graven
-grave
-graver
-grave
-gravest
-graveston
-graviti
-graviti
-gravi
-grai
-graymalkin
-graz
-graze
-graze
-graze
-greas
-greas
-greasili
-greasi
-great
-greater
-greatest
-greatli
-great
-grecian
-grecian
-gree
-greec
-greed
-greedili
-greedi
-greedi
-gree
-greek
-greekish
-greek
-green
-greener
-greenli
-green
-greensleev
-greenwich
-greenwood
-greet
-greet
-greet
-greet
-greet
-greg
-gregori
-gremio
-grew
-grei
-greybeard
-greybeard
-greyhound
-greyhound
-grief
-grief
-griev
-grievanc
-grievanc
-griev
-griev
-griev
-grievest
-griev
-grievingli
-grievou
-grievous
-griffin
-griffith
-grim
-grime
-grimli
-grin
-grind
-grind
-grindston
-grin
-grip
-gripe
-gripe
-gripe
-grise
-grisli
-grissel
-grize
-grizzl
-grizzl
-groan
-groan
-groan
-groat
-groat
-groin
-groom
-groom
-grop
-grope
-gro
-gross
-grosser
-grossli
-gross
-ground
-ground
-groundl
-ground
-grove
-grovel
-grovel
-grove
-grow
-groweth
-grow
-grown
-grow
-growth
-grub
-grubb
-grub
-grudg
-grudg
-grudg
-grudg
-gruel
-grumbl
-grumblest
-grumbl
-grumbl
-grumio
-grund
-grunt
-gualtier
-guard
-guardag
-guardant
-guard
-guardian
-guardian
-guard
-guardsman
-gud
-gudgeon
-guerdon
-guerra
-guess
-guess
-guessingli
-guest
-guest
-guiana
-guichard
-guid
-guid
-guider
-guideriu
-guid
-guid
-guidon
-guienn
-guil
-guildenstern
-guilder
-guildford
-guildhal
-guil
-guil
-guil
-guilford
-guilt
-guiltian
-guiltier
-guiltili
-guilti
-guiltless
-guilt
-guilti
-guinea
-guinev
-guis
-gul
-gule
-gulf
-gulf
-gull
-gull
-gum
-gumm
-gum
-gun
-gunner
-gunpowd
-gun
-gurnet
-gurnei
-gust
-gust
-gusti
-gut
-gutter
-gui
-guyn
-guysor
-gypsi
-gyve
-gyve
-gyve
-h
-ha
-haberdash
-habili
-habili
-habit
-habit
-habit
-habit
-habitud
-hack
-hacket
-hacknei
-hack
-had
-hadst
-haec
-haer
-hag
-hagar
-haggard
-haggard
-haggish
-haggl
-hag
-hail
-hail
-hailston
-hailston
-hair
-hairless
-hair
-hairi
-hal
-halberd
-halberd
-halcyon
-hale
-hale
-hale
-half
-halfcan
-halfpenc
-halfpenni
-halfpennyworth
-halfwai
-halidom
-hall
-halloa
-hallo
-hallond
-halloo
-halloo
-hallow
-hallow
-hallowma
-hallown
-hal
-halt
-halter
-halter
-halt
-halt
-halv
-ham
-hame
-hamlet
-hammer
-hammer
-hammer
-hammer
-hamper
-hampton
-ham
-hamstr
-hand
-hand
-hand
-handicraft
-handicraftsmen
-hand
-handiwork
-handkerch
-handkerch
-handkerchief
-handl
-handl
-handl
-handless
-handlest
-handl
-handmaid
-handmaid
-hand
-handsaw
-handsom
-handsom
-handsom
-handwrit
-handi
-hang
-hang
-hanger
-hangeth
-hang
-hang
-hangman
-hangmen
-hang
-hannib
-hap
-hapless
-hapli
-happ
-happen
-happen
-happier
-happi
-happiest
-happili
-happi
-happi
-hap
-harbing
-harbing
-harbor
-harbour
-harbourag
-harbour
-harbour
-harcourt
-hard
-harder
-hardest
-hardiest
-hardiment
-hardi
-hardli
-hard
-hardock
-hardi
-hare
-harelip
-hare
-harfleur
-hark
-harlot
-harlotri
-harlot
-harm
-harm
-harm
-harm
-harmless
-harmoni
-harmoni
-harm
-har
-harp
-harper
-harpier
-harp
-harpi
-harri
-harrow
-harrow
-harri
-harsh
-harshli
-harsh
-hart
-hart
-harum
-harvest
-ha
-hast
-hast
-hast
-hasten
-hast
-hastili
-hast
-hast
-hasti
-hat
-hatch
-hatch
-hatchet
-hatch
-hatchment
-hate
-hate
-hate
-hater
-hater
-hate
-hateth
-hatfield
-hath
-hate
-hatr
-hat
-haud
-hauf
-haught
-haughti
-haughti
-haunch
-haunch
-haunt
-haunt
-haunt
-haunt
-hautboi
-hautboi
-have
-haven
-haven
-haver
-have
-have
-havior
-haviour
-havoc
-hawk
-hawk
-hawk
-hawthorn
-hawthorn
-hai
-hazard
-hazard
-hazard
-hazel
-hazelnut
-he
-head
-headborough
-head
-headier
-head
-headland
-headless
-headlong
-head
-headsman
-headstrong
-headi
-heal
-heal
-heal
-heal
-health
-health
-health
-healthsom
-healthi
-heap
-heap
-heap
-hear
-heard
-hearer
-hearer
-hearest
-heareth
-hear
-hear
-heark
-hearken
-hearken
-hear
-hearsai
-hears
-hears
-hearst
-heart
-heartach
-heartbreak
-heartbreak
-heart
-hearten
-hearth
-hearth
-heartili
-hearti
-heartless
-heartl
-heartli
-heart
-heartsick
-heartstr
-hearti
-heat
-heat
-heath
-heathen
-heathenish
-heat
-heat
-heauti
-heav
-heav
-heav
-heaven
-heavenli
-heaven
-heav
-heavier
-heaviest
-heavili
-heavi
-heav
-heav
-heavi
-hebona
-hebrew
-hecat
-hectic
-hector
-hector
-hecuba
-hedg
-hedg
-hedgehog
-hedgehog
-hedg
-heed
-heed
-heed
-heedful
-heedfulli
-heedless
-heel
-heel
-heft
-heft
-heifer
-heifer
-heigh
-height
-heighten
-heinou
-heinous
-heir
-heiress
-heirless
-heir
-held
-helen
-helena
-helenu
-helia
-helicon
-hell
-hellespont
-hellfir
-hellish
-helm
-helm
-helmet
-helmet
-helm
-help
-helper
-helper
-help
-help
-helpless
-help
-helter
-hem
-heme
-hemlock
-hemm
-hemp
-hempen
-hem
-hen
-henc
-henceforth
-henceforward
-henchman
-henri
-henricu
-henri
-hen
-hent
-henton
-her
-herald
-heraldri
-herald
-herb
-herbert
-herblet
-herb
-herculean
-hercul
-herd
-herd
-herdsman
-herdsmen
-here
-hereabout
-hereabout
-hereaft
-herebi
-hereditari
-hereford
-herefordshir
-herein
-hereof
-heresi
-heresi
-heret
-heret
-hereto
-hereupon
-heritag
-heriti
-herm
-hermia
-hermion
-hermit
-hermitag
-hermit
-hern
-hero
-herod
-herod
-hero
-heroic
-heroic
-her
-her
-her
-herself
-hesperid
-hesperu
-hest
-hest
-heur
-heureux
-hew
-hewgh
-hew
-hewn
-hew
-hei
-heydai
-hibocr
-hic
-hiccup
-hick
-hid
-hidden
-hide
-hideou
-hideous
-hideous
-hide
-hidest
-hide
-hie
-hi
-hiem
-hi
-hig
-high
-higher
-highest
-highli
-highmost
-high
-hight
-highwai
-highwai
-hild
-hild
-hill
-hillo
-hilloa
-hill
-hilt
-hilt
-hili
-him
-himself
-hinc
-hincklei
-hind
-hinder
-hinder
-hinder
-hindmost
-hind
-hing
-hing
-hing
-hint
-hip
-hipp
-hipparchu
-hippolyta
-hip
-hir
-hire
-hire
-hiren
-hirtiu
-hi
-hisperia
-hiss
-hiss
-hiss
-hist
-histor
-histori
-hit
-hither
-hitherto
-hitherward
-hitherward
-hit
-hit
-hive
-hive
-hizz
-ho
-hoa
-hoar
-hoard
-hoard
-hoard
-hoar
-hoars
-hoari
-hob
-hobbidid
-hobbi
-hobbyhors
-hobgoblin
-hobnail
-hoc
-hod
-hodg
-hog
-hog
-hogshead
-hogshead
-hoi
-hois
-hoist
-hoist
-hoist
-holborn
-hold
-holden
-holder
-holdeth
-holdfast
-hold
-hold
-hole
-hole
-holidam
-holidam
-holidai
-holidai
-holier
-holiest
-holili
-holi
-holla
-holland
-holland
-holland
-holloa
-holloa
-hollow
-hollowli
-hollow
-holli
-holmedon
-holofern
-holp
-holi
-homag
-homag
-home
-home
-home
-homespun
-homeward
-homeward
-homicid
-homicid
-homili
-hominem
-homm
-homo
-honest
-honest
-honestest
-honestli
-honesti
-honei
-honeycomb
-honei
-honeyless
-honeysuckl
-honeysuckl
-honi
-honneur
-honor
-honor
-honor
-honorato
-honorificabilitudinitatibu
-honor
-honour
-honour
-honour
-honour
-honourest
-honour
-honour
-honour
-hoo
-hood
-hood
-hoodman
-hood
-hoodwink
-hoof
-hoof
-hook
-hook
-hook
-hoop
-hoop
-hoot
-hoot
-hoot
-hoot
-hop
-hope
-hope
-hopeless
-hope
-hopest
-hope
-hopkin
-hopped
-hor
-horac
-horatio
-horizon
-horn
-hornbook
-horn
-horner
-horn
-hornpip
-horn
-horolog
-horribl
-horribl
-horrid
-horrid
-horridli
-horror
-horror
-hor
-hors
-horseback
-hors
-horsehair
-horseman
-horsemanship
-horsemen
-hors
-horsewai
-hors
-hortensio
-hortensiu
-horum
-hose
-hospit
-hospit
-hospit
-host
-hostag
-hostag
-hostess
-hostil
-hostil
-hostiliu
-host
-hot
-hotli
-hotspur
-hotter
-hottest
-hound
-hound
-hour
-hourli
-hour
-hou
-hous
-household
-household
-household
-household
-housekeep
-housekeep
-housekeep
-houseless
-hous
-housewif
-housewiferi
-housew
-hovel
-hover
-hover
-hover
-hover
-how
-howbeit
-how
-howeer
-howev
-howl
-howl
-howlet
-howl
-howl
-howso
-howsoev
-howsom
-hox
-hoi
-hoydai
-hubert
-huddl
-huddl
-hue
-hu
-hue
-hug
-huge
-huge
-huge
-hugg
-hugger
-hugh
-hug
-huju
-hulk
-hulk
-hull
-hull
-hullo
-hum
-human
-human
-human
-human
-humbl
-humbl
-humbl
-humbler
-humbl
-humblest
-humbl
-humbl
-hume
-humh
-humid
-humil
-hum
-humor
-humor
-humor
-humour
-humourist
-humour
-humphrei
-humphri
-hum
-hundr
-hundr
-hundredth
-hung
-hungarian
-hungari
-hunger
-hungerford
-hungerli
-hungri
-hunt
-hunt
-hunter
-hunter
-hunteth
-hunt
-huntington
-huntress
-hunt
-huntsman
-huntsmen
-hurdl
-hurl
-hurl
-hurl
-hurli
-hurlyburli
-hurricano
-hurricano
-hurri
-hurri
-hurri
-hurt
-hurt
-hurtl
-hurtless
-hurtl
-hurt
-husband
-husband
-husbandless
-husbandri
-husband
-hush
-hush
-husht
-husk
-huswif
-huswif
-hutch
-hybla
-hydra
-hyen
-hymen
-hymenaeu
-hymn
-hymn
-hyperbol
-hyperbol
-hyperion
-hypocrisi
-hypocrit
-hypocrit
-hyrcan
-hyrcania
-hyrcanian
-hyssop
-hysterica
-i
-iachimo
-iaculi
-iago
-iament
-ibat
-icaru
-ic
-iceland
-ici
-icicl
-icicl
-ici
-idea
-idea
-idem
-iden
-id
-idiot
-idiot
-idl
-idl
-idl
-idli
-idol
-idolatr
-idolatri
-ield
-if
-if
-igni
-ignobl
-ignobl
-ignomini
-ignomini
-ignomi
-ignor
-ignor
-ii
-iii
-iiii
-il
-ilbow
-ild
-ilion
-ilium
-ill
-illegitim
-illiter
-ill
-illo
-ill
-illum
-illumin
-illumin
-illumineth
-illus
-illus
-illustr
-illustr
-illustri
-illyria
-illyrian
-il
-im
-imag
-imageri
-imag
-imagin
-imaginari
-imagin
-imagin
-imagin
-imagin
-imagin
-imbar
-imbecil
-imbru
-imitari
-imit
-imit
-imit
-imit
-immacul
-imman
-immask
-immateri
-immediaci
-immedi
-immedi
-immin
-immin
-immoder
-immoder
-immodest
-immoment
-immort
-immortaliz
-immort
-immur
-immur
-immur
-imogen
-imp
-impaint
-impair
-impair
-impal
-impal
-impanel
-impart
-impart
-imparti
-impart
-impart
-impast
-impati
-impati
-impati
-impawn
-impeach
-impeach
-impeach
-impeach
-imped
-impedi
-impedi
-impenetr
-imper
-imperceiver
-imperfect
-imperfect
-imperfect
-imperfectli
-imperi
-imperi
-imperi
-impertin
-impertin
-impetico
-impetuos
-impetu
-impieti
-impieti
-impiou
-implac
-implement
-impli
-implor
-implor
-implor
-implor
-implor
-impon
-import
-import
-import
-import
-importantli
-import
-importeth
-import
-importless
-import
-importun
-importunaci
-importun
-importun
-importun
-importun
-impo
-impos
-impos
-imposit
-imposit
-imposs
-imposs
-imposs
-imposthum
-impostor
-impostor
-impot
-impot
-impound
-impregn
-impres
-impress
-impress
-impressest
-impress
-impressur
-imprimendum
-imprimi
-imprint
-imprint
-imprison
-imprison
-imprison
-imprison
-improb
-improp
-improv
-improvid
-impud
-impud
-impud
-impud
-impudiqu
-impugn
-impugn
-impur
-imput
-imput
-in
-inaccess
-inaid
-inaud
-inauspici
-incag
-incant
-incap
-incardin
-incarnadin
-incarn
-incarn
-incen
-incens
-incens
-incens
-incens
-incens
-incertain
-incertainti
-incertainti
-incess
-incessantli
-incest
-incestu
-inch
-incharit
-inch
-incid
-incid
-incis
-incit
-incit
-incivil
-incivil
-inclin
-inclin
-inclin
-inclin
-inclin
-inclin
-inclin
-inclip
-includ
-includ
-includ
-inclus
-incompar
-incomprehens
-inconsider
-inconst
-inconst
-incontin
-incontin
-incontin
-inconveni
-inconveni
-inconveni
-inconi
-incorpor
-incorp
-incorrect
-increa
-increas
-increas
-increaseth
-increas
-incred
-incredul
-incur
-incur
-incurr
-incur
-incurs
-ind
-ind
-indebt
-inde
-indent
-indent
-indentur
-indentur
-index
-index
-india
-indian
-indict
-indict
-indict
-indi
-indiffer
-indiffer
-indiffer
-indig
-indigest
-indigest
-indign
-indign
-indign
-indign
-indign
-indign
-indirect
-indirect
-indirect
-indirectli
-indiscreet
-indiscret
-indispo
-indisposit
-indissolubl
-indistinct
-indistinguish
-indistinguish
-indit
-individ
-indrench
-indu
-indubit
-induc
-induc
-induc
-induc
-induct
-induct
-indu
-indu
-indu
-indulg
-indulg
-indulg
-indur
-industri
-industri
-industri
-inequ
-inestim
-inevit
-inexecr
-inexor
-inexplic
-infal
-infal
-infamon
-infam
-infami
-infanc
-infant
-infant
-infect
-infect
-infect
-infect
-infect
-infecti
-infecti
-infect
-infer
-infer
-inferior
-inferior
-infern
-inferr
-inferreth
-infer
-infest
-infidel
-infidel
-infinit
-infinit
-infinit
-infirm
-infirm
-infirm
-infix
-infix
-inflam
-inflam
-inflam
-inflamm
-inflict
-inflict
-influenc
-influenc
-infold
-inform
-inform
-inform
-inform
-inform
-inform
-inform
-infortun
-infr
-infring
-infring
-infu
-infus
-infus
-infus
-infus
-ingen
-ingeni
-ingeni
-inglori
-ingot
-ingraf
-ingraft
-ingrat
-ingrat
-ingrat
-ingratitud
-ingratitud
-ingredi
-ingredi
-ingross
-inhabit
-inhabit
-inhabit
-inhabit
-inhabit
-inhears
-inhears
-inher
-inherit
-inherit
-inherit
-inherit
-inheritor
-inheritor
-inheritrix
-inherit
-inhibit
-inhibit
-inhoop
-inhuman
-iniqu
-iniqu
-initi
-injoint
-injunct
-injunct
-injur
-injur
-injur
-injuri
-injuri
-injuri
-injustic
-ink
-inkhorn
-inkl
-inkl
-inkl
-inki
-inlaid
-inland
-inlai
-inli
-inmost
-inn
-inner
-innkeep
-innoc
-innoc
-innoc
-innoc
-innov
-innov
-inn
-innumer
-inocul
-inordin
-inprimi
-inquir
-inquir
-inquiri
-inquisit
-inquisit
-inroad
-insan
-insani
-insati
-insconc
-inscrib
-inscript
-inscript
-inscrol
-inscrut
-insculp
-insculptur
-insens
-insepar
-insepar
-insert
-insert
-inset
-inshel
-inshipp
-insid
-insinew
-insinu
-insinuateth
-insinu
-insinu
-insist
-insist
-insistur
-insoci
-insol
-insol
-insomuch
-inspir
-inspir
-inspir
-inspir
-inspir
-instal
-instal
-instal
-instanc
-instanc
-instant
-instantli
-instat
-instead
-insteep
-instig
-instig
-instig
-instig
-instig
-instinct
-instinct
-institut
-institut
-instruct
-instruct
-instruct
-instruct
-instruct
-instrument
-instrument
-instrument
-insubstanti
-insuffici
-insuffici
-insult
-insult
-insult
-insult
-insult
-insupport
-insuppress
-insurrect
-insurrect
-int
-integ
-integrita
-integr
-intellect
-intellect
-intellectu
-intellig
-intelligenc
-intelligenc
-intellig
-intelligi
-intelligo
-intemper
-intemper
-intend
-intend
-intendeth
-intend
-intend
-intend
-inten
-intent
-intent
-intent
-intent
-inter
-intercept
-intercept
-intercept
-intercept
-intercept
-intercess
-intercessor
-interchain
-interchang
-interchang
-interchang
-interchang
-interchang
-interdict
-interest
-interim
-interim
-interior
-interject
-interjoin
-interlud
-intermingl
-intermiss
-intermiss
-intermit
-intermix
-intermix
-interpos
-interpos
-interpos
-interpret
-interpret
-interpret
-interpret
-interpret
-interpret
-interr
-inter
-interrogatori
-interrupt
-interrupt
-interrupt
-interruptest
-interrupt
-interrupt
-intertissu
-intervallum
-interview
-intest
-intestin
-intil
-intim
-intim
-intitl
-intitul
-into
-intoler
-intox
-intreasur
-intreat
-intrench
-intrench
-intric
-intrins
-intrins
-intrud
-intrud
-intrud
-intrus
-inund
-inur
-inurn
-invad
-invad
-invas
-invas
-invect
-invect
-inveigl
-invent
-invent
-invent
-invent
-inventor
-inventori
-inventori
-inventor
-inventori
-inver
-invert
-invest
-invest
-invest
-invest
-inveter
-invinc
-inviol
-invis
-invis
-invit
-invit
-invit
-invit
-invit
-inviti
-invoc
-invoc
-invok
-invok
-invulner
-inward
-inwardli
-inward
-inward
-ionia
-ionian
-ips
-ipswich
-ira
-ira
-ira
-ir
-ir
-ireland
-iri
-irish
-irishman
-irishmen
-irk
-irksom
-iron
-iron
-irreconcil
-irrecover
-irregular
-irregul
-irreligi
-irremov
-irrepar
-irresolut
-irrevoc
-is
-isabel
-isabella
-isbel
-isbel
-iscariot
-is
-ish
-isidor
-isi
-island
-island
-island
-island
-isl
-isl
-israel
-issu
-issu
-issu
-issueless
-issu
-issu
-ist
-ista
-it
-italian
-itali
-itch
-itch
-itch
-item
-item
-iter
-ithaca
-it
-itself
-itshal
-iv
-ivori
-ivi
-iwi
-ix
-j
-jacet
-jack
-jackanap
-jack
-jacksauc
-jackslav
-jacob
-jade
-jade
-jade
-jail
-jake
-jamani
-jame
-jami
-jane
-jangl
-jangl
-januari
-janu
-japhet
-jaquenetta
-jaqu
-jar
-jar
-jar
-jarteer
-jason
-jaunc
-jaunc
-jaundic
-jaundi
-jaw
-jawbon
-jaw
-jai
-jai
-jc
-je
-jealou
-jealousi
-jealousi
-jeer
-jeer
-jelli
-jenni
-jeopardi
-jephtha
-jephthah
-jerkin
-jerkin
-jerk
-jeronimi
-jerusalem
-jeshu
-jess
-jessica
-jest
-jest
-jester
-jester
-jest
-jest
-jesu
-jesu
-jet
-jet
-jew
-jewel
-jewel
-jewel
-jewess
-jewish
-jewri
-jew
-jezebel
-jig
-jig
-jill
-jill
-jingl
-joan
-job
-jockei
-jocund
-jog
-jog
-john
-john
-join
-joinder
-join
-joiner
-joineth
-join
-joint
-joint
-joint
-jointli
-jointress
-joint
-jointur
-jolliti
-jolli
-jolt
-jolthead
-jordan
-joseph
-joshua
-jot
-jour
-jourdain
-journal
-journei
-journei
-journeyman
-journeymen
-journei
-jove
-jovem
-jovial
-jowl
-jowl
-joi
-joi
-joy
-joyfulli
-joyless
-joyou
-joi
-juan
-jud
-juda
-judas
-jude
-judg
-judg
-judg
-judgement
-judg
-judgest
-judg
-judgment
-judgment
-judici
-jug
-juggl
-juggl
-juggler
-juggler
-juggl
-jug
-juic
-juic
-jul
-jule
-julia
-juliet
-julietta
-julio
-juliu
-juli
-jump
-jumpeth
-jump
-jump
-june
-june
-junior
-juniu
-junket
-juno
-jupit
-jure
-jurement
-jurisdict
-juror
-juror
-juri
-jurymen
-just
-justeiu
-justest
-justic
-justic
-justic
-justic
-justif
-justifi
-justifi
-justl
-justl
-justl
-justl
-justli
-just
-just
-jut
-jutti
-juven
-kam
-kate
-kate
-kate
-katharin
-katherina
-katherin
-kecksi
-keech
-keel
-keel
-keen
-keen
-keep
-keepdown
-keeper
-keeper
-keepest
-keep
-keep
-keiser
-ken
-kendal
-kennel
-kent
-kentish
-kentishman
-kentishmen
-kept
-kerchief
-kere
-kern
-kernal
-kernel
-kernel
-kern
-kersei
-kettl
-kettledrum
-kettledrum
-kei
-kei
-kibe
-kibe
-kick
-kick
-kickshaw
-kickshaws
-kicki
-kid
-kidnei
-kike
-kildar
-kill
-kill
-killer
-killeth
-kill
-killingworth
-kill
-kiln
-kimbolton
-kin
-kind
-kinder
-kindest
-kindl
-kindl
-kindless
-kindlier
-kindl
-kindli
-kind
-kind
-kindr
-kindr
-kind
-kine
-king
-kingdom
-kingdom
-kingli
-king
-kinr
-kin
-kinsman
-kinsmen
-kinswoman
-kirtl
-kirtl
-kiss
-kiss
-kiss
-kiss
-kitchen
-kitchen
-kite
-kite
-kitten
-kj
-kl
-klll
-knack
-knack
-knapp
-knav
-knave
-knaveri
-knaveri
-knave
-knavish
-knead
-knead
-knead
-knee
-kneel
-kneel
-kneel
-knee
-knell
-knew
-knewest
-knife
-knight
-knight
-knighthood
-knighthood
-knightli
-knight
-knit
-knit
-knitter
-knitteth
-knive
-knob
-knock
-knock
-knock
-knog
-knoll
-knot
-knot
-knot
-knotti
-know
-knower
-knowest
-know
-knowingli
-know
-knowledg
-known
-know
-l
-la
-laban
-label
-label
-labienu
-labio
-labor
-labor
-labor
-labour
-labour
-labour
-labour
-labour
-labour
-laboursom
-labra
-labyrinth
-lac
-lace
-lace
-lacedaemon
-lace
-laci
-lack
-lackbeard
-lack
-lackei
-lackei
-lackei
-lack
-lack
-lad
-ladder
-ladder
-lade
-laden
-ladi
-lade
-lad
-ladi
-ladybird
-ladyship
-ladyship
-laer
-laert
-lafeu
-lag
-lag
-laid
-lain
-laissez
-lake
-lake
-lakin
-lam
-lamb
-lambert
-lambkin
-lambkin
-lamb
-lame
-lame
-lame
-lament
-lament
-lament
-lament
-lament
-lament
-lament
-lament
-lament
-lame
-lame
-lamma
-lammastid
-lamound
-lamp
-lampass
-lamp
-lanc
-lancast
-lanc
-lanc
-lanceth
-lanch
-land
-land
-land
-landless
-landlord
-landmen
-land
-lane
-lane
-langag
-langlei
-langton
-languag
-languageless
-languag
-langu
-languish
-languish
-languish
-languish
-languish
-languish
-languor
-lank
-lantern
-lantern
-lanthorn
-lap
-lapi
-lapland
-lapp
-lap
-laps
-laps
-laps
-lapw
-laquai
-lard
-larder
-lard
-lard
-larg
-larg
-larg
-larger
-largess
-largest
-lark
-lark
-larron
-lartiu
-larum
-larum
-la
-lascivi
-lash
-lass
-lass
-last
-last
-last
-lastli
-last
-latch
-latch
-late
-late
-late
-later
-latest
-lath
-latin
-latten
-latter
-lattic
-laud
-laudabl
-laudi
-laugh
-laughabl
-laugh
-laugher
-laughest
-laugh
-laugh
-laughter
-launc
-launcelot
-launc
-launch
-laund
-laundress
-laundri
-laur
-laura
-laurel
-laurel
-laurenc
-lau
-lavach
-lave
-lave
-lavend
-lavina
-lavinia
-lavish
-lavishli
-lavolt
-lavolta
-law
-law
-lawfulli
-lawless
-lawlessli
-lawn
-lawn
-lawrenc
-law
-lawyer
-lawyer
-lai
-layer
-layest
-lai
-lai
-lazar
-lazar
-lazaru
-lazi
-lc
-ld
-ldst
-le
-lead
-leaden
-leader
-leader
-leadest
-lead
-lead
-leaf
-leagu
-leagu
-leagu
-leaguer
-leagu
-leah
-leak
-leaki
-lean
-leander
-leaner
-lean
-lean
-lean
-leap
-leap
-leap
-leap
-leapt
-lear
-learn
-learn
-learnedli
-learn
-learn
-learn
-learnt
-lea
-leas
-leas
-leash
-leas
-least
-leather
-leathern
-leav
-leav
-leaven
-leaven
-leaver
-leav
-leav
-leavi
-lecher
-lecher
-lecher
-lecheri
-lecon
-lectur
-lectur
-led
-leda
-leech
-leech
-leek
-leek
-leer
-leer
-lee
-lees
-leet
-leet
-left
-leg
-legaci
-legaci
-legat
-legatin
-lege
-leger
-lege
-legg
-legion
-legion
-legitim
-legitim
-leg
-leicest
-leicestershir
-leiger
-leiger
-leisur
-leisur
-leisur
-leman
-lemon
-lena
-lend
-lender
-lend
-lend
-lend
-length
-lengthen
-lengthen
-length
-leniti
-lennox
-lent
-lenten
-lentu
-leo
-leon
-leonardo
-leonati
-leonato
-leonatu
-leont
-leopard
-leopard
-leper
-leper
-lepidu
-leprosi
-lequel
-ler
-le
-less
-lessen
-lessen
-lesser
-lesson
-lesson
-lesson
-lest
-lestrak
-let
-lethargi
-lethargi
-lethargi
-leth
-let
-lett
-letter
-letter
-let
-lettuc
-leur
-leve
-level
-level
-level
-level
-leven
-lever
-leviathan
-leviathan
-levi
-levi
-leviti
-levi
-levi
-lewd
-lewdli
-lewd
-lewdster
-lewi
-liabl
-liar
-liar
-libbard
-libel
-libel
-liber
-liber
-libert
-liberti
-libertin
-libertin
-liberti
-librari
-libya
-licenc
-licen
-licens
-licenti
-licha
-licio
-lick
-lick
-licker
-lictor
-lid
-lid
-lie
-li
-lief
-liefest
-lieg
-liegeman
-liegemen
-lien
-li
-liest
-lieth
-lieu
-lieuten
-lieutenantri
-lieuten
-liev
-life
-lifeblood
-lifeless
-lifel
-lift
-lift
-lifter
-lifteth
-lift
-lift
-lig
-ligariu
-liggen
-light
-light
-lighten
-lighten
-lighter
-lightest
-lightli
-light
-lightn
-lightn
-light
-lik
-like
-like
-likeliest
-likelihood
-likelihood
-like
-like
-liker
-like
-likest
-likewis
-like
-like
-lili
-lili
-lim
-limand
-limb
-limbeck
-limbeck
-limber
-limbo
-limb
-lime
-lime
-limehous
-limekiln
-limit
-limit
-limit
-limit
-limn
-limp
-limp
-limp
-lin
-lincoln
-lincolnshir
-line
-lineal
-lineal
-lineament
-lineament
-line
-linen
-linen
-line
-ling
-lingar
-linger
-linger
-linger
-linguist
-line
-link
-link
-linsei
-linstock
-linta
-lion
-lionel
-lioness
-lion
-lip
-lipp
-lip
-lipsburi
-liquid
-liquor
-liquorish
-liquor
-lirra
-lisbon
-lisp
-lisp
-list
-listen
-listen
-list
-literatur
-lither
-litter
-littl
-littlest
-liv
-live
-live
-liveli
-livelihood
-livelong
-live
-liver
-liveri
-liver
-liveri
-live
-livest
-liveth
-livia
-live
-live
-lizard
-lizard
-ll
-lll
-llou
-lnd
-lo
-loa
-loach
-load
-loaden
-load
-load
-loaf
-loam
-loan
-loath
-loath
-loath
-loather
-loath
-loath
-loathli
-loath
-loathsom
-loathsom
-loathsomest
-loav
-lob
-lobbi
-lobbi
-local
-lochab
-lock
-lock
-lock
-lockram
-lock
-locust
-lode
-lodg
-lodg
-lodg
-lodger
-lodg
-lodg
-lodg
-lodovico
-lodowick
-lofti
-log
-logger
-loggerhead
-loggerhead
-logget
-logic
-log
-loin
-loiter
-loiter
-loiter
-loiter
-loll
-loll
-lombardi
-london
-london
-lone
-loneli
-lone
-long
-longavil
-longboat
-long
-longer
-longest
-longeth
-long
-long
-longli
-long
-longtail
-loo
-loof
-look
-look
-looker
-looker
-lookest
-look
-look
-loon
-loop
-loo
-loos
-loos
-loos
-loosen
-loos
-lop
-lopp
-loquitur
-lord
-lord
-lord
-lord
-lordli
-lordli
-lord
-lordship
-lordship
-lorenzo
-lorn
-lorrain
-lorship
-lo
-lose
-loser
-loser
-lose
-losest
-loseth
-lose
-loss
-loss
-lost
-lot
-lot
-lott
-lotteri
-loud
-louder
-loudli
-lour
-loureth
-lour
-lous
-lous
-lousi
-lout
-lout
-lout
-louvr
-lov
-love
-love
-lovedst
-lovel
-loveli
-loveli
-lovel
-love
-lover
-lover
-lover
-love
-lovest
-loveth
-love
-lovingli
-low
-low
-lower
-lowest
-low
-lowli
-lowli
-lown
-low
-loyal
-loyal
-loyalti
-loyalti
-lozel
-lt
-lubber
-lubberli
-luc
-luccico
-luce
-lucentio
-luce
-lucetta
-luciana
-lucianu
-lucif
-lucifi
-luciliu
-lucina
-lucio
-luciu
-luck
-luckier
-luckiest
-luckili
-luckless
-lucki
-lucr
-lucrec
-lucretia
-luculliu
-lucullu
-luci
-lud
-ludlow
-lug
-lugg
-luggag
-luke
-lukewarm
-lull
-lulla
-lullabi
-lull
-lumbert
-lump
-lumpish
-luna
-lunaci
-lunaci
-lunat
-lunat
-lune
-lung
-luperc
-lurch
-lure
-lurk
-lurketh
-lurk
-lurk
-lusciou
-lush
-lust
-lust
-luster
-lust
-lustier
-lustiest
-lustig
-lustihood
-lustili
-lustr
-lustrou
-lust
-lusti
-lute
-lute
-lutestr
-lutheran
-luxuri
-luxuri
-luxuri
-ly
-lycaonia
-lycurgus
-lydia
-lye
-lyen
-ly
-lym
-lymog
-lynn
-lysand
-m
-ma
-maan
-mab
-macbeth
-maccabaeu
-macdonwald
-macduff
-mace
-macedon
-mace
-machiavel
-machin
-machin
-machin
-mack
-macmorri
-macul
-macul
-mad
-madam
-madam
-madam
-madcap
-mad
-mad
-made
-madeira
-madli
-madman
-madmen
-mad
-madonna
-madrig
-mad
-maecena
-maggot
-maggot
-magic
-magic
-magician
-magistr
-magistr
-magnanim
-magnanim
-magni
-magnifi
-magnific
-magnific
-magnifico
-magnifico
-magnu
-mahomet
-mahu
-maid
-maiden
-maidenhead
-maidenhead
-maidenhood
-maidenhood
-maidenliest
-maidenli
-maiden
-maidhood
-maid
-mail
-mail
-mail
-maim
-maim
-maim
-main
-maincours
-main
-mainli
-mainmast
-main
-maintain
-maintain
-maintain
-mainten
-mai
-maison
-majesta
-majeste
-majest
-majest
-majest
-majesti
-majesti
-major
-major
-mak
-make
-makeless
-maker
-maker
-make
-makest
-maketh
-make
-make
-mal
-mala
-maladi
-maladi
-malapert
-malcolm
-malcont
-malcont
-male
-maledict
-malefact
-malefactor
-malefactor
-male
-malevol
-malevol
-malhecho
-malic
-malici
-malici
-malign
-malign
-malign
-malignantli
-malkin
-mall
-mallard
-mallet
-mallow
-malmsei
-malt
-maltworm
-malvolio
-mamilliu
-mammer
-mammet
-mammet
-mammock
-man
-manacl
-manacl
-manag
-manag
-manag
-manag
-manakin
-manchu
-mandat
-mandragora
-mandrak
-mandrak
-mane
-manent
-mane
-manet
-manfulli
-mangl
-mangl
-mangl
-mangl
-mangi
-manhood
-manhood
-manifest
-manifest
-manifest
-manifold
-manifoldli
-manka
-mankind
-manlik
-manli
-mann
-manna
-manner
-mannerli
-manner
-manningtre
-mannish
-manor
-manor
-man
-mansion
-mansionri
-mansion
-manslaught
-mantl
-mantl
-mantl
-mantua
-mantuan
-manual
-manur
-manur
-manu
-mani
-map
-mapp
-map
-mar
-marbl
-marbl
-marcad
-marcellu
-march
-march
-marcheth
-march
-marchio
-marchpan
-marcian
-marciu
-marcu
-mardian
-mare
-mare
-marg
-margarelon
-margaret
-marg
-margent
-margeri
-maria
-marian
-mariana
-mari
-marigold
-marin
-marin
-maritim
-marjoram
-mark
-mark
-market
-market
-marketplac
-market
-mark
-markman
-mark
-marl
-marl
-marmoset
-marquess
-marqui
-marr
-marriag
-marriag
-marri
-marri
-mar
-marrow
-marrowless
-marrow
-marri
-marri
-mar
-marseil
-marsh
-marshal
-marshalsea
-marshalship
-mart
-mart
-martem
-martext
-martial
-martin
-martino
-martiu
-martlema
-martlet
-mart
-martyr
-martyr
-marullu
-marv
-marvel
-marvel
-marvel
-marvel
-marvel
-mari
-ma
-masculin
-masham
-mask
-mask
-masker
-masker
-mask
-mask
-mason
-masonri
-mason
-masqu
-masquer
-masqu
-masqu
-mass
-massacr
-massacr
-mass
-massi
-mast
-mastcr
-master
-masterdom
-masterest
-masterless
-masterli
-masterpiec
-master
-mastership
-mastic
-mastiff
-mastiff
-mast
-match
-match
-matcheth
-match
-matchless
-mate
-mate
-mater
-materi
-mate
-mathemat
-matin
-matron
-matron
-matter
-matter
-matthew
-mattock
-mattress
-matur
-matur
-maud
-maudlin
-maugr
-maul
-maund
-mauri
-mauritania
-mauvai
-maw
-maw
-maxim
-mai
-maydai
-mayest
-mayor
-maypol
-mayst
-maz
-maze
-maze
-maze
-mazzard
-me
-meacock
-mead
-meadow
-meadow
-mead
-meagr
-meal
-meal
-meali
-mean
-meander
-meaner
-meanest
-meaneth
-mean
-mean
-meanli
-mean
-meant
-meantim
-meanwhil
-measl
-measur
-measur
-measur
-measur
-measureless
-measur
-measur
-meat
-meat
-mechan
-mechan
-mechan
-mechan
-mechant
-med
-medal
-meddl
-meddler
-meddl
-mede
-medea
-media
-mediat
-mediat
-medic
-medicin
-medicin
-medicin
-medit
-medit
-medit
-medit
-medit
-mediterranean
-mediterraneum
-medlar
-medlar
-meed
-meed
-meek
-meekli
-meek
-meet
-meeter
-meetest
-meet
-meet
-meetli
-meet
-meet
-meg
-mehercl
-meilleur
-meini
-meisen
-melancholi
-melancholi
-melford
-mell
-melliflu
-mellow
-mellow
-melodi
-melodi
-melt
-melt
-melteth
-melt
-melt
-melun
-member
-member
-memento
-memor
-memorandum
-memori
-memori
-memori
-memoriz
-memor
-memori
-memphi
-men
-menac
-menac
-menac
-menaphon
-mena
-mend
-mend
-mender
-mend
-mend
-menecr
-menelau
-meneniu
-mental
-menteith
-mention
-menti
-menton
-mephostophilu
-mer
-mercatant
-mercatio
-mercenari
-mercenari
-mercer
-merchandis
-merchand
-merchant
-merchant
-merci
-merci
-mercifulli
-merciless
-mercuri
-mercuri
-mercuri
-mercutio
-merci
-mere
-mere
-mere
-merest
-meridian
-merit
-merit
-meritori
-merit
-merlin
-mermaid
-mermaid
-merop
-merrier
-merriest
-merrili
-merriman
-merriment
-merriment
-merri
-merri
-mervail
-me
-mesh
-mesh
-mesopotamia
-mess
-messag
-messag
-messala
-messalin
-messeng
-messeng
-mess
-messina
-met
-metal
-metal
-metamorphi
-metamorphos
-metaphor
-metaphys
-metaphys
-mete
-metellu
-meteor
-meteor
-meteyard
-metheglin
-metheglin
-methink
-methink
-method
-method
-methought
-methought
-metr
-metr
-metropoli
-mett
-mettl
-mettl
-meu
-mew
-mew
-mewl
-mexico
-mi
-mice
-michael
-michaelma
-micher
-mich
-mickl
-microcosm
-mid
-mida
-middest
-middl
-middleham
-midnight
-midriff
-midst
-midsumm
-midwai
-midwif
-midwiv
-mienn
-might
-might
-mightier
-mightiest
-mightili
-mighti
-mightst
-mighti
-milan
-milch
-mild
-milder
-mildest
-mildew
-mildew
-mildli
-mild
-mile
-mile
-milford
-militarist
-militari
-milk
-milk
-milkmaid
-milk
-milksop
-milki
-mill
-mill
-miller
-millin
-million
-million
-million
-mill
-millston
-milo
-mimic
-minc
-minc
-minc
-minc
-mind
-mind
-mind
-mindless
-mind
-mine
-miner
-miner
-minerva
-mine
-mingl
-mingl
-mingl
-minikin
-minim
-minim
-minimo
-minimu
-mine
-minion
-minion
-minist
-minist
-minist
-ministr
-minnow
-minnow
-minola
-minor
-mino
-minotaur
-minstrel
-minstrel
-minstrelsi
-mint
-mint
-minut
-minut
-minut
-minx
-mio
-mir
-mirabl
-miracl
-miracl
-miracul
-miranda
-mire
-mirror
-mirror
-mirth
-mirth
-miri
-mi
-misadventur
-misadventur
-misanthropo
-misappli
-misbecam
-misbecom
-misbecom
-misbegot
-misbegotten
-misbeliev
-misbeliev
-misbhav
-miscal
-miscal
-miscarri
-miscarri
-miscarri
-miscarri
-mischanc
-mischanc
-mischief
-mischief
-mischiev
-misconceiv
-misconst
-misconst
-misconstruct
-misconstru
-misconstru
-miscreant
-miscreat
-misde
-misde
-misdemean
-misdemeanour
-misdoubt
-misdoubteth
-misdoubt
-misenum
-miser
-miser
-miser
-misericord
-miseri
-miser
-miseri
-misfortun
-misfortun
-misgiv
-misgiv
-misgiv
-misgovern
-misgovern
-misgraf
-misguid
-mishap
-mishap
-misheard
-misinterpret
-mislead
-mislead
-mislead
-mislead
-misl
-mislik
-misord
-misplac
-misplac
-misplac
-mispri
-mispris
-mispris
-mispriz
-misproud
-misquot
-misreport
-miss
-miss
-miss
-misshap
-misshapen
-missheath
-miss
-missingli
-mission
-missiv
-missiv
-misspok
-mist
-mista
-mistak
-mistak
-mistaken
-mistak
-mistaketh
-mistak
-mistak
-mistemp
-mistemp
-misterm
-mist
-misthink
-misthought
-mistleto
-mistook
-mistread
-mistress
-mistress
-mistresss
-mistriship
-mistrust
-mistrust
-mistrust
-mistrust
-mist
-misti
-misu
-misus
-misus
-misus
-mite
-mithrid
-mitig
-mitig
-mix
-mix
-mixtur
-mixtur
-mm
-mnd
-moan
-moan
-moat
-moat
-mobl
-mock
-mockabl
-mocker
-mockeri
-mocker
-mockeri
-mock
-mock
-mockvat
-mockwat
-model
-modena
-moder
-moder
-moder
-modern
-modest
-modesti
-modestli
-modesti
-modicum
-modo
-modul
-moe
-moi
-moieti
-moist
-moisten
-moistur
-moldwarp
-mole
-molehil
-mole
-molest
-molest
-mollif
-molli
-molten
-molto
-mome
-moment
-momentari
-mome
-mon
-monachum
-monarch
-monarchi
-monarch
-monarcho
-monarch
-monarchi
-monast
-monasteri
-monast
-mondai
-mond
-monei
-monei
-mong
-monger
-monger
-mong
-mongrel
-mongrel
-mongst
-monk
-monkei
-monkei
-monk
-monmouth
-monopoli
-mon
-monsieur
-monsieur
-monster
-monster
-monstrou
-monstrous
-monstrous
-monstruos
-montacut
-montag
-montagu
-montagu
-montano
-montant
-montez
-montferrat
-montgomeri
-month
-monthli
-month
-montjoi
-monument
-monument
-monument
-mood
-mood
-moodi
-moon
-moonbeam
-moonish
-moonlight
-moon
-moonshin
-moonshin
-moor
-moorfield
-moor
-moorship
-mop
-mope
-mope
-mop
-mopsa
-moral
-moral
-moral
-moral
-mordak
-more
-moreov
-more
-morgan
-mori
-morisco
-morn
-morn
-morn
-morocco
-morri
-morrow
-morrow
-morsel
-morsel
-mort
-mortal
-mortal
-mortal
-mortal
-mortar
-mortgag
-mortifi
-mortifi
-mortim
-mortim
-morti
-mortis
-morton
-mose
-moss
-mossgrown
-most
-mote
-moth
-mother
-mother
-moth
-motion
-motionless
-motion
-motiv
-motiv
-motlei
-mot
-mought
-mould
-mould
-mouldeth
-mould
-mouldi
-moult
-moulten
-mounch
-mounseur
-mounsieur
-mount
-mountain
-mountain
-mountain
-mountain
-mountain
-mountant
-mountanto
-mountebank
-mountebank
-mount
-mounteth
-mount
-mount
-mourn
-mourn
-mourner
-mourner
-mourn
-mournfulli
-mourn
-mourningli
-mourn
-mourn
-mou
-mous
-mousetrap
-mous
-mouth
-mouth
-mouth
-mov
-movabl
-move
-moveabl
-moveabl
-move
-mover
-mover
-move
-moveth
-move
-movingli
-movousu
-mow
-mowbrai
-mower
-mow
-mow
-moi
-moi
-moys
-mr
-much
-muck
-mud
-mud
-muddi
-muddi
-muffin
-muffl
-muffl
-muffl
-muffler
-muffl
-mugger
-mug
-mulberri
-mulberri
-mule
-mule
-mulet
-mulier
-mulier
-muliteu
-mull
-mulmutiu
-multipli
-multipli
-multipli
-multipot
-multitud
-multitud
-multitudin
-mum
-mumbl
-mumbl
-mummer
-mummi
-mun
-munch
-muniment
-munit
-murd
-murder
-murder
-murder
-murder
-murder
-murder
-murder
-mure
-murk
-murkiest
-murki
-murmur
-murmur
-murmur
-murrain
-murrai
-murrion
-murther
-murther
-murther
-murther
-murther
-murther
-mu
-muscadel
-muscovit
-muscovit
-muscovi
-muse
-muse
-mush
-mushroom
-music
-music
-musician
-musician
-music
-muse
-muse
-musk
-musket
-musket
-musko
-muss
-mussel
-mussel
-must
-mustachio
-mustard
-mustardse
-muster
-muster
-muster
-musti
-mutabl
-mutabl
-mutat
-mutat
-mute
-mute
-mutest
-mutin
-mutin
-mutin
-mutin
-mutini
-mutin
-mutini
-mutiu
-mutter
-mutter
-mutton
-mutton
-mutual
-mutual
-mutual
-muzzl
-muzzl
-muzzl
-mv
-mww
-my
-mynheer
-myrmidon
-myrmidon
-myrtl
-myself
-myst
-mysteri
-mysteri
-n
-nag
-nage
-nag
-naiad
-nail
-nail
-nak
-nake
-naked
-nal
-nam
-name
-name
-nameless
-name
-name
-namest
-name
-nan
-nanc
-nap
-nape
-nape
-napkin
-napkin
-napl
-napless
-nap
-nap
-narbon
-narcissu
-narin
-narrow
-narrowli
-naso
-nasti
-nathaniel
-natif
-nation
-nation
-nativ
-nativ
-natur
-natur
-natur
-natur
-natur
-natur
-natur
-natu
-naught
-naughtili
-naughti
-navarr
-nave
-navel
-navig
-navi
-nai
-nayward
-nayword
-nazarit
-ne
-neaf
-neamnoin
-neanmoin
-neapolitan
-neapolitan
-near
-nearer
-nearest
-nearli
-near
-neat
-neatli
-neb
-nebour
-nebuchadnezzar
-nec
-necessari
-necessarili
-necessari
-necess
-necess
-necess
-neck
-necklac
-neck
-nectar
-ned
-nedar
-need
-need
-needer
-need
-needful
-need
-needl
-needl
-needless
-needli
-need
-needi
-neer
-neez
-nefa
-negat
-neg
-neg
-neglect
-neglect
-neglect
-neglectingli
-neglect
-neglig
-neglig
-negoti
-negoti
-negro
-neigh
-neighbor
-neighbour
-neighbourhood
-neighbour
-neighbourli
-neighbour
-neigh
-neigh
-neither
-nell
-nemean
-nemesi
-neoptolemu
-nephew
-nephew
-neptun
-ner
-nereid
-nerissa
-nero
-nero
-ner
-nerv
-nerv
-nervii
-nervi
-nessu
-nest
-nestor
-nest
-net
-nether
-netherland
-net
-nettl
-nettl
-nettl
-neuter
-neutral
-nev
-never
-nevil
-nevil
-new
-newborn
-newer
-newest
-newgat
-newli
-new
-new
-newsmong
-newt
-newt
-next
-nibbl
-nicanor
-nice
-nice
-nice
-nicer
-niceti
-nichola
-nick
-nicknam
-nick
-niec
-niec
-niggard
-niggard
-niggardli
-nigh
-night
-nightcap
-nightcap
-night
-nightgown
-nightingal
-nightingal
-nightli
-nightmar
-night
-nightwork
-nihil
-nile
-nill
-nilu
-nimbl
-nimbl
-nimbler
-nimbl
-nine
-nineteen
-ning
-ningli
-ninni
-ninth
-ninu
-niob
-niob
-nip
-nipp
-nip
-nippl
-nip
-nit
-nly
-nnight
-nnight
-no
-noah
-nob
-nobil
-nobi
-nobl
-nobleman
-noblemen
-nobl
-nobler
-nobl
-nobless
-noblest
-nobli
-nobodi
-noce
-nod
-nod
-nod
-noddl
-noddl
-noddi
-nod
-noe
-noint
-noi
-nois
-noiseless
-noisemak
-nois
-noisom
-nole
-nomin
-nomin
-nomin
-nominativo
-non
-nonag
-nonc
-none
-nonino
-nonni
-nonpareil
-nonsuit
-noni
-nook
-nook
-noon
-noondai
-noontid
-nor
-norberi
-norfolk
-norman
-normandi
-norman
-north
-northampton
-northamptonshir
-northerli
-northern
-northgat
-northumberland
-northumberland
-northward
-norwai
-norwai
-norwegian
-norweyan
-no
-nose
-nosegai
-noseless
-nose
-noster
-nostra
-nostril
-nostril
-not
-notabl
-notabl
-notari
-notch
-note
-notebook
-note
-notedli
-note
-notest
-noteworthi
-noth
-noth
-notic
-notifi
-note
-notion
-notori
-notori
-notr
-notwithstand
-nought
-noun
-noun
-nourish
-nourish
-nourish
-nourish
-nourisheth
-nourish
-nourish
-nou
-novel
-novelti
-novelti
-noverb
-novi
-novic
-novic
-novum
-now
-nowher
-noyanc
-ns
-nt
-nubibu
-numa
-numb
-number
-number
-number
-numberless
-number
-numb
-nun
-nuncio
-nuncl
-nunneri
-nun
-nuntiu
-nuptial
-nur
-nurs
-nurs
-nurser
-nurseri
-nurs
-nurseth
-nursh
-nurs
-nurtur
-nurtur
-nut
-nuthook
-nutmeg
-nutmeg
-nutriment
-nut
-nutshel
-ny
-nym
-nymph
-nymph
-o
-oak
-oaken
-oak
-oar
-oar
-oatcak
-oaten
-oath
-oathabl
-oath
-oat
-ob
-obduraci
-obdur
-obedi
-obedi
-obeis
-oberon
-obei
-obei
-obei
-obei
-obidicut
-object
-object
-object
-object
-oblat
-oblat
-oblig
-oblig
-oblig
-obliqu
-oblivion
-oblivi
-obloqui
-obscen
-obscen
-obscur
-obscur
-obscur
-obscur
-obscur
-obscur
-obscur
-obsequi
-obsequi
-obsequi
-observ
-observ
-observ
-observ
-observ
-observ
-observ
-observ
-observ
-observ
-observ
-observ
-observingli
-obsqu
-obstacl
-obstacl
-obstinaci
-obstin
-obstin
-obstruct
-obstruct
-obstruct
-obtain
-obtain
-obtain
-occas
-occas
-occid
-occident
-occult
-occupat
-occup
-occup
-occupi
-occupi
-occupi
-occurr
-occurr
-occurr
-ocean
-ocean
-octavia
-octaviu
-ocular
-od
-odd
-oddest
-oddli
-odd
-od
-od
-odiou
-odorifer
-odor
-odour
-odour
-od
-oeillad
-oe
-oeuvr
-of
-ofephesu
-off
-offal
-offenc
-offenc
-offenc
-offend
-offend
-offendendo
-offend
-offend
-offendeth
-offend
-offendress
-offend
-offens
-offenseless
-offens
-offens
-offer
-offer
-offer
-offer
-offer
-offert
-offic
-offic
-offic
-offic
-offic
-offic
-offici
-offici
-offspr
-oft
-often
-often
-oftentim
-oh
-oil
-oil
-oili
-old
-oldcastl
-olden
-older
-oldest
-old
-oliv
-oliv
-oliv
-oliv
-olivia
-olympian
-olympu
-oman
-oman
-omen
-omin
-omiss
-omit
-omitt
-omit
-omit
-omn
-omn
-omnipot
-on
-onc
-on
-on
-oney
-ongl
-onion
-onion
-onli
-onset
-onward
-onward
-oo
-ooz
-ooz
-oozi
-op
-opal
-op
-open
-open
-open
-openli
-open
-open
-oper
-oper
-oper
-oper
-oper
-op
-oph
-ophelia
-opinion
-opinion
-opportun
-opportun
-opportun
-oppo
-oppos
-oppos
-opposeless
-oppos
-oppos
-oppos
-oppos
-opposit
-opposit
-opposit
-opposit
-oppress
-oppress
-oppress
-oppresseth
-oppress
-oppress
-oppressor
-opprest
-opprobri
-oppugn
-opul
-opul
-or
-oracl
-oracl
-orang
-orat
-orat
-orat
-oratori
-orb
-orb
-orb
-orchard
-orchard
-ord
-ordain
-ordain
-ordain
-order
-order
-order
-orderless
-orderli
-order
-ordin
-ordin
-ordinari
-ordinari
-ordnanc
-ord
-ordur
-or
-organ
-organ
-orgil
-orient
-orifex
-origin
-origin
-orison
-ork
-orlando
-orld
-orlean
-ornament
-ornament
-orod
-orphan
-orphan
-orpheu
-orsino
-ort
-orthographi
-ort
-oscorbidulcho
-osier
-osier
-osprei
-osr
-osric
-ossa
-ost
-ostent
-ostentar
-ostent
-ostent
-ostler
-ostler
-ostrich
-osw
-oswald
-othello
-other
-otherg
-other
-otherwher
-otherwhil
-otherwis
-otter
-ottoman
-ottomit
-oubli
-ouch
-ought
-oui
-ounc
-ounc
-ouph
-our
-our
-ourself
-ourselv
-ousel
-out
-outbid
-outbrav
-outbrav
-outbreak
-outcast
-outcri
-outcri
-outdar
-outdar
-outdar
-outdon
-outfac
-outfac
-outfac
-outfac
-outfli
-outfrown
-outgo
-outgo
-outgrown
-outjest
-outlaw
-outlawri
-outlaw
-outliv
-outliv
-outliv
-outliv
-outlook
-outlustr
-outpriz
-outrag
-outrag
-outrag
-outran
-outright
-outroar
-outrun
-outrun
-outrun
-outscold
-outscorn
-outsel
-outsel
-outsid
-outsid
-outspeak
-outsport
-outstar
-outstai
-outstood
-outstretch
-outstretch
-outstrik
-outstrip
-outstrip
-outswear
-outvenom
-outward
-outwardli
-outward
-outwear
-outweigh
-outwent
-outworn
-outworth
-oven
-over
-overaw
-overbear
-overblown
-overboard
-overbold
-overborn
-overbulk
-overbui
-overcam
-overcast
-overcharg
-overcharg
-overcom
-overcom
-overdon
-overearnest
-overfar
-overflow
-overflown
-overgl
-overgo
-overgon
-overgorg
-overgrown
-overhead
-overhear
-overheard
-overhold
-overjoi
-overkind
-overland
-overleath
-overl
-overlook
-overlook
-overlook
-overmast
-overmount
-overmuch
-overpass
-overp
-overp
-overplu
-overrul
-overrun
-overscutch
-overset
-overshad
-overshin
-overshin
-overshot
-oversight
-overspread
-overstain
-overswear
-overt
-overta
-overtak
-overtaketh
-overthrow
-overthrown
-overthrow
-overtook
-overtopp
-overtur
-overturn
-overwatch
-overween
-overween
-overweigh
-overwhelm
-overwhelm
-overworn
-ovid
-ovidiu
-ow
-ow
-ow
-owedst
-owen
-ow
-owest
-oweth
-ow
-owl
-owl
-own
-owner
-owner
-own
-own
-owi
-ox
-oxen
-oxford
-oxfordshir
-oxlip
-oy
-oyster
-p
-pabbl
-pabylon
-pac
-pace
-pace
-pace
-pacifi
-pacifi
-pace
-pack
-packet
-packet
-packhors
-pack
-pack
-pack
-packthread
-pacoru
-paction
-pad
-paddl
-paddl
-paddock
-padua
-pagan
-pagan
-page
-pageant
-pageant
-page
-pah
-paid
-pail
-pail
-pail
-pain
-pain
-pain
-painfulli
-pain
-paint
-paint
-painter
-paint
-paint
-paint
-pair
-pair
-pair
-pajock
-pal
-palabra
-palac
-palac
-palamed
-palat
-palat
-palatin
-palat
-pale
-pale
-pale
-paler
-pale
-palestin
-palfrei
-palfrei
-palisado
-pall
-pallabri
-palla
-pallet
-palm
-palmer
-palmer
-palm
-palmi
-palpabl
-palsi
-palsi
-palsi
-palt
-palter
-paltri
-pali
-pamp
-pamper
-pamphlet
-pan
-pancack
-pancak
-pancak
-pandar
-pandar
-pandaru
-pander
-panderli
-pander
-pandulph
-panel
-pang
-pang
-pang
-pannier
-pannonian
-pansa
-pansi
-pant
-pantaloon
-pant
-pantheon
-panther
-panthino
-pant
-pantingli
-pantler
-pantri
-pant
-pap
-papal
-paper
-paper
-paphlagonia
-papho
-papist
-pap
-par
-parabl
-paracelsu
-paradis
-paradox
-paradox
-paragon
-paragon
-parallel
-parallel
-paramour
-paramour
-parapet
-paraquito
-parasit
-parasit
-parca
-parcel
-parcel
-parcel
-parch
-parch
-parch
-parchment
-pard
-pardon
-pardona
-pardon
-pardon
-pardon
-pardonn
-pardonn
-pardonnez
-pardon
-pare
-pare
-parel
-parent
-parentag
-parent
-parfect
-pare
-pare
-pari
-parish
-parishion
-parisian
-paritor
-park
-park
-parl
-parler
-parl
-parlei
-parlez
-parliament
-parlor
-parlour
-parlou
-parmac
-parol
-parricid
-parricid
-parrot
-parrot
-parslei
-parson
-part
-partak
-partaken
-partak
-partak
-part
-parthia
-parthian
-parthian
-parti
-partial
-partial
-partial
-particip
-particip
-particl
-particular
-particular
-particular
-particularli
-particular
-parti
-part
-partisan
-partisan
-partit
-partizan
-partlet
-partli
-partner
-partner
-partridg
-part
-parti
-pa
-pash
-pash
-pash
-pass
-passabl
-passado
-passag
-passag
-passant
-pass
-passeng
-passeng
-pass
-passeth
-pass
-passio
-passion
-passion
-passion
-passion
-passiv
-passport
-passi
-past
-past
-pastern
-pasti
-pastim
-pastim
-pastor
-pastor
-pastor
-pastri
-pastur
-pastur
-pasti
-pat
-patai
-patch
-patcheri
-patch
-pate
-pate
-patent
-patent
-patern
-pate
-path
-pathet
-path
-pathwai
-pathwai
-patienc
-patient
-patient
-patient
-patin
-patrician
-patrician
-patrick
-patrimoni
-patroclu
-patron
-patronag
-patro
-patron
-patrum
-patter
-pattern
-pattern
-pattl
-pauca
-pauca
-paul
-paulina
-paunch
-paunch
-paus
-pauser
-paus
-pausingli
-pauvr
-pav
-pave
-pavement
-pavilion
-pavilion
-pavin
-paw
-pawn
-pawn
-paw
-pax
-pai
-payest
-pai
-payment
-payment
-pai
-paysan
-paysan
-pe
-peac
-peaceabl
-peaceabl
-peac
-peacemak
-peac
-peach
-peach
-peacock
-peacock
-peak
-peak
-peal
-peal
-pear
-peard
-pearl
-pearl
-pear
-pea
-peasant
-peasantri
-peasant
-peascod
-peas
-peaseblossom
-peat
-peaten
-peat
-pebbl
-pebbl
-pebbl
-peck
-peck
-peculiar
-pecu
-pedant
-pedant
-pedascul
-pede
-pedest
-pedigre
-pedlar
-pedlar
-pedro
-ped
-peel
-peep
-peep
-peep
-peep
-peer
-peereth
-peer
-peerless
-peer
-peesel
-peevish
-peevishli
-peflur
-peg
-pegasu
-peg
-peis
-peis
-peiz
-pelf
-pelican
-pelion
-pell
-pella
-pellet
-peloponnesu
-pelt
-pelt
-pembrok
-pen
-penalti
-penalti
-penanc
-penc
-pencil
-pencil
-pencil
-pendant
-pendent
-pendragon
-pendul
-penelop
-penetr
-penetr
-penetr
-penit
-penit
-penitenti
-penit
-penit
-penker
-penknif
-penn
-pen
-pen
-pennon
-penni
-pennyworth
-pennyworth
-pen
-pens
-pension
-pension
-pensiv
-pensiv
-pensiv
-pent
-pentecost
-penthesilea
-penthous
-penuri
-penuri
-peopl
-peopl
-peopl
-peopl
-pepin
-pepper
-peppercorn
-pepper
-per
-peradventur
-peradventur
-perceiv
-perceiv
-perceiv
-perceiv
-perceiveth
-perch
-perchanc
-perci
-percuss
-perci
-perdi
-perdita
-perdit
-perdonato
-perdu
-perdur
-perdur
-perdi
-pere
-peregrin
-peremptorili
-peremptori
-perfect
-perfect
-perfect
-perfectest
-perfect
-perfect
-perfectli
-perfect
-perfidi
-perfidi
-perforc
-perform
-perform
-perform
-perform
-perform
-perform
-perform
-perform
-perfum
-perfum
-perfum
-perfum
-perfum
-perg
-perhap
-periapt
-perigort
-perigouna
-peril
-peril
-peril
-period
-period
-perish
-perish
-perishest
-perisheth
-perish
-periwig
-perjur
-perjur
-perjur
-perjuri
-perjuri
-perk
-perk
-permafoi
-perman
-permiss
-permiss
-permit
-permit
-pernici
-pernici
-peror
-perpend
-perpendicular
-perpendicularli
-perpetu
-perpetu
-perpetu
-perplex
-perplex
-perplex
-per
-persecut
-persecut
-persecutor
-perseu
-persev
-persever
-persev
-persia
-persian
-persist
-persist
-persist
-persist
-persist
-person
-persona
-personag
-personag
-person
-person
-person
-person
-person
-person
-person
-perspect
-perspect
-perspect
-perspicu
-persuad
-persuad
-persuad
-persuad
-persuas
-persuas
-pert
-pertain
-pertain
-pertain
-pertaunt
-pertin
-pertli
-perturb
-perturb
-perturb
-perturb
-peru
-perus
-perus
-perus
-perus
-pervers
-pervers
-pervers
-pervert
-pervert
-peseech
-pest
-pester
-pestifer
-pestil
-pestil
-pet
-petar
-peter
-petit
-petit
-petitionari
-petition
-petition
-petit
-peto
-petrarch
-petruchio
-petter
-petticoat
-petticoat
-petti
-pettish
-pettito
-petti
-peu
-pew
-pewter
-pewter
-phaethon
-phaeton
-phantasim
-phantasim
-phantasma
-pharamond
-pharaoh
-pharsalia
-pheasant
-pheazar
-phebe
-phebe
-pheebu
-pheez
-phibbu
-philadelpho
-philario
-philarmonu
-philemon
-philip
-philippan
-philipp
-philippi
-phillida
-philo
-philomel
-philomela
-philosoph
-philosoph
-philosoph
-philosophi
-philostr
-philotu
-phlegmat
-phoeb
-phoebu
-phoenicia
-phoenician
-phoenix
-phorbu
-photinu
-phrase
-phraseless
-phrase
-phrygia
-phrygian
-phrynia
-physic
-physic
-physician
-physician
-physic
-pia
-pibbl
-pibl
-picardi
-pick
-pickax
-pickax
-pickbon
-pick
-picker
-pick
-pickl
-picklock
-pickpurs
-pick
-pickt
-pickthank
-pictur
-pictur
-pictur
-pictur
-pid
-pie
-piec
-piec
-piec
-piec
-pi
-pied
-pier
-pierc
-pierc
-pierc
-pierc
-pierceth
-pierc
-pierci
-pier
-pi
-pieti
-pig
-pigeon
-pigeon
-pight
-pigmi
-pigrogromitu
-pike
-pike
-pil
-pilat
-pilat
-pilcher
-pile
-pile
-pilf
-pilfer
-pilgrim
-pilgrimag
-pilgrim
-pill
-pillag
-pillag
-pillar
-pillar
-pillicock
-pillori
-pillow
-pillow
-pill
-pilot
-pilot
-pimpernel
-pin
-pinch
-pinch
-pinch
-pinch
-pindaru
-pine
-pine
-pine
-pinfold
-pine
-pinion
-pink
-pinn
-pinnac
-pin
-pins
-pint
-pintpot
-pion
-pioneer
-pioner
-pioner
-piou
-pip
-pipe
-piper
-piper
-pipe
-pipe
-pippin
-pippin
-pirat
-pirat
-pisa
-pisanio
-pish
-pismir
-piss
-piss
-pistol
-pistol
-pit
-pitch
-pitch
-pitcher
-pitcher
-pitchi
-piteou
-piteous
-pitfal
-pith
-pithless
-pithi
-piti
-piti
-piti
-piti
-pitifulli
-pitiless
-pit
-pittanc
-pitti
-pittikin
-piti
-piti
-piu
-plac
-place
-place
-placentio
-place
-placeth
-placid
-place
-plack
-placket
-placket
-plagu
-plagu
-plagu
-plagu
-plagu
-plagui
-plain
-plainer
-plainest
-plain
-plain
-plainli
-plain
-plain
-plainsong
-plaint
-plaintiff
-plaintiff
-plaint
-planch
-planet
-planetari
-planet
-plank
-plant
-plantag
-plantagenet
-plantagenet
-plantain
-plantat
-plant
-planteth
-plant
-plash
-plashi
-plast
-plaster
-plaster
-plat
-plate
-plate
-plate
-platform
-platform
-plat
-plat
-plausibl
-plausiv
-plautu
-plai
-plai
-player
-player
-playeth
-playfellow
-playfellow
-playhous
-plai
-plai
-plea
-pleach
-pleach
-plead
-plead
-pleader
-pleader
-plead
-plead
-plea
-pleasanc
-pleasant
-pleasantli
-pleas
-pleas
-pleaser
-pleaser
-pleas
-pleasest
-pleaseth
-pleas
-pleasur
-pleasur
-plebeian
-plebeii
-pleb
-pledg
-pledg
-plein
-plenitud
-plenteou
-plenteous
-plenti
-plenti
-plentifulli
-plenti
-pless
-pless
-pless
-pliant
-pli
-pli
-plight
-plight
-plighter
-plod
-plod
-plodder
-plod
-plod
-plood
-ploodi
-plot
-plot
-plot
-plotter
-plough
-plough
-ploughman
-ploughmen
-plow
-plow
-pluck
-pluck
-plucker
-pluck
-pluck
-plue
-plum
-plume
-plume
-plume
-plummet
-plump
-plumpi
-plum
-plung
-plung
-plung
-plural
-plurisi
-plu
-pluto
-plutu
-ply
-po
-pocket
-pocket
-pocket
-pocki
-podi
-poem
-poesi
-poet
-poetic
-poetri
-poet
-poictier
-poinard
-poin
-point
-pointblank
-point
-point
-point
-poi
-pois
-pois
-poison
-poison
-poison
-poison
-poison
-poison
-poke
-poke
-pol
-polack
-polack
-poland
-pold
-pole
-poleax
-polecat
-polecat
-polemon
-pole
-poli
-polici
-polici
-polish
-polish
-polit
-politician
-politician
-politicli
-polixen
-poll
-pollut
-pollut
-poloniu
-poltroon
-polus
-polydamu
-polydor
-polyxena
-pomand
-pomegran
-pomewat
-pomfret
-pomgarnet
-pommel
-pomp
-pompeiu
-pompei
-pompion
-pompou
-pomp
-pond
-ponder
-ponder
-pond
-poniard
-poniard
-pont
-pontic
-pontif
-ponton
-pooh
-pool
-pool
-poop
-poor
-poorer
-poorest
-poorli
-pop
-pope
-popedom
-popiliu
-popingai
-popish
-popp
-poppi
-pop
-popular
-popular
-popul
-porch
-porch
-pore
-pore
-pork
-porn
-porpentin
-porridg
-porring
-port
-portabl
-portag
-portal
-portanc
-portculli
-portend
-portend
-portent
-portent
-portent
-porter
-porter
-portia
-portion
-portli
-portotartarossa
-portrait
-portraitur
-port
-portug
-pose
-posi
-posi
-posit
-posit
-posit
-poss
-possess
-possess
-possess
-possesseth
-possess
-possess
-possess
-possessor
-posset
-posset
-possibl
-possibl
-possibl
-possibl
-possit
-post
-post
-post
-posterior
-posterior
-poster
-postern
-postern
-poster
-posthors
-posthors
-posthumu
-post
-postmast
-post
-postscript
-postur
-postur
-posi
-pot
-potabl
-potat
-potato
-potato
-potch
-potenc
-potent
-potent
-potenti
-potent
-potent
-pothecari
-pother
-potion
-potion
-potpan
-pot
-potter
-pot
-pottl
-pouch
-poulter
-poultic
-poultnei
-pouncet
-pound
-pound
-pour
-pourest
-pour
-pourquoi
-pour
-pout
-poverti
-pow
-powd
-powder
-power
-power
-powerfulli
-powerless
-power
-pox
-poi
-poysam
-prabbl
-practic
-practic
-practic
-practic
-practic
-practic
-practi
-practis
-practis
-practis
-practis
-practis
-practis
-praeclarissimu
-praemunir
-praetor
-praetor
-prag
-pragu
-prain
-prain
-prai
-prais
-prais
-prais
-praisest
-praiseworthi
-prais
-pranc
-prank
-prank
-prat
-prate
-prate
-prater
-prate
-prattl
-prattler
-prattl
-prave
-prawl
-prawn
-prai
-prayer
-prayer
-prai
-prai
-pre
-preach
-preach
-preacher
-preach
-preach
-preachment
-pread
-preambul
-preced
-preced
-preced
-precept
-precepti
-precept
-precinct
-preciou
-precious
-precipic
-precipit
-precipit
-precis
-precis
-precis
-precisian
-precor
-precurs
-precursor
-predeceas
-predecessor
-predecessor
-predestin
-predica
-predict
-predict
-predict
-predomin
-predomin
-predomin
-preech
-preemin
-prefac
-prefer
-prefer
-prefer
-preferr
-preferreth
-prefer
-prefer
-prefigur
-prefix
-prefix
-preform
-pregnanc
-pregnant
-pregnantli
-prejud
-prejudic
-prejudici
-prelat
-premedit
-premedit
-premis
-premis
-prenez
-prenomin
-prentic
-prentic
-preordin
-prepar
-prepar
-prepar
-prepar
-prepar
-preparedli
-prepar
-prepar
-prepost
-preposter
-preposter
-prerogatif
-prerog
-prerogativ
-presag
-presag
-presag
-presageth
-presag
-prescienc
-prescrib
-prescript
-prescript
-prescript
-prescript
-presenc
-presenc
-present
-present
-present
-present
-present
-presenteth
-present
-present
-present
-present
-preserv
-preserv
-preserv
-preserv
-preserv
-preserv
-preserv
-preserv
-presid
-press
-press
-presser
-press
-press
-pressur
-pressur
-prest
-prester
-presum
-presum
-presum
-presumpt
-presumptu
-presuppo
-pret
-pretenc
-pretenc
-pretend
-pretend
-pretend
-pretens
-pretext
-pretia
-prettier
-prettiest
-prettili
-pretti
-pretti
-prevail
-prevail
-prevaileth
-prevail
-prevail
-prevail
-prevent
-prevent
-prevent
-prevent
-prevent
-prei
-prey
-prei
-priam
-priami
-priamu
-pribbl
-price
-prick
-prick
-pricket
-prick
-prick
-pricksong
-pride
-pride
-pridg
-prie
-pri
-prief
-pri
-priest
-priesthood
-priest
-prig
-primal
-prime
-primer
-primero
-primest
-primit
-primo
-primogen
-primros
-primros
-primi
-princ
-princ
-princ
-princess
-princip
-princip
-princip
-principl
-principl
-princox
-pring
-print
-print
-print
-printless
-print
-prioress
-priori
-prioriti
-priori
-priscian
-prison
-prison
-prison
-prison
-prisonni
-prison
-pristin
-prith
-prithe
-privaci
-privat
-privat
-privat
-privilag
-privileg
-privileg
-privileg
-privileg
-privilegio
-privili
-priviti
-privi
-priz
-prize
-prize
-prizer
-prize
-prizest
-prize
-pro
-probabl
-probal
-probat
-proce
-proceed
-proceed
-proceed
-proceed
-proce
-process
-process
-proclaim
-proclaim
-proclaimeth
-proclaim
-proclam
-proclam
-proconsul
-procrastin
-procreant
-procreant
-procreat
-procru
-proculeiu
-procur
-procur
-procur
-procur
-procur
-procur
-prodig
-prodig
-prodig
-prodig
-prodigi
-prodigi
-prodigi
-prodigi
-proditor
-produc
-produc
-produc
-produc
-produc
-profac
-profan
-profan
-profan
-profan
-profan
-profan
-profan
-profan
-profess
-profess
-profess
-profess
-profess
-professor
-proffer
-proffer
-proffer
-proffer
-profici
-profit
-profit
-profit
-profit
-profit
-profitless
-profit
-profound
-profoundest
-profoundli
-progenitor
-progeni
-progn
-prognost
-prognost
-progress
-progress
-prohibit
-prohibit
-project
-project
-project
-prolixi
-prolix
-prologu
-prologu
-prolong
-prolong
-promethean
-prometheu
-promi
-promis
-promis
-promis
-promiseth
-promis
-promontori
-promot
-promot
-prompt
-prompt
-promptement
-prompter
-prompt
-prompt
-promptur
-promulg
-prone
-prononc
-prononcez
-pronoun
-pronounc
-pronounc
-pronounc
-pronounc
-pronoun
-proof
-proof
-prop
-propag
-propag
-propend
-propens
-proper
-proper
-properli
-properti
-properti
-properti
-propheci
-propheci
-prophesi
-prophesi
-prophesi
-prophesi
-prophet
-prophetess
-prophet
-prophet
-prophet
-propinqu
-propont
-proport
-proportion
-proport
-propo
-propos
-propos
-propos
-propos
-propos
-proposit
-proposit
-propound
-propp
-propr
-proprieti
-prop
-propugn
-prorogu
-prorogu
-proscript
-proscript
-prose
-prosecut
-prosecut
-proselyt
-proserpina
-prosp
-prospect
-prosper
-prosper
-prospero
-prosper
-prosper
-prosper
-prostitut
-prostrat
-protect
-protect
-protect
-protector
-protector
-protectorship
-protectress
-protect
-protest
-protest
-protest
-protest
-protest
-protest
-protest
-proteu
-protheu
-protract
-protract
-proud
-prouder
-proudest
-proudlier
-proudli
-proud
-prov
-provand
-prove
-prove
-provend
-proverb
-proverb
-prove
-proveth
-provid
-provid
-provid
-provid
-provid
-provid
-provid
-provinc
-provinc
-provinci
-prove
-provis
-proviso
-provoc
-provok
-provok
-provok
-provok
-provok
-provoketh
-provok
-provost
-prowess
-prudenc
-prudent
-prun
-prune
-prune
-prune
-pry
-pry
-psalm
-psalmist
-psalm
-psalteri
-ptolemi
-ptolemi
-public
-publican
-public
-publicli
-publicola
-publish
-publish
-publish
-publish
-publiu
-pucel
-puck
-pudder
-pud
-pud
-puddl
-puddl
-pudenc
-pueritia
-puff
-puf
-puff
-pug
-pui
-puissanc
-puissant
-puke
-puke
-pulcher
-pule
-pull
-puller
-pullet
-pull
-pull
-pulpit
-pulpit
-pulpit
-puls
-pulsidg
-pump
-pumpion
-pump
-pun
-punch
-punish
-punish
-punish
-punish
-punish
-punk
-punto
-puni
-pupil
-pupil
-puppet
-puppet
-puppi
-puppi
-pur
-purblind
-purcha
-purchas
-purchas
-purchas
-purchaseth
-purchas
-pure
-pure
-purer
-purest
-purg
-purgat
-purg
-purgatori
-purg
-purg
-purger
-purg
-purifi
-purifi
-puritan
-puriti
-purlieu
-purpl
-purpl
-purpl
-purport
-purpo
-purpos
-purpos
-purpos
-purpos
-purposeth
-purpos
-purr
-pur
-purs
-pursent
-purs
-pursu
-pursu
-pursu
-pursuer
-pursu
-pursuest
-pursueth
-pursu
-pursuit
-pursuiv
-pursuiv
-pursi
-puru
-purveyor
-push
-push
-pusillanim
-put
-putrefi
-putrifi
-put
-putter
-put
-puttock
-puzzel
-puzzl
-puzzl
-puzzl
-py
-pygmalion
-pygmi
-pygmi
-pyramid
-pyramid
-pyramid
-pyrami
-pyramis
-pyramu
-pyrenean
-pyrrhu
-pythagora
-qu
-quadrangl
-quae
-quaff
-quaf
-quagmir
-quail
-quail
-quail
-quaint
-quaintli
-quak
-quak
-quak
-qualif
-qualifi
-qualifi
-qualifi
-qualifi
-qualit
-qualiti
-qualiti
-qualm
-qualmish
-quam
-quand
-quando
-quantiti
-quantiti
-quar
-quarrel
-quarrel
-quarrel
-quarrel
-quarrel
-quarrel
-quarrelsom
-quarri
-quarri
-quart
-quarter
-quarter
-quarter
-quarter
-quart
-quasi
-quat
-quatch
-quai
-que
-quean
-quea
-queasi
-queasi
-queen
-queen
-quell
-queller
-quench
-quench
-quench
-quenchless
-quern
-quest
-questant
-question
-question
-question
-question
-questionless
-question
-questrist
-quest
-queubu
-qui
-quick
-quicken
-quicken
-quicker
-quicklier
-quickli
-quick
-quicksand
-quicksand
-quicksilverr
-quid
-quidditi
-quiddit
-quier
-quiet
-quieter
-quietli
-quiet
-quietu
-quill
-quillet
-quill
-quilt
-quinapalu
-quinc
-quinc
-quintain
-quintess
-quintu
-quip
-quip
-quir
-quir
-quirk
-quirk
-qui
-quit
-quit
-quit
-quittanc
-quit
-quit
-quiver
-quiver
-quiver
-quo
-quod
-quoif
-quoint
-quoit
-quoit
-quondam
-quoniam
-quot
-quot
-quot
-quoth
-quotidian
-r
-rabbit
-rabbl
-rabblement
-race
-rack
-racker
-racket
-racket
-rack
-rack
-radianc
-radiant
-radish
-rafe
-raft
-rag
-rage
-rage
-rageth
-ragg
-rag
-ragged
-rage
-ragozin
-rag
-rah
-rail
-rail
-railer
-railest
-raileth
-rail
-rail
-raiment
-rain
-rainbow
-raineth
-rain
-rainold
-rain
-raini
-rai
-rais
-rais
-rais
-rais
-raisin
-rak
-rake
-raker
-rake
-ral
-rald
-ralph
-ram
-rambur
-ramm
-rampallian
-rampant
-ramp
-rampir
-ramp
-ram
-ramsei
-ramston
-ran
-ranc
-rancor
-rancor
-rancour
-random
-rang
-rang
-rang
-ranger
-rang
-rang
-rank
-ranker
-rankest
-rank
-rankl
-rankli
-rank
-rank
-ransack
-ransack
-ransom
-ransom
-ransom
-ransomless
-ransom
-rant
-rant
-rap
-rape
-rape
-rapier
-rapier
-rapin
-rap
-rapt
-raptur
-raptur
-rar
-rare
-rare
-rare
-rarer
-rarest
-rariti
-rariti
-rascal
-rascalliest
-rascal
-rascal
-rase
-rash
-rasher
-rashli
-rash
-rat
-ratcatch
-ratcliff
-rate
-rate
-rate
-rate
-rather
-ratherest
-ratifi
-ratifi
-ratifi
-rate
-ration
-ratolorum
-rat
-ratsban
-rattl
-rattl
-rattl
-ratur
-raught
-rav
-rave
-ravel
-raven
-raven
-raven
-raven
-ravenspurgh
-rave
-ravin
-rave
-ravish
-ravish
-ravish
-ravish
-ravish
-raw
-rawer
-rawli
-raw
-rai
-rai
-rai
-raz
-raze
-raze
-raze
-razeth
-raze
-razor
-razor
-razor
-razur
-re
-reach
-reach
-reacheth
-reach
-read
-reader
-readiest
-readili
-readi
-read
-readin
-read
-readi
-real
-realli
-realm
-realm
-reap
-reaper
-reap
-reap
-rear
-rear
-rearward
-reason
-reason
-reason
-reason
-reason
-reasonless
-reason
-reav
-rebat
-rebato
-rebeck
-rebel
-rebel
-rebel
-rebellion
-rebelli
-rebel
-rebound
-rebuk
-rebuk
-rebuk
-rebuk
-rebuk
-rebu
-recal
-recant
-recant
-recant
-recant
-receipt
-receipt
-receiv
-receiv
-receiv
-receiv
-receiv
-receivest
-receiveth
-receiv
-receptacl
-rechat
-reciproc
-reciproc
-recit
-recit
-reciterai
-reck
-reck
-reckless
-reckon
-reckon
-reckon
-reckon
-reck
-reclaim
-reclaim
-reclus
-recogniz
-recogniz
-recoil
-recoil
-recollect
-recomfort
-recomfortur
-recommend
-recommend
-recommend
-recompen
-recompens
-reconcil
-reconcil
-reconcil
-reconcil
-reconcil
-reconcil
-reconcili
-record
-record
-record
-record
-record
-record
-recount
-recount
-recount
-recount
-recount
-recours
-recov
-recov
-recover
-recov
-recoveri
-recov
-recoveri
-recreant
-recreant
-recreat
-recreat
-rectifi
-rector
-rectorship
-recur
-recur
-red
-redbreast
-redder
-reddest
-rede
-redeem
-redeem
-redeem
-redeem
-redeem
-redeliv
-redempt
-redim
-red
-redoubl
-redoubt
-redound
-redress
-redress
-redress
-reduc
-reechi
-reed
-reed
-reek
-reek
-reek
-reeki
-reel
-reeleth
-reel
-reel
-refel
-refer
-refer
-referr
-refer
-refigur
-refin
-refin
-reflect
-reflect
-reflect
-reflex
-reform
-reform
-reform
-refractori
-refrain
-refresh
-refresh
-reft
-reft
-refug
-refu
-refus
-refus
-refus
-refusest
-refus
-reg
-regal
-regalia
-regan
-regard
-regard
-regard
-regardfulli
-regard
-regard
-regener
-regent
-regentship
-regia
-regiment
-regiment
-regina
-region
-region
-regist
-regist
-regist
-regreet
-regreet
-regress
-reguerdon
-regular
-rehear
-rehears
-rehears
-reign
-reign
-reignier
-reign
-reign
-rein
-reinforc
-reinforc
-reinforc
-rein
-reiter
-reject
-reject
-rejoic
-rejoic
-rejoic
-rejoiceth
-rejoic
-rejoicingli
-rejoindur
-rejourn
-rel
-relaps
-relat
-relat
-relat
-relat
-rel
-relea
-releas
-releas
-releas
-relent
-relent
-relent
-relianc
-relic
-relief
-reliev
-reliev
-reliev
-reliev
-reliev
-religion
-religion
-religi
-religi
-relinquish
-reliqu
-reliquit
-relish
-relum
-reli
-reli
-remain
-remaind
-remaind
-remain
-remaineth
-remain
-remain
-remark
-remark
-remedi
-remedi
-remedi
-remedi
-rememb
-rememb
-rememb
-rememb
-remembr
-remembranc
-remembr
-remercimen
-remiss
-remiss
-remiss
-remit
-remnant
-remnant
-remonstr
-remors
-remors
-remorseless
-remot
-remot
-remov
-remov
-remov
-removed
-remov
-remov
-remov
-remuner
-remuner
-renc
-rend
-render
-render
-render
-rendezv
-renegado
-reneg
-reneg
-renew
-renew
-renewest
-renounc
-renounc
-renounc
-renowm
-renown
-renown
-rent
-rent
-repaid
-repair
-repair
-repair
-repair
-repass
-repast
-repastur
-repai
-repai
-repai
-repeal
-repeal
-repeal
-repeat
-repeat
-repeat
-repeat
-repel
-repent
-repent
-repent
-repent
-repent
-repent
-repetit
-repetit
-repin
-repin
-repin
-replant
-replenish
-replenish
-replet
-replic
-repli
-repli
-repliest
-repli
-repli
-report
-report
-report
-reportest
-report
-reportingli
-report
-repos
-repos
-reposeth
-repos
-repossess
-reprehend
-reprehend
-reprehend
-repres
-repres
-repriev
-repriev
-repris
-reproach
-reproach
-reproach
-reproachfulli
-reprob
-reprob
-reproof
-reprov
-reprov
-reprov
-reprov
-reprov
-repugn
-repugn
-repugn
-repuls
-repuls
-repurcha
-repur
-reput
-reput
-reput
-reputeless
-reput
-reput
-request
-request
-request
-request
-requiem
-requir
-requir
-requir
-requir
-requireth
-requir
-requisit
-requisit
-requit
-requit
-requit
-requit
-requit
-rer
-rere
-rer
-rescu
-rescu
-rescu
-rescu
-rescu
-resembl
-resembl
-resembl
-resembl
-resembleth
-resembl
-reserv
-reserv
-reserv
-reserv
-reserv
-resid
-resid
-resid
-resid
-resid
-residu
-resign
-resign
-resist
-resist
-resist
-resist
-resist
-resolut
-resolut
-resolut
-resolut
-resolv
-resolv
-resolv
-resolvedli
-resolv
-resolveth
-resort
-resort
-resound
-resound
-respeak
-respect
-respect
-respect
-respect
-respect
-respect
-respic
-respit
-respit
-respons
-respos
-ress
-rest
-rest
-resteth
-rest
-rest
-restitut
-restless
-restor
-restor
-restor
-restor
-restor
-restor
-restor
-restrain
-restrain
-restrain
-restrain
-restraint
-rest
-resti
-resum
-resum
-resum
-resurrect
-retail
-retail
-retain
-retain
-retain
-retel
-retent
-retent
-retinu
-retir
-retir
-retir
-retir
-retir
-retir
-retold
-retort
-retort
-retourn
-retract
-retreat
-retrograd
-ret
-return
-return
-returnest
-returneth
-return
-return
-revania
-reveal
-reveal
-revel
-revel
-revel
-revel
-revel
-revel
-revelri
-revel
-reveng
-reveng
-reveng
-reveng
-reveng
-reveng
-reveng
-reveng
-reveng
-revengingli
-revenu
-revenu
-reverb
-reverber
-reverb
-reverenc
-rever
-reverend
-rever
-rever
-rever
-revers
-revers
-revert
-review
-reviewest
-revil
-revil
-revisit
-reviv
-reviv
-reviv
-reviv
-revok
-revok
-revok
-revolt
-revolt
-revolt
-revolt
-revolut
-revolut
-revolv
-revolv
-reward
-reward
-reward
-reward
-reward
-reword
-reword
-rex
-rei
-reynaldo
-rford
-rful
-rfull
-rhapsodi
-rheim
-rhenish
-rhesu
-rhetor
-rheum
-rheumat
-rheum
-rheumi
-rhinocero
-rhode
-rhodop
-rhubarb
-rhym
-rhyme
-rhymer
-rhyme
-rhyme
-rialto
-rib
-ribald
-riband
-riband
-ribaudr
-ribb
-rib
-ribbon
-ribbon
-rib
-rice
-rich
-richard
-richer
-rich
-richest
-richli
-richmond
-richmond
-rid
-riddanc
-ridden
-riddl
-riddl
-riddl
-ride
-rider
-rider
-ride
-ridest
-rideth
-ridg
-ridg
-ridicul
-ride
-rid
-rien
-ri
-rifl
-rift
-rift
-rig
-rigg
-riggish
-right
-righteou
-righteous
-right
-rightfulli
-rightli
-right
-rigol
-rigor
-rigor
-rigour
-ril
-rim
-rin
-rinaldo
-rind
-ring
-ring
-ringlead
-ringlet
-ring
-ringwood
-riot
-rioter
-riot
-riotou
-riot
-rip
-ripe
-ripe
-ripen
-ripen
-ripe
-ripen
-ripen
-riper
-ripest
-ripe
-ripp
-rip
-rise
-risen
-rise
-riseth
-rish
-rise
-rite
-rite
-rivag
-rival
-rival
-rival
-rival
-rive
-rive
-rivel
-river
-river
-rivet
-rivet
-rivet
-rivo
-rj
-rless
-road
-road
-roam
-roam
-roan
-roar
-roar
-roarer
-roar
-roar
-roast
-roast
-rob
-roba
-roba
-robb
-rob
-robber
-robber
-robberi
-rob
-robe
-robe
-robert
-robe
-robin
-rob
-robusti
-rochest
-rochford
-rock
-rock
-rocki
-rod
-rode
-roderigo
-rod
-roe
-roe
-roger
-rogero
-rogu
-rogueri
-rogu
-roguish
-roi
-roist
-roll
-roll
-roll
-roll
-rom
-romag
-roman
-romano
-romano
-roman
-rome
-romeo
-romish
-rondur
-ronyon
-rood
-roof
-roof
-rook
-rook
-rooki
-room
-room
-root
-root
-rootedli
-rooteth
-root
-root
-rope
-roperi
-rope
-rope
-ro
-rosalind
-rosalinda
-rosalind
-rosalin
-rosciu
-rose
-rose
-rosemari
-rosencrantz
-rose
-ross
-rosi
-rot
-rote
-rote
-rother
-rotherham
-rot
-rot
-rotten
-rotten
-rot
-rotund
-rouen
-rough
-rougher
-roughest
-roughli
-rough
-round
-round
-roundel
-rounder
-roundest
-round
-roundli
-round
-roundur
-rou
-rous
-rous
-rousillon
-rousli
-roussi
-rout
-rout
-rout
-rove
-rover
-row
-rowel
-rowland
-rowland
-roi
-royal
-royal
-royal
-royalti
-royalti
-roynish
-rs
-rt
-rub
-rubb
-rub
-rubbish
-rubi
-rubiou
-rub
-rubi
-rud
-rudand
-rudder
-ruddi
-ruddock
-ruddi
-rude
-rude
-rude
-ruder
-rudesbi
-rudest
-rudiment
-rue
-ru
-ruff
-ruffian
-ruffian
-ruffl
-ruffl
-ruff
-rug
-rugbi
-rugemount
-rug
-ruin
-ruinat
-ruin
-ruin
-ruinou
-ruin
-rul
-rule
-rule
-ruler
-ruler
-rule
-rule
-rumbl
-ruminai
-ruminat
-rumin
-rumin
-rumin
-rumin
-rumor
-rumour
-rumour
-rumour
-rump
-run
-runag
-runag
-runawai
-runawai
-rung
-runn
-runner
-runner
-run
-run
-ruptur
-ruptur
-rural
-rush
-rush
-rush
-rushl
-rushi
-russet
-russia
-russian
-russian
-rust
-rust
-rustic
-rustic
-rustic
-rustl
-rustl
-rust
-rusti
-rut
-ruth
-ruth
-ruthless
-rutland
-ruttish
-ry
-rye
-ryth
-s
-sa
-saba
-sabbath
-sabl
-sabl
-sack
-sackbut
-sackcloth
-sack
-sackerson
-sack
-sacrament
-sacr
-sacrif
-sacrific
-sacrific
-sacrific
-sacrifici
-sacrif
-sacrilegi
-sacr
-sad
-sadder
-saddest
-saddl
-saddler
-saddl
-sadli
-sad
-saf
-safe
-safeguard
-safe
-safer
-safest
-safeti
-safeti
-saffron
-sag
-sage
-sagittari
-said
-saidst
-sail
-sail
-sailmak
-sailor
-sailor
-sail
-sain
-saint
-saint
-saintlik
-saint
-saith
-sake
-sake
-sala
-salad
-salamand
-salari
-sale
-salerio
-salicam
-saliqu
-salisburi
-sall
-sallet
-sallet
-salli
-sallow
-salli
-salmon
-salmon
-salt
-salter
-saltier
-salt
-saltpetr
-salut
-salut
-salut
-salut
-salut
-saluteth
-salv
-salvat
-salv
-salv
-same
-samingo
-samp
-sampir
-sampl
-sampler
-sampson
-samson
-samson
-sancta
-sanctifi
-sanctifi
-sanctifi
-sanctimoni
-sanctimoni
-sanctimoni
-sanctiti
-sanctiti
-sanctuar
-sanctuari
-sand
-sandal
-sandbag
-sand
-sand
-sandi
-sandi
-sang
-sanguin
-sangui
-saniti
-san
-santrail
-sap
-sapient
-sapit
-sapless
-sapl
-sapphir
-sapphir
-saracen
-sarcenet
-sard
-sardian
-sardinia
-sardi
-sarum
-sat
-satan
-satchel
-sate
-sate
-satiat
-satieti
-satin
-satir
-satir
-sati
-satisfact
-satisfi
-satisfi
-satisfi
-satisfi
-saturdai
-saturdai
-saturn
-saturnin
-saturninu
-satyr
-satyr
-sauc
-sauc
-sauc
-saucer
-sauc
-saucili
-sauci
-sauci
-sauf
-saunder
-sav
-savag
-savag
-savag
-savageri
-savag
-save
-save
-save
-save
-saviour
-savori
-savour
-savour
-savour
-savouri
-savoi
-saw
-saw
-sawest
-sawn
-sawpit
-saw
-sawyer
-saxon
-saxoni
-saxton
-sai
-sayest
-sai
-sai
-sai
-sayst
-sblood
-sc
-scab
-scabbard
-scab
-scaffold
-scaffoldag
-scal
-scald
-scald
-scald
-scale
-scale
-scale
-scale
-scall
-scalp
-scalp
-scali
-scambl
-scambl
-scamel
-scan
-scandal
-scandaliz
-scandal
-scandi
-scann
-scant
-scant
-scanter
-scant
-scantl
-scant
-scap
-scape
-scape
-scape
-scapeth
-scar
-scarc
-scarc
-scarciti
-scare
-scarecrow
-scarecrow
-scarf
-scarf
-scarf
-scare
-scarlet
-scarr
-scarr
-scar
-scaru
-scath
-scath
-scath
-scatt
-scatter
-scatter
-scatter
-scatter
-scelera
-scelerisqu
-scene
-scene
-scent
-scent
-scept
-scepter
-sceptr
-sceptr
-sceptr
-schedul
-schedul
-scholar
-scholarli
-scholar
-school
-schoolboi
-schoolboi
-schoolfellow
-school
-schoolmast
-schoolmast
-school
-sciatica
-sciatica
-scienc
-scienc
-scimitar
-scion
-scion
-scissor
-scoff
-scoffer
-scof
-scoff
-scoggin
-scold
-scold
-scold
-sconc
-scone
-scope
-scope
-scorch
-scorch
-score
-score
-score
-score
-scorn
-scorn
-scorn
-scornfulli
-scorn
-scorn
-scorpion
-scorpion
-scot
-scotch
-scotch
-scotland
-scot
-scottish
-scoundrel
-scour
-scour
-scourg
-scourg
-scour
-scout
-scout
-scowl
-scrap
-scrape
-scrape
-scrap
-scratch
-scratch
-scratch
-scream
-scream
-screech
-screech
-screen
-screen
-screw
-screw
-scribbl
-scribbl
-scribe
-scribe
-scrimer
-scrip
-scrippag
-scriptur
-scriptur
-scriven
-scroll
-scroll
-scroop
-scrowl
-scroyl
-scrub
-scrupl
-scrupl
-scrupul
-scuffl
-scuffl
-scullion
-scull
-scum
-scurril
-scurril
-scurril
-scurvi
-scuse
-scut
-scutcheon
-scutcheon
-scylla
-scyth
-scyth
-scythia
-scythian
-sdeath
-se
-sea
-seacoal
-seafar
-seal
-seal
-seal
-seal
-seam
-seamen
-seami
-seaport
-sear
-searc
-search
-searcher
-search
-searcheth
-search
-sear
-sea
-seasick
-seasid
-season
-season
-season
-seat
-seat
-seat
-sebastian
-second
-secondarili
-secondari
-second
-second
-secreci
-secret
-secretari
-secretari
-secretli
-secret
-sect
-sectari
-sect
-secundo
-secur
-secur
-secur
-secur
-sedg
-sedg
-sedg
-sedgi
-sedit
-sediti
-seduc
-seduc
-seduc
-seduc
-seduc
-see
-seed
-seed
-seed
-seed
-seedsman
-seein
-see
-seek
-seek
-seek
-seel
-seel
-seeli
-seem
-seem
-seemer
-seemest
-seemeth
-seem
-seemingli
-seemli
-seem
-seen
-seer
-see
-sees
-seest
-seeth
-seeth
-seeth
-seet
-segreg
-seigneur
-seigneur
-seiz
-seiz
-seiz
-seiz
-seizeth
-seiz
-seizur
-seld
-seldom
-select
-seleucu
-self
-selfsam
-sell
-seller
-sell
-sell
-selv
-semblabl
-semblabl
-semblanc
-semblanc
-sembl
-semi
-semicircl
-semirami
-semper
-semproniu
-senat
-senat
-senat
-send
-sender
-sendeth
-send
-send
-seneca
-senior
-seniori
-seni
-sennet
-senoi
-sens
-senseless
-sens
-sensibl
-sensibl
-sensual
-sensual
-sent
-sentenc
-sentenc
-sentenc
-sententi
-sentinel
-sentinel
-separ
-separ
-separ
-separ
-separ
-septentrion
-sepulchr
-sepulchr
-sepulchr
-sequel
-sequenc
-sequent
-sequest
-sequest
-sequestr
-sere
-sereni
-serg
-sergeant
-seriou
-serious
-sermon
-sermon
-serpent
-serpentin
-serpent
-serpigo
-serv
-servant
-servant
-servant
-serv
-serv
-server
-serv
-serveth
-servic
-servic
-servic
-servil
-servil
-serviliu
-serv
-servingman
-servingmen
-serviteur
-servitor
-servitor
-servitud
-sessa
-session
-session
-sesto
-set
-setebo
-set
-setter
-set
-settl
-settl
-settlest
-settl
-sev
-seven
-sevenfold
-sevennight
-seventeen
-seventh
-seventi
-sever
-sever
-sever
-sever
-sever
-sever
-sever
-severest
-sever
-sever
-severn
-sever
-sew
-seward
-sewer
-sew
-sex
-sex
-sexton
-sextu
-seymour
-seyton
-sfoot
-sh
-shackl
-shackl
-shade
-shade
-shadow
-shadow
-shadow
-shadow
-shadowi
-shadi
-shafalu
-shaft
-shaft
-shag
-shak
-shake
-shake
-shaken
-shake
-shake
-shale
-shall
-shalleng
-shallow
-shallowest
-shallowli
-shallow
-shalt
-sham
-shambl
-shame
-shame
-shame
-shamefulli
-shameless
-shame
-shamest
-shame
-shank
-shank
-shap
-shape
-shape
-shapeless
-shapen
-shape
-shape
-shar
-shard
-shard
-shard
-share
-share
-sharer
-share
-share
-shark
-sharp
-sharpen
-sharpen
-sharpen
-sharper
-sharpest
-sharpli
-sharp
-sharp
-shatter
-shav
-shave
-shaven
-shaw
-she
-sheaf
-sheal
-shear
-shearer
-shear
-shearman
-shear
-sheath
-sheath
-sheath
-sheath
-sheath
-sheav
-sheav
-shed
-shed
-shed
-sheen
-sheep
-sheepcot
-sheepcot
-sheep
-sheepskin
-sheer
-sheet
-sheet
-sheet
-sheffield
-shelf
-shell
-shell
-shelt
-shelter
-shelter
-shelv
-shelv
-shelvi
-shent
-shepherd
-shepherd
-shepherdess
-shepherdess
-shepherd
-sher
-sheriff
-sherri
-she
-sheweth
-shield
-shield
-shield
-shift
-shift
-shift
-shift
-shill
-shill
-shin
-shine
-shine
-shineth
-shine
-shin
-shini
-ship
-shipboard
-shipman
-shipmast
-shipmen
-shipp
-ship
-ship
-ship
-shipt
-shipwreck
-shipwreck
-shipwright
-shipwright
-shire
-shirlei
-shirt
-shirt
-shive
-shiver
-shiver
-shiver
-shoal
-shoal
-shock
-shock
-shod
-shoe
-shoe
-shoemak
-shoe
-shog
-shone
-shook
-shoon
-shoot
-shooter
-shooti
-shoot
-shoot
-shop
-shop
-shore
-shore
-shorn
-short
-shortcak
-shorten
-shorten
-shorten
-shorter
-shortli
-short
-shot
-shotten
-shough
-should
-shoulder
-shoulder
-shoulder
-shouldst
-shout
-shout
-shout
-shout
-shov
-shove
-shovel
-shovel
-show
-show
-shower
-shower
-showest
-show
-shown
-show
-shred
-shrew
-shrewd
-shrewdli
-shrewd
-shrewish
-shrewishli
-shrewish
-shrew
-shrewsburi
-shriek
-shriek
-shriek
-shriev
-shrift
-shrill
-shriller
-shrill
-shrilli
-shrimp
-shrine
-shrink
-shrink
-shrink
-shriv
-shrive
-shriver
-shrive
-shrive
-shroud
-shroud
-shroud
-shroud
-shrove
-shrow
-shrow
-shrub
-shrub
-shrug
-shrug
-shrunk
-shudd
-shudder
-shuffl
-shuffl
-shuffl
-shuffl
-shun
-shunless
-shunn
-shun
-shun
-shun
-shut
-shut
-shuttl
-shy
-shylock
-si
-sibyl
-sibylla
-sibyl
-sicil
-sicilia
-sicilian
-siciliu
-sicil
-sicili
-siciniu
-sick
-sicken
-sicken
-sicker
-sickl
-sicklemen
-sickli
-sickli
-sickli
-sick
-sicl
-sicyon
-side
-side
-side
-sieg
-sieg
-sienna
-si
-siev
-sift
-sift
-sigeia
-sigh
-sigh
-sigh
-sigh
-sight
-sight
-sightless
-sightli
-sight
-sign
-signal
-signet
-signieur
-signific
-signific
-signifi
-signifi
-signifi
-signifi
-signior
-signiori
-signior
-signiori
-signor
-signori
-sign
-signum
-silenc
-silenc
-silenc
-silenc
-silent
-silent
-siliu
-silk
-silken
-silkman
-silk
-silliest
-silli
-sill
-silli
-silva
-silver
-silver
-silverli
-silvia
-silviu
-sima
-simil
-simil
-simoi
-simon
-simoni
-simp
-simpcox
-simpl
-simpl
-simpler
-simpl
-simplic
-simpli
-simular
-simul
-sin
-sinc
-sincer
-sincer
-sincer
-sinel
-sinew
-sinew
-sinew
-sinewi
-sin
-sinfulli
-sing
-sing
-sing
-singer
-sing
-singeth
-sing
-singl
-singl
-singl
-singli
-sing
-singular
-singularit
-singular
-singular
-singul
-sinist
-sink
-sink
-sink
-sinn
-sinner
-sinner
-sin
-sinon
-sin
-sip
-sip
-sir
-sire
-siren
-sirrah
-sir
-sist
-sister
-sisterhood
-sisterli
-sister
-sit
-sith
-sithenc
-sit
-sit
-situat
-situat
-situat
-siward
-six
-sixpenc
-sixpenc
-sixpenni
-sixteen
-sixth
-sixti
-siz
-size
-size
-sizzl
-skain
-skambl
-skein
-skelter
-ski
-skil
-skilfulli
-skill
-skilless
-skillet
-skill
-skill
-skim
-skimbl
-skin
-skinker
-skinni
-skin
-skip
-skipp
-skipper
-skip
-skirmish
-skirmish
-skirr
-skirt
-skirt
-skittish
-skulk
-skull
-skull
-sky
-skyei
-skyish
-slab
-slack
-slackli
-slack
-slain
-slake
-sland
-slander
-slander
-slander
-slander
-slander
-slander
-slander
-slash
-slaught
-slaughter
-slaughter
-slaughter
-slaughterman
-slaughtermen
-slaughter
-slaughter
-slave
-slaver
-slaveri
-slave
-slavish
-slai
-slayeth
-slai
-slai
-sleav
-sled
-sleek
-sleekli
-sleep
-sleeper
-sleeper
-sleepest
-sleep
-sleep
-sleepi
-sleev
-sleev
-sleid
-sleid
-sleight
-sleight
-slender
-slender
-slenderli
-slept
-slew
-slewest
-slice
-slid
-slide
-slide
-slide
-slight
-slight
-slightest
-slightli
-slight
-slight
-slili
-slime
-slimi
-sling
-slink
-slip
-slipp
-slipper
-slipper
-slipperi
-slip
-slish
-slit
-sliver
-slobb
-slomber
-slop
-slope
-slop
-sloth
-sloth
-slough
-slovenli
-slovenri
-slow
-slower
-slowli
-slow
-slubber
-slug
-sluggard
-sluggardiz
-sluggish
-sluic
-slumb
-slumber
-slumber
-slumberi
-slunk
-slut
-slut
-slutteri
-sluttish
-sluttish
-sly
-sly
-smack
-smack
-smack
-small
-smaller
-smallest
-small
-smalu
-smart
-smart
-smartli
-smatch
-smatter
-smear
-smell
-smell
-smell
-smelt
-smil
-smile
-smile
-smile
-smilest
-smilet
-smile
-smilingli
-smirch
-smirch
-smit
-smite
-smite
-smith
-smithfield
-smock
-smock
-smok
-smoke
-smoke
-smoke
-smoke
-smoki
-smooth
-smooth
-smooth
-smoothli
-smooth
-smooth
-smote
-smoth
-smother
-smother
-smother
-smug
-smulkin
-smutch
-snaffl
-snail
-snail
-snake
-snake
-snaki
-snap
-snapp
-snapper
-snar
-snare
-snare
-snarl
-snarleth
-snarl
-snatch
-snatcher
-snatch
-snatch
-sneak
-sneak
-sneap
-sneap
-sneck
-snip
-snipe
-snipt
-snore
-snore
-snore
-snort
-snout
-snow
-snowbal
-snow
-snowi
-snuff
-snuff
-snug
-so
-soak
-soak
-soak
-soar
-soar
-soar
-sob
-sob
-sober
-soberli
-sobrieti
-sob
-sociabl
-societi
-societi
-sock
-socrat
-sod
-sodden
-soe
-soever
-soft
-soften
-soften
-softer
-softest
-softli
-soft
-soil
-soil
-soilur
-soit
-sojourn
-sol
-sola
-solac
-solanio
-sold
-soldat
-solder
-soldest
-soldier
-soldier
-soldiership
-sole
-sole
-solem
-solemn
-solem
-solemn
-solemn
-solemniz
-solemn
-solemn
-solemnli
-sole
-solicit
-solicit
-solicit
-solicit
-solicit
-solicitor
-solicit
-solid
-solidar
-solid
-solinu
-solitari
-solomon
-solon
-solum
-solu
-solyman
-some
-somebodi
-someon
-somerset
-somervil
-someth
-sometim
-sometim
-somev
-somewhat
-somewher
-somewhith
-somm
-son
-sonanc
-song
-song
-sonnet
-sonnet
-sonnet
-son
-sont
-sonti
-soon
-sooner
-soonest
-sooth
-sooth
-soother
-sooth
-soothsai
-soothsay
-sooti
-sop
-sophist
-sophist
-sophi
-sop
-sorcer
-sorcer
-sorceress
-sorceri
-sorceri
-sore
-sorel
-sore
-sorer
-sore
-sorrier
-sorriest
-sorrow
-sorrow
-sorrowest
-sorrow
-sorrow
-sorrow
-sorri
-sort
-sortanc
-sort
-sort
-sort
-sossiu
-sot
-soto
-sot
-sottish
-soud
-sought
-soul
-sould
-soulless
-soul
-sound
-sound
-sounder
-soundest
-sound
-soundless
-soundli
-sound
-soundpost
-sound
-sour
-sourc
-sourc
-sourest
-sourli
-sour
-sou
-sous
-south
-southam
-southampton
-southerli
-southern
-southward
-southwark
-southwel
-souviendrai
-sov
-sovereign
-sovereignest
-sovereignli
-sovereignti
-sovereignvour
-sow
-sow
-sowl
-sowter
-space
-space
-spaciou
-spade
-spade
-spain
-spak
-spake
-spakest
-span
-spangl
-spangl
-spaniard
-spaniel
-spaniel
-spanish
-spann
-span
-spar
-spare
-spare
-spare
-sparingli
-spark
-sparkl
-sparkl
-sparkl
-spark
-sparrow
-sparrow
-sparta
-spartan
-spavin
-spavin
-spawn
-speak
-speaker
-speaker
-speakest
-speaketh
-speak
-speak
-spear
-speargrass
-spear
-special
-special
-special
-specialti
-specialti
-specifi
-specious
-spectacl
-spectacl
-spectacl
-spectat
-spectatorship
-specul
-specul
-specul
-sped
-speech
-speech
-speechless
-speed
-speed
-speedier
-speediest
-speedili
-speedi
-speed
-speed
-speedi
-speen
-spell
-spell
-spell
-spelt
-spencer
-spend
-spendest
-spend
-spend
-spendthrift
-spent
-sperato
-sperm
-spero
-sperr
-spher
-sphere
-sphere
-sphere
-spheric
-spheri
-sphinx
-spice
-spice
-spiceri
-spice
-spider
-spider
-spi
-spi
-spieth
-spightfulli
-spigot
-spill
-spill
-spill
-spilt
-spilth
-spin
-spinii
-spinner
-spinster
-spinster
-spire
-spirit
-spirit
-spiritless
-spirit
-spiritu
-spiritualti
-spirt
-spit
-spital
-spite
-spite
-spite
-spite
-spit
-spit
-spit
-splai
-spleen
-spleen
-spleen
-spleeni
-splendour
-splenit
-splinter
-splinter
-split
-split
-split
-split
-spoil
-spoil
-spok
-spoke
-spoken
-spoke
-spokesman
-spong
-spongi
-spoon
-spoon
-sport
-sport
-sport
-sportiv
-sport
-spot
-spotless
-spot
-spot
-spousal
-spous
-spout
-spout
-spout
-sprag
-sprang
-sprat
-sprawl
-sprai
-sprai
-spread
-spread
-spread
-spright
-spright
-sprightli
-sprig
-spring
-spring
-spring
-springeth
-springhalt
-spring
-spring
-springtim
-sprinkl
-sprinkl
-sprite
-sprite
-sprite
-sprite
-sprite
-sprout
-spruce
-sprung
-spun
-spur
-spurio
-spurn
-spurn
-spurr
-spurrer
-spur
-spur
-spy
-spy
-squabbl
-squadron
-squadron
-squand
-squar
-squar
-squarer
-squar
-squash
-squeak
-squeak
-squeal
-squeal
-squeez
-squeez
-squel
-squier
-squint
-squini
-squir
-squir
-squirrel
-st
-stab
-stabb
-stab
-stab
-stabl
-stabl
-stabl
-stablish
-stablish
-stab
-stack
-staff
-stafford
-stafford
-staffordshir
-stag
-stage
-stage
-stagger
-stagger
-stagger
-stag
-staid
-staider
-stain
-stain
-stain
-staineth
-stain
-stainless
-stain
-stair
-stair
-stake
-stake
-stale
-stale
-stalk
-stalk
-stalk
-stall
-stall
-stall
-stamford
-stammer
-stamp
-stamp
-stamp
-stanch
-stanchless
-stand
-standard
-standard
-stander
-stander
-standest
-standeth
-stand
-stand
-staniel
-stanlei
-stanz
-stanzo
-stanzo
-stapl
-stapl
-star
-stare
-stare
-stare
-stare
-stare
-stark
-starkli
-starlight
-starl
-starr
-starri
-star
-start
-start
-start
-startingli
-startl
-startl
-start
-starv
-starv
-starv
-starvelackei
-starvel
-starveth
-starv
-state
-stateli
-state
-state
-statesman
-statesmen
-statiliu
-station
-statist
-statist
-statu
-statu
-statur
-statur
-statut
-statut
-stave
-stave
-stai
-stai
-stayest
-stai
-stai
-stead
-stead
-steadfast
-steadier
-stead
-steal
-stealer
-stealer
-steal
-steal
-stealth
-stealthi
-steed
-steed
-steel
-steel
-steeli
-steep
-steep
-steepl
-steepl
-steep
-steepi
-steer
-steerag
-steer
-steer
-stell
-stem
-stem
-stench
-step
-stepdam
-stephano
-stephen
-stepmoth
-stepp
-step
-step
-steril
-steril
-sterl
-stern
-sternag
-sterner
-sternest
-stern
-steterat
-stew
-steward
-steward
-stewardship
-stew
-stew
-stick
-stick
-stickler
-stick
-stiff
-stiffen
-stiffli
-stifl
-stifl
-stifl
-stigmat
-stigmat
-stile
-still
-stiller
-stillest
-still
-stilli
-sting
-sting
-stingless
-sting
-stink
-stink
-stinkingli
-stink
-stint
-stint
-stint
-stir
-stirr
-stir
-stirrer
-stirrer
-stirreth
-stir
-stirrup
-stirrup
-stir
-stitcheri
-stitch
-stithi
-stithi
-stoccado
-stoccata
-stock
-stockfish
-stock
-stock
-stockish
-stock
-stog
-stog
-stoic
-stokesli
-stol
-stole
-stolen
-stolest
-stomach
-stomach
-stomach
-stomach
-ston
-stone
-stonecutt
-stone
-stonish
-stoni
-stood
-stool
-stool
-stoop
-stoop
-stoop
-stop
-stope
-stopp
-stop
-stop
-stop
-stor
-store
-storehous
-storehous
-store
-stori
-storm
-storm
-storm
-storm
-stormi
-stori
-stoup
-stoup
-stout
-stouter
-stoutli
-stout
-stover
-stow
-stowag
-stow
-strachi
-straggler
-straggl
-straight
-straightest
-straightwai
-strain
-strain
-strain
-strain
-strait
-strait
-straiter
-straitli
-strait
-strait
-strand
-strang
-strang
-strang
-stranger
-stranger
-strangest
-strangl
-strangl
-strangler
-strangl
-strangl
-strappado
-strap
-stratagem
-stratagem
-stratford
-strato
-straw
-strawberri
-strawberri
-straw
-strawi
-strai
-strai
-strai
-streak
-streak
-stream
-streamer
-stream
-stream
-strech
-street
-street
-strength
-strengthen
-strengthen
-strengthless
-strength
-stretch
-stretch
-stretch
-stretch
-strew
-strew
-strew
-strewment
-stricken
-strict
-stricter
-strictest
-strictli
-strictur
-stride
-stride
-stride
-strife
-strife
-strik
-strike
-striker
-strike
-strikest
-strike
-string
-stringless
-string
-strip
-stripe
-stripl
-stripl
-stripp
-strip
-striv
-strive
-strive
-strive
-strok
-stroke
-stroke
-strond
-strond
-strong
-stronger
-strongest
-strongli
-strook
-strosser
-strove
-strown
-stroi
-struck
-strucken
-struggl
-struggl
-struggl
-strumpet
-strumpet
-strumpet
-strung
-strut
-strut
-strut
-strut
-stubbl
-stubborn
-stubbornest
-stubbornli
-stubborn
-stuck
-stud
-student
-student
-studi
-studi
-studiou
-studious
-stud
-studi
-studi
-stuff
-stuf
-stuff
-stumbl
-stumbl
-stumblest
-stumbl
-stump
-stump
-stung
-stupefi
-stupid
-stupifi
-stuprum
-sturdi
-sty
-styga
-stygian
-styl
-style
-styx
-su
-sub
-subcontract
-subdu
-subdu
-subdu
-subduement
-subdu
-subdu
-subject
-subject
-subject
-subject
-submerg
-submiss
-submiss
-submit
-submit
-submit
-suborn
-suborn
-suborn
-subscrib
-subscrib
-subscrib
-subscrib
-subscript
-subsequ
-subsidi
-subsidi
-subsist
-subsist
-substanc
-substanc
-substanti
-substitut
-substitut
-substitut
-substitut
-subtil
-subtilli
-subtl
-subtleti
-subtleti
-subtli
-subtractor
-suburb
-subvers
-subvert
-succed
-succe
-succeed
-succeed
-succeed
-succe
-success
-successantli
-success
-success
-successfulli
-success
-success
-success
-successor
-successor
-succour
-succour
-such
-suck
-sucker
-sucker
-suck
-suckl
-suck
-sudden
-suddenli
-sue
-su
-suerli
-sue
-sueth
-suff
-suffer
-suffer
-suffer
-suffer
-suffer
-suffer
-suffic
-suffic
-suffic
-suffic
-sufficeth
-suffici
-suffici
-suffici
-suffic
-sufficit
-suffig
-suffoc
-suffoc
-suffoc
-suffolk
-suffrag
-suffrag
-sug
-sugar
-sugarsop
-suggest
-suggest
-suggest
-suggest
-suggest
-suggest
-sui
-suit
-suitabl
-suit
-suit
-suitor
-suitor
-suit
-suivez
-sullen
-sullen
-sulli
-sulli
-sulli
-sulph
-sulpher
-sulphur
-sulphur
-sultan
-sultri
-sum
-sumless
-summ
-summa
-summari
-summer
-summer
-summit
-summon
-summon
-summon
-sumpter
-sumptuou
-sumptuous
-sum
-sun
-sunbeam
-sunburn
-sunburnt
-sund
-sundai
-sundai
-sunder
-sunder
-sundri
-sung
-sunk
-sunken
-sunni
-sunris
-sun
-sunset
-sunshin
-sup
-super
-superfici
-superfici
-superflu
-superflu
-superflu
-superflux
-superior
-supern
-supernatur
-superprais
-superscript
-superscript
-superservic
-superstit
-superstiti
-superstiti
-supersubtl
-supervis
-supervisor
-supp
-supper
-supper
-suppertim
-sup
-supplant
-suppl
-suppler
-supplianc
-suppliant
-suppliant
-supplic
-supplic
-supplic
-suppli
-suppli
-suppli
-suppliest
-suppli
-supplyant
-suppli
-supplyment
-support
-support
-support
-support
-support
-support
-support
-supportor
-suppo
-suppos
-suppos
-suppos
-suppos
-supposest
-suppos
-supposit
-suppress
-suppress
-suppresseth
-supremaci
-suprem
-sup
-sur
-suranc
-surceas
-surd
-sure
-surecard
-sure
-surer
-surest
-sureti
-sureti
-surfeit
-surfeit
-surfeit
-surfeit
-surfeit
-surg
-surgeon
-surgeon
-surger
-surgeri
-surg
-surli
-surmi
-surmis
-surmis
-surmis
-surmount
-surmount
-surmount
-surnam
-surnam
-surnam
-surpasseth
-surpass
-surplic
-surplu
-surpri
-surpris
-surpris
-surrend
-surrei
-surrei
-survei
-surveyest
-survei
-surveyor
-surveyor
-survei
-surviv
-surviv
-survivor
-susan
-suspect
-suspect
-suspect
-suspect
-suspend
-suspens
-suspicion
-suspicion
-suspici
-suspir
-suspir
-sust
-sustain
-sustain
-sutler
-sutton
-suum
-swabber
-swaddl
-swag
-swagg
-swagger
-swagger
-swagger
-swagger
-swain
-swain
-swallow
-swallow
-swallow
-swallow
-swam
-swan
-swan
-sward
-sware
-swarm
-swarm
-swart
-swarth
-swarth
-swarthi
-swasher
-swash
-swath
-swath
-swathl
-swai
-swai
-swai
-swear
-swearer
-swearer
-swearest
-swear
-swear
-swear
-sweat
-sweaten
-sweat
-sweat
-sweati
-sweep
-sweeper
-sweep
-sweet
-sweeten
-sweeten
-sweeter
-sweetest
-sweetheart
-sweet
-sweetli
-sweetmeat
-sweet
-sweet
-swell
-swell
-swell
-swell
-swelter
-sweno
-swept
-swerv
-swerver
-swerv
-swift
-swifter
-swiftest
-swiftli
-swift
-swill
-swill
-swim
-swimmer
-swimmer
-swim
-swim
-swine
-swineherd
-swing
-swing
-swinish
-swinstead
-switch
-swit
-switzer
-swol
-swoll
-swoln
-swoon
-swoon
-swoon
-swoon
-swoop
-swoopstak
-swor
-sword
-sworder
-sword
-swore
-sworn
-swound
-swound
-swum
-swung
-sy
-sycamor
-sycorax
-sylla
-syllabl
-syllabl
-syllog
-symbol
-sympathis
-sympathiz
-sympath
-sympath
-sympathi
-synagogu
-synod
-synod
-syracus
-syracusian
-syracusian
-syria
-syrup
-t
-ta
-taber
-tabl
-tabl
-tabl
-tablet
-tabor
-tabor
-tabor
-tabourin
-taciturn
-tack
-tackl
-tackl
-tackl
-tackl
-tackl
-taddl
-tadpol
-taffeta
-taffeti
-tag
-tagrag
-tah
-tail
-tailor
-tailor
-tail
-taint
-taint
-taint
-taint
-taintur
-tak
-take
-taken
-taker
-take
-takest
-taketh
-take
-tal
-talbot
-talbotit
-talbot
-tale
-talent
-talent
-taleport
-tale
-talk
-talk
-talker
-talker
-talkest
-talk
-talk
-tall
-taller
-tallest
-talli
-tallow
-talli
-talon
-tam
-tambourin
-tame
-tame
-tame
-tame
-tamer
-tame
-tame
-tamora
-tamworth
-tan
-tang
-tangl
-tangl
-tank
-tanl
-tann
-tan
-tanner
-tanquam
-tanta
-tantaen
-tap
-tape
-taper
-taper
-tapestri
-tapestri
-taphous
-tapp
-tapster
-tapster
-tar
-tardi
-tardili
-tardi
-tardi
-tarentum
-targ
-targ
-target
-target
-tarpeian
-tarquin
-tarquin
-tarr
-tarr
-tarrianc
-tarri
-tarri
-tarri
-tarri
-tart
-tartar
-tartar
-tartli
-tart
-task
-tasker
-task
-task
-tassel
-tast
-tast
-tast
-tast
-tatt
-tatter
-tatter
-tatter
-tattl
-tattl
-tattl
-taught
-taunt
-taunt
-taunt
-tauntingli
-taunt
-tauru
-tavern
-tavern
-tavi
-tawdri
-tawni
-tax
-taxat
-taxat
-tax
-tax
-tc
-te
-teach
-teacher
-teacher
-teach
-teachest
-teacheth
-teach
-team
-tear
-tear
-tear
-tear
-tearsheet
-teat
-tediou
-tedious
-tedious
-teem
-teem
-teem
-teen
-teeth
-teipsum
-telamon
-telamoniu
-tell
-teller
-tell
-tell
-tellu
-temp
-temper
-temper
-temper
-temper
-temper
-temper
-tempest
-tempest
-tempestu
-templ
-templ
-tempor
-temporari
-temporiz
-tempor
-tempor
-temp
-tempt
-temptat
-temptat
-tempt
-tempter
-tempter
-tempteth
-tempt
-tempt
-ten
-tenabl
-tenant
-tenantiu
-tenantless
-tenant
-tench
-tend
-tendanc
-tend
-tender
-tender
-tenderli
-tender
-tender
-tend
-tend
-tenedo
-tenement
-tenement
-tenfold
-tenni
-tenour
-tenour
-ten
-tent
-tent
-tenth
-tenth
-tent
-tenur
-tenur
-tercel
-tereu
-term
-termag
-term
-termin
-termless
-term
-terra
-terrac
-terram
-terra
-terr
-terren
-terrestri
-terribl
-terribl
-territori
-territori
-terror
-terror
-tertian
-tertio
-test
-testament
-test
-tester
-testern
-testifi
-testimoni
-testimoni
-testimoni
-testi
-testril
-testi
-tetchi
-tether
-tetter
-tevil
-tewksburi
-text
-tgv
-th
-thae
-thame
-than
-thane
-thane
-thank
-thank
-thank
-thankfulli
-thank
-thank
-thank
-thankless
-thank
-thanksgiv
-thaso
-that
-thatch
-thaw
-thaw
-thaw
-the
-theatr
-theban
-thebe
-thee
-theft
-theft
-thein
-their
-their
-theis
-them
-theme
-theme
-themselv
-then
-thenc
-thenceforth
-theoric
-there
-thereabout
-thereabout
-thereaft
-thereat
-therebi
-therefor
-therein
-thereof
-thereon
-thereto
-thereunto
-thereupon
-therewith
-therewith
-thersit
-these
-theseu
-thessalian
-thessali
-theti
-thew
-thei
-thick
-thicken
-thicken
-thicker
-thickest
-thicket
-thickskin
-thief
-thieveri
-thiev
-thievish
-thigh
-thigh
-thimbl
-thimbl
-thin
-thine
-thing
-thing
-think
-thinkest
-think
-think
-think
-thinkst
-thinli
-third
-thirdli
-third
-thirst
-thirst
-thirst
-thirsti
-thirteen
-thirti
-thirtieth
-thirti
-thi
-thisbi
-thisn
-thistl
-thistl
-thither
-thitherward
-thoa
-thoma
-thorn
-thorn
-thorni
-thorough
-thoroughli
-those
-thou
-though
-thought
-thought
-thought
-thousand
-thousand
-thracian
-thraldom
-thrall
-thrall
-thrall
-thrash
-thrason
-thread
-threadbar
-threaden
-thread
-threat
-threaten
-threaten
-threaten
-threatest
-threat
-three
-threefold
-threepenc
-threepil
-three
-threescor
-thresher
-threshold
-threw
-thrice
-thrift
-thriftless
-thrift
-thrifti
-thrill
-thrill
-thrill
-thrive
-thrive
-thriver
-thrive
-thrive
-throat
-throat
-throb
-throb
-throca
-throe
-throe
-thromuldo
-thron
-throne
-throne
-throne
-throng
-throng
-throng
-throstl
-throttl
-through
-throughfar
-throughfar
-throughli
-throughout
-throw
-thrower
-throwest
-throw
-thrown
-throw
-thrum
-thrumm
-thrush
-thrust
-thrusteth
-thrust
-thrust
-thumb
-thumb
-thump
-thund
-thunder
-thunderbolt
-thunderbolt
-thunder
-thunder
-thunderston
-thunderstrok
-thurio
-thursdai
-thu
-thwack
-thwart
-thwart
-thwart
-thwart
-thy
-thyme
-thymu
-thyreu
-thyself
-ti
-tib
-tiber
-tiberio
-tibei
-tice
-tick
-tickl
-tickl
-tickl
-tickl
-tickl
-ticklish
-tiddl
-tide
-tide
-tide
-tidi
-tie
-ti
-ti
-tiff
-tiger
-tiger
-tight
-tightli
-tike
-til
-tile
-till
-tillag
-tilli
-tilt
-tilter
-tilth
-tilt
-tilt
-tiltyard
-tim
-timandra
-timber
-time
-timeless
-timeli
-time
-time
-timon
-timor
-timor
-timor
-tinct
-tinctur
-tinctur
-tinder
-tingl
-tinker
-tinker
-tinsel
-tini
-tip
-tipp
-tippl
-tip
-tipsi
-tipto
-tir
-tire
-tire
-tire
-tirest
-tire
-tirra
-tirrit
-ti
-tish
-tisick
-tissu
-titan
-titania
-tith
-tith
-tith
-titiniu
-titl
-titl
-titleless
-titl
-tittl
-tittl
-titular
-titu
-tn
-to
-toad
-toad
-toadstool
-toast
-toast
-toast
-toast
-toaz
-tobi
-tock
-tod
-todai
-todpol
-tod
-toe
-toe
-tofor
-toge
-toge
-togeth
-toil
-toil
-toil
-toil
-token
-token
-told
-toledo
-toler
-toll
-toll
-tom
-tomb
-tomb
-tomb
-tombless
-tomboi
-tomb
-tomorrow
-tomyri
-ton
-tong
-tongu
-tongu
-tongu
-tongueless
-tongu
-tonight
-too
-took
-tool
-tool
-tooth
-toothach
-toothpick
-toothpick
-top
-topa
-top
-topgal
-topless
-topmast
-topp
-top
-toppl
-toppl
-top
-topsail
-topsi
-torch
-torchbear
-torchbear
-torcher
-torch
-torchlight
-tore
-torment
-tormenta
-torment
-torment
-torment
-tormentor
-torment
-torn
-torrent
-tortiv
-tortois
-tortur
-tortur
-tortur
-tortur
-tortur
-tortur
-torturest
-tortur
-toryn
-toss
-toss
-tosseth
-toss
-tot
-total
-total
-tott
-totter
-totter
-tou
-touch
-touch
-touch
-toucheth
-touch
-touchston
-tough
-tougher
-tough
-tourain
-tournament
-tour
-tou
-tout
-touz
-tow
-toward
-towardli
-toward
-tower
-tower
-tower
-town
-town
-township
-townsman
-townsmen
-towton
-toi
-toi
-trace
-trace
-track
-tract
-tractabl
-trade
-trade
-trader
-trade
-tradesman
-tradesmen
-trade
-tradit
-tradit
-traduc
-traduc
-traduc
-traffic
-traffick
-traffic
-tragedian
-tragedian
-tragedi
-tragedi
-tragic
-tragic
-trail
-train
-train
-train
-train
-trait
-traitor
-traitorli
-traitor
-traitor
-traitor
-traitress
-traject
-trammel
-trampl
-trampl
-trampl
-tranc
-tranc
-tranio
-tranquil
-tranquil
-transcend
-transcend
-transfer
-transfigur
-transfix
-transform
-transform
-transform
-transform
-transgress
-transgress
-transgress
-transgress
-translat
-translat
-translat
-translat
-transmigr
-transmut
-transpar
-transport
-transport
-transport
-transport
-transport
-transpos
-transshap
-trap
-trapp
-trap
-trap
-trash
-travail
-travail
-travel
-travel
-travel
-travel
-travel
-travel
-travel
-travellest
-travel
-travel
-traver
-travers
-trai
-treacher
-treacher
-treacher
-treacheri
-tread
-tread
-tread
-treason
-treason
-treason
-treason
-treasur
-treasur
-treasur
-treasuri
-treasuri
-treat
-treati
-treatis
-treat
-treati
-trebl
-trebl
-trebl
-treboniu
-tree
-tree
-trembl
-trembl
-trembl
-tremblest
-trembl
-tremblingli
-tremor
-trempl
-trench
-trenchant
-trench
-trencher
-trencher
-trencherman
-trencher
-trench
-trench
-trent
-tre
-trespass
-trespass
-tressel
-tress
-trei
-trial
-trial
-trib
-tribe
-tribe
-tribul
-tribun
-tribun
-tribun
-tributari
-tributari
-tribut
-tribut
-trice
-trick
-trick
-trickl
-trick
-tricksi
-trident
-tri
-trier
-trifl
-trifl
-trifler
-trifl
-trifl
-trigon
-trill
-trim
-trimli
-trimm
-trim
-trim
-trim
-trinculo
-trinculo
-trinket
-trip
-tripartit
-tripe
-tripl
-triplex
-tripoli
-tripoli
-tripp
-trip
-trippingli
-trip
-trist
-triton
-triumph
-triumphant
-triumphantli
-triumpher
-triumpher
-triumph
-triumph
-triumvir
-triumvir
-triumvir
-triumviri
-trivial
-troat
-trod
-trodden
-troiant
-troien
-troilu
-troilus
-trojan
-trojan
-troll
-tromperi
-trompet
-troop
-troop
-troop
-trop
-trophi
-trophi
-tropic
-trot
-troth
-troth
-troth
-trot
-trot
-troubl
-troubl
-troubler
-troubl
-troublesom
-troublest
-troublou
-trough
-trout
-trout
-trovato
-trow
-trowel
-trowest
-troi
-troyan
-troyan
-truant
-truce
-truckl
-trudg
-true
-trueborn
-truepenni
-truer
-truest
-truie
-trull
-trull
-truli
-trump
-trumperi
-trumpet
-trumpet
-trumpet
-trumpet
-truncheon
-truncheon
-trundl
-trunk
-trunk
-trust
-trust
-truster
-truster
-trust
-trust
-trusti
-truth
-truth
-try
-ts
-tu
-tuae
-tub
-tubal
-tub
-tuck
-tucket
-tuesdai
-tuft
-tuft
-tug
-tugg
-tug
-tuition
-tullu
-tulli
-tumbl
-tumbl
-tumbler
-tumbl
-tumult
-tumultu
-tun
-tune
-tuneabl
-tune
-tuner
-tune
-tuni
-tun
-tup
-turban
-turban
-turbul
-turbul
-turd
-turf
-turfi
-turk
-turkei
-turkei
-turkish
-turk
-turlygod
-turmoil
-turmoil
-turn
-turnbul
-turncoat
-turncoat
-turn
-turneth
-turn
-turnip
-turn
-turph
-turpitud
-turquois
-turret
-turret
-turtl
-turtl
-turvi
-tuscan
-tush
-tut
-tutor
-tutor
-tutor
-tutto
-twain
-twang
-twangl
-twa
-twai
-tweak
-tween
-twelfth
-twelv
-twelvemonth
-twentieth
-twenti
-twere
-twice
-twig
-twiggen
-twig
-twilight
-twill
-twill
-twin
-twine
-twink
-twinkl
-twinkl
-twinkl
-twinn
-twin
-twire
-twist
-twist
-twit
-twit
-twit
-twixt
-two
-twofold
-twopenc
-twopenc
-two
-twould
-tyb
-tybalt
-tybalt
-tyburn
-ty
-tyke
-tymbria
-type
-type
-typhon
-tyrann
-tyrann
-tyrann
-tyrann
-tyranni
-tyrant
-tyrant
-tyrian
-tyrrel
-u
-ubiqu
-udder
-udg
-ud
-uglier
-ugliest
-ugli
-ulcer
-ulcer
-ulyss
-um
-umber
-umbra
-umbrag
-umfrevil
-umpir
-umpir
-un
-unabl
-unaccommod
-unaccompani
-unaccustom
-unach
-unacquaint
-unact
-unadvi
-unadvis
-unadvisedli
-unagre
-unanel
-unansw
-unappea
-unapprov
-unapt
-unapt
-unarm
-unarm
-unarm
-unassail
-unassail
-unattaint
-unattempt
-unattend
-unauspici
-unauthor
-unavoid
-unawar
-unback
-unbak
-unband
-unbar
-unbarb
-unbash
-unbat
-unbatt
-unbecom
-unbefit
-unbegot
-unbegotten
-unbeliev
-unbend
-unbent
-unbewail
-unbid
-unbidden
-unbind
-unbind
-unbit
-unbless
-unblest
-unbloodi
-unblown
-unbodi
-unbolt
-unbolt
-unbonnet
-unbookish
-unborn
-unbosom
-unbound
-unbound
-unbow
-unbow
-unbrac
-unbrac
-unbraid
-unbreath
-unbr
-unbreech
-unbridl
-unbrok
-unbrui
-unbruis
-unbuckl
-unbuckl
-unbuckl
-unbuild
-unburden
-unburden
-unburi
-unburnt
-unburthen
-unbutton
-unbutton
-uncap
-uncap
-uncas
-uncas
-uncaught
-uncertain
-uncertainti
-unchain
-unchang
-uncharg
-uncharg
-uncharit
-unchari
-unchast
-uncheck
-unchild
-uncivil
-unclaim
-unclasp
-uncl
-unclean
-uncleanli
-uncleanli
-unclean
-uncl
-unclew
-unclog
-uncoin
-uncolt
-uncomeli
-uncomfort
-uncompassion
-uncomprehens
-unconfin
-unconfirm
-unconfirm
-unconqu
-unconqu
-unconsid
-unconst
-unconstrain
-unconstrain
-uncontemn
-uncontrol
-uncorrect
-uncount
-uncoupl
-uncourt
-uncouth
-uncov
-uncov
-uncrop
-uncross
-uncrown
-unction
-unctuou
-uncuckold
-uncur
-uncurb
-uncurb
-uncurl
-uncurr
-uncurs
-undaunt
-undeaf
-undeck
-undeed
-under
-underbear
-underborn
-undercrest
-underfoot
-undergo
-undergo
-undergo
-undergon
-underground
-underhand
-underl
-undermin
-undermin
-underneath
-underpr
-underprop
-understand
-understandeth
-understand
-understand
-understand
-understood
-underta
-undertak
-undertak
-undertak
-undertak
-undertak
-undertak
-undertook
-undervalu
-undervalu
-underw
-underwrit
-underwrit
-undescri
-undeserv
-undeserv
-undeserv
-undeserv
-undetermin
-undid
-undint
-undiscern
-undiscov
-undishonour
-undispo
-undistinguish
-undistinguish
-undivid
-undivid
-undivulg
-undo
-undo
-undo
-undon
-undoubt
-undoubtedli
-undream
-undress
-undress
-undrown
-undut
-unduti
-un
-unear
-unearn
-unearthli
-uneasin
-uneasi
-uneath
-uneduc
-uneffectu
-unelect
-unequ
-uneven
-unexamin
-unexecut
-unexpect
-unexperienc
-unexperi
-unexpress
-unfair
-unfaith
-unfal
-unfam
-unfashion
-unfasten
-unfath
-unfath
-unf
-unfe
-unfeel
-unfeign
-unfeignedli
-unfellow
-unfelt
-unfenc
-unfili
-unfil
-unfinish
-unfirm
-unfit
-unfit
-unfix
-unfledg
-unfold
-unfold
-unfoldeth
-unfold
-unfold
-unfool
-unforc
-unforc
-unforfeit
-unfortifi
-unfortun
-unfought
-unfrequ
-unfriend
-unfurnish
-ungain
-ungal
-ungart
-ungart
-ungenitur
-ungentl
-ungentl
-ungent
-ungird
-ungodli
-ungor
-ungot
-ungotten
-ungovern
-ungraci
-ungrat
-ungrav
-ungrown
-unguard
-unguem
-unguid
-unhack
-unhair
-unhallow
-unhallow
-unhand
-unhandl
-unhandsom
-unhang
-unhappi
-unhappili
-unhappi
-unhappi
-unharden
-unharm
-unhatch
-unheard
-unheart
-unheed
-unheedfulli
-unheedi
-unhelp
-unhidden
-unholi
-unhop
-unhopefullest
-unhors
-unhospit
-unhou
-unhous
-unhurt
-unicorn
-unicorn
-unimprov
-uninhabit
-uninhabit
-unintellig
-union
-union
-unit
-unit
-uniti
-univers
-univers
-univers
-univers
-unjoint
-unjust
-unjustic
-unjustli
-unkennel
-unkept
-unkind
-unkindest
-unkindli
-unkind
-unk
-unkinglik
-unkiss
-unknit
-unknow
-unknown
-unlac
-unlaid
-unlaw
-unlawfulli
-unlearn
-unlearn
-unless
-unlesson
-unlett
-unlett
-unlick
-unlik
-unlik
-unlimit
-unlin
-unlink
-unload
-unload
-unload
-unload
-unlock
-unlock
-unlook
-unlook
-unloo
-unloos
-unlov
-unlov
-unluckili
-unlucki
-unmad
-unmak
-unmanli
-unmann
-unmann
-unmannerd
-unmannerli
-unmarri
-unmask
-unmask
-unmask
-unmask
-unmast
-unmatch
-unmatch
-unmatch
-unmeasur
-unmeet
-unmellow
-unmerci
-unmerit
-unmerit
-unmind
-unmindful
-unmingl
-unmitig
-unmitig
-unmix
-unmoan
-unmov
-unmov
-unmov
-unmuffl
-unmuffl
-unmus
-unmuzzl
-unmuzzl
-unnatur
-unnatur
-unnatur
-unnecessarili
-unnecessari
-unneighbourli
-unnerv
-unnobl
-unnot
-unnumb
-unnumb
-unow
-unpack
-unpaid
-unparagon
-unparallel
-unparti
-unpath
-unpav
-unpai
-unpeac
-unpeg
-unpeopl
-unpeopl
-unperfect
-unperfect
-unpick
-unpin
-unpink
-unpiti
-unpitifulli
-unplagu
-unplaus
-unplea
-unpleas
-unpleas
-unpolici
-unpolish
-unpolish
-unpollut
-unpossess
-unpossess
-unposs
-unpracti
-unpregn
-unpremedit
-unprepar
-unprepar
-unpress
-unprevail
-unprev
-unpriz
-unpriz
-unprofit
-unprofit
-unprop
-unproperli
-unproport
-unprovid
-unprovid
-unprovid
-unprovok
-unprun
-unprun
-unpublish
-unpurg
-unpurpo
-unqual
-unqueen
-unquest
-unquestion
-unquiet
-unquietli
-unquiet
-unrais
-unrak
-unread
-unreadi
-unreal
-unreason
-unreason
-unreclaim
-unreconcil
-unreconcili
-unrecount
-unrecur
-unregard
-unregist
-unrel
-unremov
-unremov
-unrepriev
-unresolv
-unrespect
-unrespect
-unrest
-unrestor
-unrestrain
-unreveng
-unreverend
-unrever
-unrev
-unreward
-unright
-unright
-unrip
-unripp
-unrival
-unrol
-unroof
-unroost
-unroot
-unrough
-unruli
-unsaf
-unsalut
-unsanctifi
-unsatisfi
-unsavouri
-unsai
-unscal
-unscann
-unscarr
-unschool
-unscorch
-unscour
-unscratch
-unseal
-unseam
-unsearch
-unseason
-unseason
-unseason
-unseason
-unsecond
-unsecret
-unseduc
-unse
-unseem
-unseemli
-unseen
-unseminar
-unsepar
-unservic
-unset
-unsettl
-unsettl
-unsev
-unsex
-unshak
-unshak
-unshaken
-unshap
-unshap
-unsheath
-unsheath
-unshorn
-unshout
-unshown
-unshrink
-unshrubb
-unshunn
-unshunn
-unsift
-unsightli
-unsinew
-unsist
-unskil
-unskilfulli
-unskil
-unslip
-unsmirch
-unsoil
-unsolicit
-unsort
-unsought
-unsound
-unsound
-unspeak
-unspeak
-unspeak
-unspher
-unspok
-unspoken
-unspot
-unsquar
-unstabl
-unstaid
-unstain
-unstain
-unstanch
-unstat
-unsteadfast
-unstoop
-unstring
-unstuff
-unsubstanti
-unsuit
-unsuit
-unsulli
-unsunn
-unsur
-unsur
-unsuspect
-unswai
-unsway
-unswai
-unswear
-unswept
-unsworn
-untaint
-untalk
-untangl
-untangl
-untast
-untaught
-untemp
-untend
-untent
-untent
-unthank
-unthank
-unthink
-unthought
-unthread
-unthrift
-unthrift
-unthrifti
-unti
-unti
-until
-untimb
-untim
-untir
-untir
-untir
-untitl
-unto
-untold
-untouch
-untoward
-untowardli
-untrad
-untrain
-untrain
-untread
-untreasur
-untri
-untrim
-untrod
-untrodden
-untroubl
-untru
-untruss
-untruth
-untruth
-untuck
-untun
-untun
-untun
-untutor
-untutor
-untwin
-unurg
-unu
-unus
-unusu
-unvalu
-unvanquish
-unvarnish
-unveil
-unveil
-unvener
-unvex
-unviol
-unvirtu
-unvisit
-unvulner
-unwar
-unwarili
-unwash
-unwatch
-unweari
-unw
-unwedg
-unweed
-unweigh
-unweigh
-unwelcom
-unwept
-unwhipp
-unwholesom
-unwieldi
-unwil
-unwillingli
-unwilling
-unwind
-unwip
-unwis
-unwis
-unwish
-unwish
-unwit
-unwittingli
-unwont
-unwoo
-unworthi
-unworthiest
-unworthili
-unworthi
-unworthi
-unwrung
-unyok
-unyok
-up
-upbraid
-upbraid
-upbraid
-upbraid
-uphoard
-uphold
-upholdeth
-uphold
-uphold
-uplift
-uplift
-upmost
-upon
-upper
-uprear
-uprear
-upright
-upright
-upright
-upris
-upris
-uproar
-uproar
-uprou
-upshoot
-upshot
-upsid
-upspr
-upstair
-upstart
-upturn
-upward
-upward
-urchin
-urchinfield
-urchin
-urg
-urg
-urg
-urgent
-urg
-urgest
-urg
-urin
-urin
-urin
-urn
-urn
-ur
-ursa
-urslei
-ursula
-urswick
-us
-usag
-usanc
-usanc
-us
-us
-us
-useless
-user
-us
-usest
-useth
-usher
-usher
-usher
-usher
-us
-usual
-usual
-usur
-usur
-usuri
-usur
-usurp
-usurp
-usurp
-usurp
-usurp
-usurp
-usurpingli
-usurp
-usuri
-ut
-utensil
-utensil
-util
-utmost
-utt
-utter
-utter
-utter
-uttereth
-utter
-utterli
-uttermost
-utter
-uy
-v
-va
-vacanc
-vacant
-vacat
-vade
-vagabond
-vagabond
-vagram
-vagrom
-vail
-vail
-vail
-vaillant
-vain
-vainer
-vainglori
-vainli
-vain
-vai
-valanc
-valanc
-vale
-valenc
-valentin
-valentinu
-valentio
-valeria
-valeriu
-vale
-valiant
-valiantli
-valiant
-valid
-vallant
-vallei
-vallei
-valli
-valor
-valor
-valor
-valour
-valu
-valuat
-valu
-valu
-valueless
-valu
-valu
-vane
-vanish
-vanish
-vanish
-vanishest
-vanish
-vaniti
-vaniti
-vanquish
-vanquish
-vanquish
-vanquishest
-vanquisheth
-vant
-vantag
-vantag
-vantbrac
-vapian
-vapor
-vapor
-vapour
-vapour
-vara
-variabl
-varianc
-variat
-variat
-vari
-variest
-varieti
-varld
-varlet
-varletri
-varlet
-varletto
-varnish
-varriu
-varro
-vari
-vari
-vassal
-vassalag
-vassal
-vast
-vastid
-vasti
-vat
-vater
-vaudemont
-vaughan
-vault
-vaultag
-vault
-vault
-vault
-vaulti
-vaumond
-vaunt
-vaunt
-vaunter
-vaunt
-vauntingli
-vaunt
-vauvado
-vaux
-vaward
-ve
-veal
-vede
-vehem
-vehem
-vehement
-vehor
-veil
-veil
-veil
-vein
-vein
-vell
-velur
-velutu
-velvet
-vendibl
-vener
-vener
-venetia
-venetian
-venetian
-venei
-veng
-vengeanc
-vengeanc
-veng
-veni
-venial
-venic
-venison
-venit
-venom
-venom
-venom
-vent
-ventag
-vent
-ventidiu
-ventricl
-vent
-ventur
-ventur
-ventur
-ventur
-ventur
-ventur
-venu
-venu
-venuto
-ver
-verb
-verba
-verbal
-verbatim
-verbos
-verdict
-verdun
-verdur
-vere
-verefor
-verg
-verg
-verger
-verg
-verier
-veriest
-verifi
-verifi
-verili
-verit
-verit
-veriti
-veriti
-vermilion
-vermin
-vernon
-verona
-veronesa
-versal
-vers
-vers
-vers
-vert
-veri
-vesper
-vessel
-vessel
-vestal
-vestment
-vestur
-vetch
-vetch
-veux
-vex
-vexat
-vexat
-vex
-vex
-vexest
-vexeth
-vex
-vi
-via
-vial
-vial
-viand
-viand
-vic
-vicar
-vice
-viceger
-vicentio
-viceroi
-viceroi
-vice
-vici
-viciou
-vicious
-vict
-victim
-victor
-victoress
-victori
-victori
-victor
-victori
-victual
-victual
-victual
-videlicet
-video
-vide
-videsn
-vidi
-vie
-vi
-vienna
-view
-viewest
-vieweth
-view
-viewless
-view
-vigil
-vigil
-vigil
-vigit
-vigour
-vii
-viii
-vile
-vile
-vile
-viler
-vilest
-vill
-villag
-villag
-villageri
-villag
-villain
-villaini
-villain
-villain
-villain
-villaini
-villani
-villan
-villani
-villiago
-villian
-villianda
-villian
-vinaigr
-vincentio
-vincer
-vindic
-vine
-vinegar
-vine
-vineyard
-vineyard
-vint
-vintner
-viol
-viola
-violat
-violat
-violat
-violat
-violat
-violenc
-violent
-violenta
-violenteth
-violent
-violet
-violet
-viper
-viper
-viper
-vir
-virgilia
-virgin
-virgin
-virginal
-virgin
-virginiu
-virgin
-virgo
-virtu
-virtu
-virtuou
-virtuous
-visag
-visag
-visag
-visard
-viscount
-visibl
-visibl
-vision
-vision
-visit
-visit
-visit
-visit
-visit
-visit
-visitor
-visitor
-visit
-visor
-vita
-vita
-vital
-vitement
-vitruvio
-vitx
-viva
-vivant
-vive
-vixen
-viz
-vizament
-vizard
-vizard
-vizard
-vizor
-vlout
-vocat
-vocativo
-vocatur
-voce
-voic
-voic
-voic
-void
-void
-void
-voke
-volabl
-volant
-volivorco
-vollei
-volquessen
-volsc
-volsc
-volscian
-volscian
-volt
-voltemand
-volubl
-volubl
-volum
-volum
-volumnia
-volumniu
-voluntari
-voluntari
-voluptu
-voluptu
-vomiss
-vomit
-vomit
-vor
-vore
-vortnight
-vot
-votari
-votarist
-votarist
-votari
-votr
-vouch
-voucher
-voucher
-vouch
-vouch
-vouchsaf
-vouchsaf
-vouchsaf
-vouchsaf
-vouchsaf
-voudrai
-vour
-vou
-voutsaf
-vow
-vow
-vowel
-vowel
-vow
-vow
-vox
-voyag
-voyag
-vraiment
-vulcan
-vulgar
-vulgarli
-vulgar
-vulgo
-vulner
-vultur
-vultur
-vurther
-w
-wad
-waddl
-wade
-wade
-wafer
-waft
-waftag
-waft
-waft
-wag
-wage
-wager
-wager
-wage
-wag
-waggish
-waggl
-waggon
-waggon
-wagon
-wagon
-wag
-wagtail
-wail
-wail
-wail
-wail
-wain
-wainrop
-wainscot
-waist
-wait
-wait
-waiter
-waiteth
-wait
-wait
-wak
-wake
-wake
-wakefield
-waken
-waken
-wake
-wakest
-wake
-wale
-walk
-walk
-walk
-walk
-wall
-wall
-wallet
-wallet
-wallon
-walloon
-wallow
-wall
-walnut
-walter
-wan
-wand
-wander
-wander
-wander
-wander
-wander
-wand
-wane
-wane
-wane
-wane
-wann
-want
-want
-wanteth
-want
-wanton
-wantonli
-wanton
-wanton
-want
-wappen
-war
-warbl
-warbl
-ward
-ward
-warden
-warder
-warder
-wardrob
-wardrop
-ward
-ware
-ware
-warili
-warkworth
-warlik
-warm
-warm
-warmer
-warm
-warm
-warmth
-warn
-warn
-warn
-warn
-warn
-warp
-warp
-warr
-warrant
-warrant
-warranteth
-warrantis
-warrant
-warrant
-warranti
-warren
-warren
-war
-warrior
-warrior
-war
-wart
-warwick
-warwickshir
-wari
-wa
-wash
-wash
-washer
-wash
-washford
-wash
-wasp
-waspish
-wasp
-wassail
-wassail
-wast
-wast
-wast
-wast
-waster
-wast
-wast
-wat
-watch
-watch
-watcher
-watch
-watch
-watch
-watch
-watchman
-watchmen
-watchword
-water
-waterdrop
-water
-waterfli
-waterford
-water
-waterish
-waterpot
-waterrug
-water
-waterton
-wateri
-wav
-wave
-wave
-waver
-waver
-waver
-wave
-wave
-waw
-wawl
-wax
-wax
-waxen
-wax
-wax
-wai
-waylaid
-waylai
-wai
-wayward
-wayward
-wayward
-we
-weak
-weaken
-weaken
-weaker
-weakest
-weakl
-weakli
-weak
-weal
-wealsmen
-wealth
-wealthiest
-wealthili
-wealthi
-wealtlli
-wean
-weapon
-weapon
-wear
-wearer
-wearer
-weari
-weari
-weariest
-wearili
-weari
-wear
-wearisom
-wear
-weari
-weasel
-weather
-weathercock
-weather
-weav
-weav
-weaver
-weaver
-weav
-weav
-web
-wed
-wed
-wed
-wedg
-wedg
-wedg
-wedlock
-wednesdai
-weed
-weed
-weeder
-weed
-weed
-weedi
-week
-week
-weekli
-week
-ween
-ween
-weep
-weeper
-weep
-weepingli
-weep
-weep
-weet
-weigh
-weigh
-weigh
-weigh
-weight
-weightier
-weightless
-weight
-weighti
-weird
-welcom
-welcom
-welcom
-welcom
-welcomest
-welfar
-welkin
-well
-well
-welsh
-welshman
-welshmen
-welshwomen
-wench
-wench
-wench
-wend
-went
-wept
-weradai
-were
-wert
-west
-western
-westminst
-westmoreland
-westward
-wet
-wether
-wet
-wezand
-whale
-whale
-wharf
-wharf
-what
-whate
-whatev
-whatso
-whatsoev
-whatsom
-whe
-wheat
-wheaten
-wheel
-wheel
-wheel
-wheer
-wheeson
-wheez
-whelk
-whelk
-whelm
-whelp
-whelp
-whelp
-when
-whena
-whenc
-whencesoev
-whene
-whenev
-whensoev
-where
-whereabout
-wherea
-whereat
-wherebi
-wherefor
-wherein
-whereinto
-whereof
-whereon
-whereout
-whereso
-whereso
-wheresoev
-wheresom
-whereto
-whereuntil
-whereunto
-whereupon
-wherev
-wherewith
-wherewith
-whet
-whether
-whetston
-whet
-whew
-whei
-which
-whiff
-whiffler
-while
-while
-whilst
-whin
-whine
-whine
-whinid
-whine
-whip
-whipp
-whipper
-whip
-whip
-whipster
-whipstock
-whipt
-whirl
-whirl
-whirligig
-whirl
-whirlpool
-whirl
-whirlwind
-whirlwind
-whisp
-whisper
-whisper
-whisper
-whisper
-whist
-whistl
-whistl
-whistl
-whit
-white
-whitehal
-white
-white
-whiter
-white
-whitest
-whither
-white
-whitmor
-whitster
-whitsun
-whittl
-whizz
-who
-whoa
-whoe
-whoever
-whole
-wholesom
-wholesom
-wholli
-whom
-whoobub
-whoop
-whoop
-whor
-whore
-whoremast
-whoremasterli
-whoremong
-whore
-whoreson
-whoreson
-whore
-whorish
-whose
-whoso
-whoso
-whosoev
-why
-wi
-wick
-wick
-wickedn
-wicked
-wicket
-wicki
-wid
-wide
-widen
-wider
-widow
-widow
-widow
-widowhood
-widow
-wield
-wife
-wight
-wight
-wild
-wildcat
-wilder
-wilder
-wildest
-wildfir
-wildli
-wild
-wild
-wile
-wil
-wilful
-wilfulli
-wilfuln
-wil
-will
-will
-willer
-willeth
-william
-william
-will
-willingli
-willing
-willoughbi
-willow
-will
-wilt
-wiltshir
-wimpl
-win
-winc
-winch
-winchest
-wincot
-wind
-wind
-windgal
-wind
-windlass
-windmil
-window
-window
-windpip
-wind
-windsor
-windi
-wine
-wing
-wing
-wingfield
-wingham
-wing
-wink
-wink
-wink
-winner
-winner
-win
-winnow
-winnow
-winnow
-win
-winter
-winterli
-winter
-wip
-wipe
-wipe
-wipe
-wipe
-wire
-wire
-wiri
-wisdom
-wisdom
-wise
-wiseli
-wise
-wiser
-wisest
-wish
-wish
-wisher
-wisher
-wish
-wishest
-wisheth
-wish
-wish
-wishtli
-wisp
-wist
-wit
-witb
-witch
-witchcraft
-witch
-witch
-with
-withal
-withdraw
-withdraw
-withdrawn
-withdrew
-wither
-wither
-wither
-wither
-withheld
-withhold
-withhold
-within
-withold
-without
-withstand
-withstand
-withstood
-witless
-wit
-wit
-witnesseth
-wit
-wit
-wit
-wittenberg
-wittiest
-wittili
-wit
-wittingli
-wittol
-wittolli
-witti
-wiv
-wive
-wive
-wive
-wive
-wizard
-wizard
-wo
-woe
-woeful
-woeful
-woefullest
-woe
-woful
-wolf
-wolfish
-wolsei
-wolv
-wolvish
-woman
-womanhood
-womanish
-womankind
-womanli
-womb
-womb
-wombi
-women
-won
-woncot
-wond
-wonder
-wonder
-wonder
-wonderfulli
-wonder
-wonder
-wondrou
-wondrous
-wont
-wont
-woo
-wood
-woodbin
-woodcock
-woodcock
-wooden
-woodland
-woodman
-woodmong
-wood
-woodstock
-woodvil
-woo
-wooer
-wooer
-wooe
-woof
-woo
-wooingli
-wool
-woollen
-woolli
-woolsack
-woolsei
-woolward
-woo
-wor
-worcest
-word
-word
-wore
-worin
-work
-worker
-work
-work
-workman
-workmanli
-workmanship
-workmen
-work
-worki
-world
-worldl
-worldli
-world
-worm
-worm
-wormwood
-wormi
-worn
-worri
-worri
-worri
-worri
-wors
-worser
-worship
-worship
-worshipfulli
-worshipp
-worshipp
-worshipp
-worshippest
-worship
-worst
-worst
-wort
-worth
-worthi
-worthier
-worthi
-worthiest
-worthili
-worthi
-worthless
-worth
-worthi
-wort
-wot
-wot
-wot
-wouid
-would
-wouldest
-wouldst
-wound
-wound
-wound
-wound
-woundless
-wound
-woun
-woven
-wow
-wrack
-wrack
-wrangl
-wrangler
-wrangler
-wrangl
-wrap
-wrapp
-wrap
-wrapt
-wrath
-wrath
-wrathfulli
-wrath
-wreak
-wreak
-wreak
-wreath
-wreath
-wreathen
-wreath
-wreck
-wreck
-wreck
-wren
-wrench
-wrench
-wren
-wrest
-wrest
-wrest
-wrestl
-wrestl
-wrestler
-wrestl
-wretch
-wretchcd
-wretch
-wretched
-wretch
-wring
-wringer
-wring
-wring
-wrinkl
-wrinkl
-wrinkl
-wrist
-wrist
-writ
-write
-writer
-writer
-write
-writhl
-write
-write
-writ
-written
-wrong
-wrong
-wronger
-wrong
-wrongfulli
-wrong
-wrongli
-wrong
-wronk
-wrote
-wroth
-wrought
-wrung
-wry
-wry
-wt
-wul
-wye
-x
-xanthipp
-xi
-xii
-xiii
-xiv
-xv
-y
-yard
-yard
-yare
-yare
-yarn
-yaughan
-yaw
-yawn
-yawn
-yclepe
-yclipe
-ye
-yea
-yead
-year
-yearli
-yearn
-yearn
-year
-yea
-yeast
-yedward
-yell
-yellow
-yellow
-yellow
-yellow
-yellow
-yell
-yelp
-yeoman
-yeomen
-yerk
-ye
-yesterdai
-yesterdai
-yesternight
-yesti
-yet
-yew
-yicld
-yield
-yield
-yielder
-yielder
-yield
-yield
-yok
-yoke
-yoke
-yokefellow
-yoke
-yoketh
-yon
-yond
-yonder
-yongrei
-yore
-yorick
-york
-yorkist
-york
-yorkshir
-you
-young
-younger
-youngest
-youngl
-youngl
-youngli
-younker
-your
-your
-yourself
-yourselv
-youth
-youth
-youth
-youtli
-zani
-zani
-zeal
-zealou
-zeal
-zed
-zenelophon
-zenith
-zephyr
-zir
-zo
-zodiac
-zodiac
-zone
-zound
-zwagger
diff --git a/extra/porter-stemmer/test/voc.txt b/extra/porter-stemmer/test/voc.txt
deleted file mode 100644 (file)
index 604ef40..0000000
+++ /dev/null
@@ -1,23531 +0,0 @@
-a
-aaron
-abaissiez
-abandon
-abandoned
-abase
-abash
-abate
-abated
-abatement
-abatements
-abates
-abbess
-abbey
-abbeys
-abbominable
-abbot
-abbots
-abbreviated
-abed
-abel
-aberga
-abergavenny
-abet
-abetting
-abhominable
-abhor
-abhorr
-abhorred
-abhorring
-abhors
-abhorson
-abide
-abides
-abilities
-ability
-abject
-abjectly
-abjects
-abjur
-abjure
-able
-abler
-aboard
-abode
-aboded
-abodements
-aboding
-abominable
-abominably
-abominations
-abortive
-abortives
-abound
-abounding
-about
-above
-abr
-abraham
-abram
-abreast
-abridg
-abridge
-abridged
-abridgment
-abroach
-abroad
-abrogate
-abrook
-abrupt
-abruption
-abruptly
-absence
-absent
-absey
-absolute
-absolutely
-absolv
-absolver
-abstains
-abstemious
-abstinence
-abstract
-absurd
-absyrtus
-abundance
-abundant
-abundantly
-abus
-abuse
-abused
-abuser
-abuses
-abusing
-abutting
-aby
-abysm
-ac
-academe
-academes
-accent
-accents
-accept
-acceptable
-acceptance
-accepted
-accepts
-access
-accessary
-accessible
-accidence
-accident
-accidental
-accidentally
-accidents
-accite
-accited
-accites
-acclamations
-accommodate
-accommodated
-accommodation
-accommodations
-accommodo
-accompanied
-accompany
-accompanying
-accomplices
-accomplish
-accomplished
-accomplishing
-accomplishment
-accompt
-accord
-accordant
-accorded
-accordeth
-according
-accordingly
-accords
-accost
-accosted
-account
-accountant
-accounted
-accounts
-accoutred
-accoutrement
-accoutrements
-accrue
-accumulate
-accumulated
-accumulation
-accurs
-accursed
-accurst
-accus
-accusation
-accusations
-accusative
-accusativo
-accuse
-accused
-accuser
-accusers
-accuses
-accuseth
-accusing
-accustom
-accustomed
-ace
-acerb
-ache
-acheron
-aches
-achiev
-achieve
-achieved
-achievement
-achievements
-achiever
-achieves
-achieving
-achilles
-aching
-achitophel
-acknowledg
-acknowledge
-acknowledged
-acknowledgment
-acknown
-acold
-aconitum
-acordo
-acorn
-acquaint
-acquaintance
-acquainted
-acquaints
-acquir
-acquire
-acquisition
-acquit
-acquittance
-acquittances
-acquitted
-acre
-acres
-across
-act
-actaeon
-acted
-acting
-action
-actions
-actium
-active
-actively
-activity
-actor
-actors
-acts
-actual
-acture
-acute
-acutely
-ad
-adage
-adallas
-adam
-adamant
-add
-added
-adder
-adders
-addeth
-addict
-addicted
-addiction
-adding
-addition
-additions
-addle
-address
-addressing
-addrest
-adds
-adhere
-adheres
-adieu
-adieus
-adjacent
-adjoin
-adjoining
-adjourn
-adjudg
-adjudged
-adjunct
-administer
-administration
-admir
-admirable
-admiral
-admiration
-admire
-admired
-admirer
-admiring
-admiringly
-admission
-admit
-admits
-admittance
-admitted
-admitting
-admonish
-admonishing
-admonishment
-admonishments
-admonition
-ado
-adonis
-adopt
-adopted
-adoptedly
-adoption
-adoptious
-adopts
-ador
-adoration
-adorations
-adore
-adorer
-adores
-adorest
-adoreth
-adoring
-adorn
-adorned
-adornings
-adornment
-adorns
-adown
-adramadio
-adrian
-adriana
-adriano
-adriatic
-adsum
-adulation
-adulterate
-adulterates
-adulterers
-adulteress
-adulteries
-adulterous
-adultery
-adultress
-advanc
-advance
-advanced
-advancement
-advancements
-advances
-advancing
-advantage
-advantageable
-advantaged
-advantageous
-advantages
-advantaging
-advent
-adventur
-adventure
-adventures
-adventuring
-adventurous
-adventurously
-adversaries
-adversary
-adverse
-adversely
-adversities
-adversity
-advertis
-advertise
-advertised
-advertisement
-advertising
-advice
-advis
-advise
-advised
-advisedly
-advises
-advisings
-advocate
-advocation
-aeacida
-aeacides
-aedile
-aediles
-aegeon
-aegion
-aegles
-aemelia
-aemilia
-aemilius
-aeneas
-aeolus
-aer
-aerial
-aery
-aesculapius
-aeson
-aesop
-aetna
-afar
-afear
-afeard
-affability
-affable
-affair
-affaire
-affairs
-affect
-affectation
-affectations
-affected
-affectedly
-affecteth
-affecting
-affection
-affectionate
-affectionately
-affections
-affects
-affeer
-affianc
-affiance
-affianced
-affied
-affin
-affined
-affinity
-affirm
-affirmation
-affirmatives
-afflict
-afflicted
-affliction
-afflictions
-afflicts
-afford
-affordeth
-affords
-affray
-affright
-affrighted
-affrights
-affront
-affronted
-affy
-afield
-afire
-afloat
-afoot
-afore
-aforehand
-aforesaid
-afraid
-afresh
-afric
-africa
-african
-afront
-after
-afternoon
-afterward
-afterwards
-ag
-again
-against
-agamemmon
-agamemnon
-agate
-agaz
-age
-aged
-agenor
-agent
-agents
-ages
-aggravate
-aggrief
-agile
-agincourt
-agitation
-aglet
-agnize
-ago
-agone
-agony
-agree
-agreed
-agreeing
-agreement
-agrees
-agrippa
-aground
-ague
-aguecheek
-agued
-agueface
-agues
-ah
-aha
-ahungry
-ai
-aialvolio
-aiaria
-aid
-aidance
-aidant
-aided
-aiding
-aidless
-aids
-ail
-aim
-aimed
-aimest
-aiming
-aims
-ainsi
-aio
-air
-aired
-airless
-airs
-airy
-ajax
-akilling
-al
-alabaster
-alack
-alacrity
-alarbus
-alarm
-alarms
-alarum
-alarums
-alas
-alb
-alban
-albans
-albany
-albeit
-albion
-alchemist
-alchemy
-alcibiades
-alcides
-alder
-alderman
-aldermen
-ale
-alecto
-alehouse
-alehouses
-alencon
-alengon
-aleppo
-ales
-alewife
-alexander
-alexanders
-alexandria
-alexandrian
-alexas
-alias
-alice
-alien
-aliena
-alight
-alighted
-alights
-aliis
-alike
-alisander
-alive
-all
-alla
-allay
-allayed
-allaying
-allayment
-allayments
-allays
-allegation
-allegations
-allege
-alleged
-allegiance
-allegiant
-alley
-alleys
-allhallowmas
-alliance
-allicholy
-allied
-allies
-alligant
-alligator
-allons
-allot
-allots
-allotted
-allottery
-allow
-allowance
-allowed
-allowing
-allows
-allur
-allure
-allurement
-alluring
-allusion
-ally
-allycholly
-almain
-almanac
-almanack
-almanacs
-almighty
-almond
-almost
-alms
-almsman
-aloes
-aloft
-alone
-along
-alonso
-aloof
-aloud
-alphabet
-alphabetical
-alphonso
-alps
-already
-also
-alt
-altar
-altars
-alter
-alteration
-altered
-alters
-althaea
-although
-altitude
-altogether
-alton
-alway
-always
-am
-amaimon
-amain
-amaking
-amamon
-amaz
-amaze
-amazed
-amazedly
-amazedness
-amazement
-amazes
-amazeth
-amazing
-amazon
-amazonian
-amazons
-ambassador
-ambassadors
-amber
-ambiguides
-ambiguities
-ambiguous
-ambition
-ambitions
-ambitious
-ambitiously
-amble
-ambled
-ambles
-ambling
-ambo
-ambuscadoes
-ambush
-amen
-amend
-amended
-amendment
-amends
-amerce
-america
-ames
-amiable
-amid
-amidst
-amiens
-amis
-amiss
-amities
-amity
-amnipotent
-among
-amongst
-amorous
-amorously
-amort
-amount
-amounts
-amour
-amphimacus
-ample
-ampler
-amplest
-amplified
-amplify
-amply
-ampthill
-amurath
-amyntas
-an
-anatomiz
-anatomize
-anatomy
-ancestor
-ancestors
-ancestry
-anchises
-anchor
-anchorage
-anchored
-anchoring
-anchors
-anchovies
-ancient
-ancientry
-ancients
-ancus
-and
-andirons
-andpholus
-andren
-andrew
-andromache
-andronici
-andronicus
-anew
-ang
-angel
-angelica
-angelical
-angelo
-angels
-anger
-angerly
-angers
-anges
-angiers
-angl
-anglais
-angle
-angler
-angleterre
-angliae
-angling
-anglish
-angrily
-angry
-anguish
-angus
-animal
-animals
-animis
-anjou
-ankle
-anna
-annals
-anne
-annex
-annexed
-annexions
-annexment
-annothanize
-announces
-annoy
-annoyance
-annoying
-annual
-anoint
-anointed
-anon
-another
-anselmo
-answer
-answerable
-answered
-answerest
-answering
-answers
-ant
-ante
-antenor
-antenorides
-anteroom
-anthem
-anthems
-anthony
-anthropophagi
-anthropophaginian
-antiates
-antic
-anticipate
-anticipates
-anticipatest
-anticipating
-anticipation
-antick
-anticly
-antics
-antidote
-antidotes
-antigonus
-antiopa
-antipathy
-antipholus
-antipholuses
-antipodes
-antiquary
-antique
-antiquity
-antium
-antoniad
-antonio
-antonius
-antony
-antres
-anvil
-any
-anybody
-anyone
-anything
-anywhere
-ap
-apace
-apart
-apartment
-apartments
-ape
-apemantus
-apennines
-apes
-apiece
-apish
-apollinem
-apollo
-apollodorus
-apology
-apoplex
-apoplexy
-apostle
-apostles
-apostrophas
-apoth
-apothecary
-appal
-appall
-appalled
-appals
-apparel
-apparell
-apparelled
-apparent
-apparently
-apparition
-apparitions
-appeach
-appeal
-appeals
-appear
-appearance
-appeared
-appeareth
-appearing
-appears
-appeas
-appease
-appeased
-appelant
-appele
-appelee
-appeles
-appelez
-appellant
-appellants
-appelons
-appendix
-apperil
-appertain
-appertaining
-appertainings
-appertains
-appertinent
-appertinents
-appetite
-appetites
-applaud
-applauded
-applauding
-applause
-applauses
-apple
-apples
-appletart
-appliance
-appliances
-applications
-applied
-applies
-apply
-applying
-appoint
-appointed
-appointment
-appointments
-appoints
-apprehend
-apprehended
-apprehends
-apprehension
-apprehensions
-apprehensive
-apprendre
-apprenne
-apprenticehood
-appris
-approach
-approachers
-approaches
-approacheth
-approaching
-approbation
-approof
-appropriation
-approv
-approve
-approved
-approvers
-approves
-appurtenance
-appurtenances
-apricocks
-april
-apron
-aprons
-apt
-apter
-aptest
-aptly
-aptness
-aqua
-aquilon
-aquitaine
-arabia
-arabian
-araise
-arbitrate
-arbitrating
-arbitrator
-arbitrement
-arbors
-arbour
-arc
-arch
-archbishop
-archbishopric
-archdeacon
-arched
-archelaus
-archer
-archers
-archery
-archibald
-archidamus
-architect
-arcu
-arde
-arden
-ardent
-ardour
-are
-argal
-argier
-argo
-argosies
-argosy
-argu
-argue
-argued
-argues
-arguing
-argument
-arguments
-argus
-ariachne
-ariadne
-ariel
-aries
-aright
-arinado
-arinies
-arion
-arise
-arises
-ariseth
-arising
-aristode
-aristotle
-arithmetic
-arithmetician
-ark
-arm
-arma
-armado
-armadoes
-armagnac
-arme
-armed
-armenia
-armies
-armigero
-arming
-armipotent
-armor
-armour
-armourer
-armourers
-armours
-armoury
-arms
-army
-arn
-aroint
-arose
-arouse
-aroused
-arragon
-arraign
-arraigned
-arraigning
-arraignment
-arrant
-arras
-array
-arrearages
-arrest
-arrested
-arrests
-arriv
-arrival
-arrivance
-arrive
-arrived
-arrives
-arriving
-arrogance
-arrogancy
-arrogant
-arrow
-arrows
-art
-artemidorus
-arteries
-arthur
-article
-articles
-articulate
-artificer
-artificial
-artillery
-artire
-artist
-artists
-artless
-artois
-arts
-artus
-arviragus
-as
-asaph
-ascanius
-ascend
-ascended
-ascendeth
-ascends
-ascension
-ascent
-ascribe
-ascribes
-ash
-asham
-ashamed
-asher
-ashes
-ashford
-ashore
-ashouting
-ashy
-asia
-aside
-ask
-askance
-asked
-asker
-asketh
-asking
-asks
-aslant
-asleep
-asmath
-asp
-aspect
-aspects
-aspen
-aspersion
-aspic
-aspicious
-aspics
-aspir
-aspiration
-aspire
-aspiring
-asquint
-ass
-assail
-assailable
-assailant
-assailants
-assailed
-assaileth
-assailing
-assails
-assassination
-assault
-assaulted
-assaults
-assay
-assaying
-assays
-assemblance
-assemble
-assembled
-assemblies
-assembly
-assent
-asses
-assez
-assign
-assigned
-assigns
-assinico
-assist
-assistance
-assistances
-assistant
-assistants
-assisted
-assisting
-associate
-associated
-associates
-assuage
-assubjugate
-assum
-assume
-assumes
-assumption
-assur
-assurance
-assure
-assured
-assuredly
-assures
-assyrian
-astonish
-astonished
-astraea
-astray
-astrea
-astronomer
-astronomers
-astronomical
-astronomy
-asunder
-at
-atalanta
-ate
-ates
-athenian
-athenians
-athens
-athol
-athversary
-athwart
-atlas
-atomies
-atomy
-atone
-atonement
-atonements
-atropos
-attach
-attached
-attachment
-attain
-attainder
-attains
-attaint
-attainted
-attainture
-attempt
-attemptable
-attempted
-attempting
-attempts
-attend
-attendance
-attendant
-attendants
-attended
-attendents
-attendeth
-attending
-attends
-attent
-attention
-attentive
-attentivenes
-attest
-attested
-attir
-attire
-attired
-attires
-attorney
-attorneyed
-attorneys
-attorneyship
-attract
-attraction
-attractive
-attracts
-attribute
-attributed
-attributes
-attribution
-attributive
-atwain
-au
-aubrey
-auburn
-aucun
-audacious
-audaciously
-audacity
-audible
-audience
-audis
-audit
-auditor
-auditors
-auditory
-audre
-audrey
-aufidius
-aufidiuses
-auger
-aught
-augment
-augmentation
-augmented
-augmenting
-augurer
-augurers
-augures
-auguring
-augurs
-augury
-august
-augustus
-auld
-aumerle
-aunchient
-aunt
-aunts
-auricular
-aurora
-auspicious
-aussi
-austere
-austerely
-austereness
-austerity
-austria
-aut
-authentic
-author
-authorities
-authority
-authorized
-authorizing
-authors
-autolycus
-autre
-autumn
-auvergne
-avail
-avails
-avarice
-avaricious
-avaunt
-ave
-aveng
-avenge
-avenged
-averring
-avert
-aves
-avez
-avis
-avoid
-avoided
-avoiding
-avoids
-avoirdupois
-avouch
-avouched
-avouches
-avouchment
-avow
-aw
-await
-awaits
-awak
-awake
-awaked
-awaken
-awakened
-awakens
-awakes
-awaking
-award
-awards
-awasy
-away
-awe
-aweary
-aweless
-awful
-awhile
-awkward
-awl
-awooing
-awork
-awry
-axe
-axle
-axletree
-ay
-aye
-ayez
-ayli
-azur
-azure
-b
-ba
-baa
-babbl
-babble
-babbling
-babe
-babes
-babies
-baboon
-baboons
-baby
-babylon
-bacare
-bacchanals
-bacchus
-bach
-bachelor
-bachelors
-back
-backbite
-backbitten
-backing
-backs
-backward
-backwardly
-backwards
-bacon
-bacons
-bad
-bade
-badge
-badged
-badges
-badly
-badness
-baes
-baffl
-baffle
-baffled
-bag
-baggage
-bagot
-bagpipe
-bags
-bail
-bailiff
-baillez
-baily
-baisant
-baisees
-baiser
-bait
-baited
-baiting
-baitings
-baits
-bajazet
-bak
-bake
-baked
-baker
-bakers
-bakes
-baking
-bal
-balanc
-balance
-balcony
-bald
-baldrick
-bale
-baleful
-balk
-ball
-ballad
-ballads
-ballast
-ballasting
-ballet
-ballow
-balls
-balm
-balms
-balmy
-balsam
-balsamum
-balth
-balthasar
-balthazar
-bames
-ban
-banbury
-band
-bandied
-banding
-bandit
-banditti
-banditto
-bands
-bandy
-bandying
-bane
-banes
-bang
-bangor
-banish
-banished
-banishers
-banishment
-banister
-bank
-bankrout
-bankrupt
-bankrupts
-banks
-banner
-bannerets
-banners
-banning
-banns
-banquet
-banqueted
-banqueting
-banquets
-banquo
-bans
-baptism
-baptista
-baptiz
-bar
-barbarian
-barbarians
-barbarism
-barbarous
-barbary
-barbason
-barbed
-barber
-barbermonger
-bard
-bardolph
-bards
-bare
-bared
-barefac
-barefaced
-barefoot
-bareheaded
-barely
-bareness
-barful
-bargain
-bargains
-barge
-bargulus
-baring
-bark
-barking
-barkloughly
-barks
-barky
-barley
-barm
-barn
-barnacles
-barnardine
-barne
-barnes
-barnet
-barns
-baron
-barons
-barony
-barr
-barrabas
-barrel
-barrels
-barren
-barrenly
-barrenness
-barricado
-barricadoes
-barrow
-bars
-barson
-barter
-bartholomew
-bas
-basan
-base
-baseless
-basely
-baseness
-baser
-bases
-basest
-bashful
-bashfulness
-basilisco
-basilisk
-basilisks
-basimecu
-basin
-basingstoke
-basins
-basis
-bask
-basket
-baskets
-bass
-bassanio
-basset
-bassianus
-basta
-bastard
-bastardizing
-bastardly
-bastards
-bastardy
-basted
-bastes
-bastinado
-basting
-bat
-batailles
-batch
-bate
-bated
-bates
-bath
-bathe
-bathed
-bathing
-baths
-bating
-batler
-bats
-batt
-battalia
-battalions
-batten
-batter
-battering
-batters
-battery
-battle
-battled
-battlefield
-battlements
-battles
-batty
-bauble
-baubles
-baubling
-baulk
-bavin
-bawcock
-bawd
-bawdry
-bawds
-bawdy
-bawl
-bawling
-bay
-baying
-baynard
-bayonne
-bays
-be
-beach
-beached
-beachy
-beacon
-bead
-beaded
-beadle
-beadles
-beads
-beadsmen
-beagle
-beagles
-beak
-beaks
-beam
-beamed
-beams
-bean
-beans
-bear
-beard
-bearded
-beardless
-beards
-bearer
-bearers
-bearest
-beareth
-bearing
-bears
-beast
-beastliest
-beastliness
-beastly
-beasts
-beat
-beated
-beaten
-beating
-beatrice
-beats
-beau
-beaufort
-beaumond
-beaumont
-beauteous
-beautied
-beauties
-beautified
-beautiful
-beautify
-beauty
-beaver
-beavers
-became
-because
-bechanc
-bechance
-bechanced
-beck
-beckon
-beckons
-becks
-becom
-become
-becomed
-becomes
-becoming
-becomings
-bed
-bedabbled
-bedash
-bedaub
-bedazzled
-bedchamber
-bedclothes
-bedded
-bedeck
-bedecking
-bedew
-bedfellow
-bedfellows
-bedford
-bedlam
-bedrench
-bedrid
-beds
-bedtime
-bedward
-bee
-beef
-beefs
-beehives
-been
-beer
-bees
-beest
-beetle
-beetles
-beeves
-befall
-befallen
-befalls
-befell
-befits
-befitted
-befitting
-befor
-before
-beforehand
-befortune
-befriend
-befriended
-befriends
-beg
-began
-beget
-begets
-begetting
-begg
-beggar
-beggared
-beggarly
-beggarman
-beggars
-beggary
-begging
-begin
-beginners
-beginning
-beginnings
-begins
-begnawn
-begone
-begot
-begotten
-begrimed
-begs
-beguil
-beguile
-beguiled
-beguiles
-beguiling
-begun
-behalf
-behalfs
-behav
-behaved
-behavedst
-behavior
-behaviors
-behaviour
-behaviours
-behead
-beheaded
-beheld
-behest
-behests
-behind
-behold
-beholder
-beholders
-beholdest
-beholding
-beholds
-behoof
-behooffull
-behooves
-behove
-behoves
-behowls
-being
-bel
-belarius
-belch
-belching
-beldam
-beldame
-beldams
-belee
-belgia
-belie
-belied
-belief
-beliest
-believ
-believe
-believed
-believes
-believest
-believing
-belike
-bell
-bellario
-belle
-bellied
-bellies
-bellman
-bellona
-bellow
-bellowed
-bellowing
-bellows
-bells
-belly
-bellyful
-belman
-belmont
-belock
-belong
-belonging
-belongings
-belongs
-belov
-beloved
-beloving
-below
-belt
-belzebub
-bemadding
-bemet
-bemete
-bemoan
-bemoaned
-bemock
-bemoil
-bemonster
-ben
-bench
-bencher
-benches
-bend
-bended
-bending
-bends
-bene
-beneath
-benedicite
-benedick
-benediction
-benedictus
-benefactors
-benefice
-beneficial
-benefit
-benefited
-benefits
-benetted
-benevolence
-benevolences
-benied
-benison
-bennet
-bent
-bentii
-bentivolii
-bents
-benumbed
-benvolio
-bepaint
-bepray
-bequeath
-bequeathed
-bequeathing
-bequest
-ber
-berard
-berattle
-beray
-bere
-bereave
-bereaved
-bereaves
-bereft
-bergamo
-bergomask
-berhym
-berhyme
-berkeley
-bermoothes
-bernardo
-berod
-berowne
-berri
-berries
-berrord
-berry
-bertram
-berwick
-bescreen
-beseech
-beseeched
-beseechers
-beseeching
-beseek
-beseem
-beseemeth
-beseeming
-beseems
-beset
-beshrew
-beside
-besides
-besieg
-besiege
-besieged
-beslubber
-besmear
-besmeared
-besmirch
-besom
-besort
-besotted
-bespake
-bespeak
-bespice
-bespoke
-bespotted
-bess
-bessy
-best
-bestained
-bested
-bestial
-bestir
-bestirr
-bestow
-bestowed
-bestowing
-bestows
-bestraught
-bestrew
-bestrid
-bestride
-bestrides
-bet
-betake
-beteem
-bethink
-bethought
-bethrothed
-bethump
-betid
-betide
-betideth
-betime
-betimes
-betoken
-betook
-betossed
-betray
-betrayed
-betraying
-betrays
-betrims
-betroth
-betrothed
-betroths
-bett
-betted
-better
-bettered
-bettering
-betters
-betting
-bettre
-between
-betwixt
-bevel
-beverage
-bevis
-bevy
-bewail
-bewailed
-bewailing
-bewails
-beware
-bewasted
-beweep
-bewept
-bewet
-bewhored
-bewitch
-bewitched
-bewitchment
-bewray
-beyond
-bezonian
-bezonians
-bianca
-bianco
-bias
-bibble
-bickerings
-bid
-bidden
-bidding
-biddings
-biddy
-bide
-bides
-biding
-bids
-bien
-bier
-bifold
-big
-bigamy
-biggen
-bigger
-bigness
-bigot
-bilberry
-bilbo
-bilboes
-bilbow
-bill
-billeted
-billets
-billiards
-billing
-billow
-billows
-bills
-bin
-bind
-bindeth
-binding
-binds
-biondello
-birch
-bird
-birding
-birdlime
-birds
-birnam
-birth
-birthday
-birthdom
-birthplace
-birthright
-birthrights
-births
-bis
-biscuit
-bishop
-bishops
-bisson
-bit
-bitch
-bite
-biter
-bites
-biting
-bits
-bitt
-bitten
-bitter
-bitterest
-bitterly
-bitterness
-blab
-blabb
-blabbing
-blabs
-black
-blackamoor
-blackamoors
-blackberries
-blackberry
-blacker
-blackest
-blackfriars
-blackheath
-blackmere
-blackness
-blacks
-bladder
-bladders
-blade
-bladed
-blades
-blains
-blam
-blame
-blamed
-blameful
-blameless
-blames
-blanc
-blanca
-blanch
-blank
-blanket
-blanks
-blaspheme
-blaspheming
-blasphemous
-blasphemy
-blast
-blasted
-blasting
-blastments
-blasts
-blaz
-blaze
-blazes
-blazing
-blazon
-blazoned
-blazoning
-bleach
-bleaching
-bleak
-blear
-bleared
-bleat
-bleated
-bleats
-bled
-bleed
-bleedest
-bleedeth
-bleeding
-bleeds
-blemish
-blemishes
-blench
-blenches
-blend
-blended
-blent
-bless
-blessed
-blessedly
-blessedness
-blesses
-blesseth
-blessing
-blessings
-blest
-blew
-blind
-blinded
-blindfold
-blinding
-blindly
-blindness
-blinds
-blink
-blinking
-bliss
-blist
-blister
-blisters
-blithe
-blithild
-bloat
-block
-blockish
-blocks
-blois
-blood
-blooded
-bloodhound
-bloodied
-bloodier
-bloodiest
-bloodily
-bloodless
-bloods
-bloodshed
-bloodshedding
-bloodstained
-bloody
-bloom
-blooms
-blossom
-blossoming
-blossoms
-blot
-blots
-blotted
-blotting
-blount
-blow
-blowed
-blowers
-blowest
-blowing
-blown
-blows
-blowse
-blubb
-blubber
-blubbering
-blue
-bluecaps
-bluest
-blunt
-blunted
-blunter
-bluntest
-blunting
-bluntly
-bluntness
-blunts
-blur
-blurr
-blurs
-blush
-blushes
-blushest
-blushing
-blust
-bluster
-blusterer
-blusters
-bo
-boar
-board
-boarded
-boarding
-boards
-boarish
-boars
-boast
-boasted
-boastful
-boasting
-boasts
-boat
-boats
-boatswain
-bob
-bobb
-boblibindo
-bobtail
-bocchus
-bode
-boded
-bodements
-bodes
-bodg
-bodied
-bodies
-bodiless
-bodily
-boding
-bodkin
-body
-bodykins
-bog
-boggle
-boggler
-bogs
-bohemia
-bohemian
-bohun
-boil
-boiling
-boils
-boist
-boisterous
-boisterously
-boitier
-bold
-bolden
-bolder
-boldest
-boldly
-boldness
-bolds
-bolingbroke
-bolster
-bolt
-bolted
-bolter
-bolters
-bolting
-bolts
-bombard
-bombards
-bombast
-bon
-bona
-bond
-bondage
-bonded
-bondmaid
-bondman
-bondmen
-bonds
-bondslave
-bone
-boneless
-bones
-bonfire
-bonfires
-bonjour
-bonne
-bonnet
-bonneted
-bonny
-bonos
-bonto
-bonville
-bood
-book
-bookish
-books
-boon
-boor
-boorish
-boors
-boot
-booted
-booties
-bootless
-boots
-booty
-bor
-bora
-borachio
-bordeaux
-border
-bordered
-borderers
-borders
-bore
-boreas
-bores
-boring
-born
-borne
-borough
-boroughs
-borrow
-borrowed
-borrower
-borrowing
-borrows
-bosko
-boskos
-bosky
-bosom
-bosoms
-boson
-boss
-bosworth
-botch
-botcher
-botches
-botchy
-both
-bots
-bottle
-bottled
-bottles
-bottom
-bottomless
-bottoms
-bouciqualt
-bouge
-bough
-boughs
-bought
-bounce
-bouncing
-bound
-bounded
-bounden
-boundeth
-bounding
-boundless
-bounds
-bounteous
-bounteously
-bounties
-bountiful
-bountifully
-bounty
-bourbier
-bourbon
-bourchier
-bourdeaux
-bourn
-bout
-bouts
-bove
-bow
-bowcase
-bowed
-bowels
-bower
-bowing
-bowl
-bowler
-bowling
-bowls
-bows
-bowsprit
-bowstring
-box
-boxes
-boy
-boyet
-boyish
-boys
-brabant
-brabantio
-brabble
-brabbler
-brac
-brace
-bracelet
-bracelets
-brach
-bracy
-brag
-bragg
-braggardism
-braggards
-braggart
-braggarts
-bragged
-bragging
-bragless
-brags
-braid
-braided
-brain
-brained
-brainford
-brainish
-brainless
-brains
-brainsick
-brainsickly
-brake
-brakenbury
-brakes
-brambles
-bran
-branch
-branches
-branchless
-brand
-branded
-brandish
-brandon
-brands
-bras
-brass
-brassy
-brat
-brats
-brav
-brave
-braved
-bravely
-braver
-bravery
-braves
-bravest
-braving
-brawl
-brawler
-brawling
-brawls
-brawn
-brawns
-bray
-braying
-braz
-brazen
-brazier
-breach
-breaches
-bread
-breadth
-break
-breaker
-breakfast
-breaking
-breaks
-breast
-breasted
-breasting
-breastplate
-breasts
-breath
-breathe
-breathed
-breather
-breathers
-breathes
-breathest
-breathing
-breathless
-breaths
-brecknock
-bred
-breech
-breeches
-breeching
-breed
-breeder
-breeders
-breeding
-breeds
-breese
-breeze
-breff
-bretagne
-brethen
-bretheren
-brethren
-brevis
-brevity
-brew
-brewage
-brewer
-brewers
-brewing
-brews
-briareus
-briars
-brib
-bribe
-briber
-bribes
-brick
-bricklayer
-bricks
-bridal
-bride
-bridegroom
-bridegrooms
-brides
-bridge
-bridgenorth
-bridges
-bridget
-bridle
-bridled
-brief
-briefer
-briefest
-briefly
-briefness
-brier
-briers
-brigandine
-bright
-brighten
-brightest
-brightly
-brightness
-brim
-brimful
-brims
-brimstone
-brinded
-brine
-bring
-bringer
-bringeth
-bringing
-bringings
-brings
-brinish
-brink
-brisk
-brisky
-bristle
-bristled
-bristly
-bristol
-bristow
-britain
-britaine
-britaines
-british
-briton
-britons
-brittany
-brittle
-broach
-broached
-broad
-broader
-broadsides
-brocas
-brock
-brogues
-broil
-broiling
-broils
-broke
-broken
-brokenly
-broker
-brokers
-brokes
-broking
-brooch
-brooches
-brood
-brooded
-brooding
-brook
-brooks
-broom
-broomstaff
-broth
-brothel
-brother
-brotherhood
-brotherhoods
-brotherly
-brothers
-broths
-brought
-brow
-brown
-browner
-brownist
-browny
-brows
-browse
-browsing
-bruis
-bruise
-bruised
-bruises
-bruising
-bruit
-bruited
-brundusium
-brunt
-brush
-brushes
-brute
-brutish
-brutus
-bubble
-bubbles
-bubbling
-bubukles
-buck
-bucket
-buckets
-bucking
-buckingham
-buckle
-buckled
-buckler
-bucklers
-bucklersbury
-buckles
-buckram
-bucks
-bud
-budded
-budding
-budge
-budger
-budget
-buds
-buff
-buffet
-buffeting
-buffets
-bug
-bugbear
-bugle
-bugs
-build
-builded
-buildeth
-building
-buildings
-builds
-built
-bulk
-bulks
-bull
-bullcalf
-bullen
-bullens
-bullet
-bullets
-bullocks
-bulls
-bully
-bulmer
-bulwark
-bulwarks
-bum
-bumbast
-bump
-bumper
-bums
-bunch
-bunches
-bundle
-bung
-bunghole
-bungle
-bunting
-buoy
-bur
-burbolt
-burd
-burden
-burdened
-burdening
-burdenous
-burdens
-burgh
-burgher
-burghers
-burglary
-burgomasters
-burgonet
-burgundy
-burial
-buried
-burier
-buriest
-burly
-burn
-burned
-burnet
-burneth
-burning
-burnish
-burns
-burnt
-burr
-burrows
-burs
-burst
-bursting
-bursts
-burthen
-burthens
-burton
-bury
-burying
-bush
-bushels
-bushes
-bushy
-busied
-busily
-busines
-business
-businesses
-buskin
-busky
-buss
-busses
-bussing
-bustle
-bustling
-busy
-but
-butcheed
-butcher
-butchered
-butcheries
-butcherly
-butchers
-butchery
-butler
-butt
-butter
-buttered
-butterflies
-butterfly
-butterwoman
-buttery
-buttock
-buttocks
-button
-buttonhole
-buttons
-buttress
-buttry
-butts
-buxom
-buy
-buyer
-buying
-buys
-buzz
-buzzard
-buzzards
-buzzers
-buzzing
-by
-bye
-byzantium
-c
-ca
-cabbage
-cabileros
-cabin
-cabins
-cable
-cables
-cackling
-cacodemon
-caddis
-caddisses
-cade
-cadence
-cadent
-cades
-cadmus
-caduceus
-cadwal
-cadwallader
-caelius
-caelo
-caesar
-caesarion
-caesars
-cage
-caged
-cagion
-cain
-caithness
-caitiff
-caitiffs
-caius
-cak
-cake
-cakes
-calaber
-calais
-calamities
-calamity
-calchas
-calculate
-calen
-calendar
-calendars
-calf
-caliban
-calibans
-calipolis
-cality
-caliver
-call
-callat
-called
-callet
-calling
-calls
-calm
-calmest
-calmly
-calmness
-calms
-calpurnia
-calumniate
-calumniating
-calumnious
-calumny
-calve
-calved
-calves
-calveskins
-calydon
-cam
-cambio
-cambria
-cambric
-cambrics
-cambridge
-cambyses
-came
-camel
-camelot
-camels
-camest
-camillo
-camlet
-camomile
-camp
-campeius
-camping
-camps
-can
-canakin
-canaries
-canary
-cancel
-cancell
-cancelled
-cancelling
-cancels
-cancer
-candidatus
-candied
-candle
-candles
-candlesticks
-candy
-canidius
-cank
-canker
-cankerblossom
-cankers
-cannibally
-cannibals
-cannon
-cannoneer
-cannons
-cannot
-canon
-canoniz
-canonize
-canonized
-canons
-canopied
-canopies
-canopy
-canst
-canstick
-canterbury
-cantle
-cantons
-canus
-canvas
-canvass
-canzonet
-cap
-capability
-capable
-capacities
-capacity
-caparison
-capdv
-cape
-capel
-capels
-caper
-capers
-capet
-caphis
-capilet
-capitaine
-capital
-capite
-capitol
-capitulate
-capocchia
-capon
-capons
-capp
-cappadocia
-capriccio
-capricious
-caps
-capt
-captain
-captains
-captainship
-captious
-captivate
-captivated
-captivates
-captive
-captives
-captivity
-captum
-capucius
-capulet
-capulets
-car
-carack
-caracks
-carat
-caraways
-carbonado
-carbuncle
-carbuncled
-carbuncles
-carcanet
-carcase
-carcases
-carcass
-carcasses
-card
-cardecue
-carded
-carders
-cardinal
-cardinally
-cardinals
-cardmaker
-cards
-carduus
-care
-cared
-career
-careers
-careful
-carefully
-careless
-carelessly
-carelessness
-cares
-caret
-cargo
-carl
-carlisle
-carlot
-carman
-carmen
-carnal
-carnally
-carnarvonshire
-carnation
-carnations
-carol
-carous
-carouse
-caroused
-carouses
-carousing
-carp
-carpenter
-carper
-carpet
-carpets
-carping
-carriage
-carriages
-carried
-carrier
-carriers
-carries
-carrion
-carrions
-carry
-carrying
-cars
-cart
-carters
-carthage
-carts
-carv
-carve
-carved
-carver
-carves
-carving
-cas
-casa
-casaer
-casca
-case
-casement
-casements
-cases
-cash
-cashier
-casing
-cask
-casket
-casketed
-caskets
-casque
-casques
-cassado
-cassandra
-cassibelan
-cassio
-cassius
-cassocks
-cast
-castalion
-castaway
-castaways
-casted
-caster
-castigate
-castigation
-castile
-castiliano
-casting
-castle
-castles
-casts
-casual
-casually
-casualties
-casualty
-cat
-cataian
-catalogue
-cataplasm
-cataracts
-catarrhs
-catastrophe
-catch
-catcher
-catches
-catching
-cate
-catechising
-catechism
-catechize
-cater
-caterpillars
-caters
-caterwauling
-cates
-catesby
-cathedral
-catlike
-catling
-catlings
-cato
-cats
-cattle
-caucasus
-caudle
-cauf
-caught
-cauldron
-caus
-cause
-caused
-causeless
-causer
-causes
-causest
-causeth
-cautel
-cautelous
-cautels
-cauterizing
-caution
-cautions
-cavaleiro
-cavalery
-cavaliers
-cave
-cavern
-caverns
-caves
-caveto
-caviary
-cavil
-cavilling
-cawdor
-cawdron
-cawing
-ce
-ceas
-cease
-ceases
-ceaseth
-cedar
-cedars
-cedius
-celebrate
-celebrated
-celebrates
-celebration
-celerity
-celestial
-celia
-cell
-cellar
-cellarage
-celsa
-cement
-censer
-censor
-censorinus
-censur
-censure
-censured
-censurers
-censures
-censuring
-centaur
-centaurs
-centre
-cents
-centuries
-centurion
-centurions
-century
-cerberus
-cerecloth
-cerements
-ceremonial
-ceremonies
-ceremonious
-ceremoniously
-ceremony
-ceres
-cerns
-certain
-certainer
-certainly
-certainties
-certainty
-certes
-certificate
-certified
-certifies
-certify
-ces
-cesario
-cess
-cesse
-cestern
-cetera
-cette
-chaces
-chaf
-chafe
-chafed
-chafes
-chaff
-chaffless
-chafing
-chain
-chains
-chair
-chairs
-chalic
-chalice
-chalices
-chalk
-chalks
-chalky
-challeng
-challenge
-challenged
-challenger
-challengers
-challenges
-cham
-chamber
-chamberers
-chamberlain
-chamberlains
-chambermaid
-chambermaids
-chambers
-chameleon
-champ
-champagne
-champain
-champains
-champion
-champions
-chanc
-chance
-chanced
-chancellor
-chances
-chandler
-chang
-change
-changeable
-changed
-changeful
-changeling
-changelings
-changer
-changes
-changest
-changing
-channel
-channels
-chanson
-chant
-chanticleer
-chanting
-chantries
-chantry
-chants
-chaos
-chap
-chape
-chapel
-chapeless
-chapels
-chaplain
-chaplains
-chapless
-chaplet
-chapmen
-chaps
-chapter
-character
-charactered
-characterless
-characters
-charactery
-characts
-charbon
-chare
-chares
-charg
-charge
-charged
-chargeful
-charges
-chargeth
-charging
-chariest
-chariness
-charing
-chariot
-chariots
-charitable
-charitably
-charities
-charity
-charlemain
-charles
-charm
-charmed
-charmer
-charmeth
-charmian
-charming
-charmingly
-charms
-charneco
-charnel
-charolois
-charon
-charter
-charters
-chartreux
-chary
-charybdis
-chas
-chase
-chased
-chaser
-chaseth
-chasing
-chaste
-chastely
-chastis
-chastise
-chastised
-chastisement
-chastity
-chat
-chatham
-chatillon
-chats
-chatt
-chattels
-chatter
-chattering
-chattles
-chaud
-chaunted
-chaw
-chawdron
-che
-cheap
-cheapen
-cheaper
-cheapest
-cheaply
-cheapside
-cheat
-cheated
-cheater
-cheaters
-cheating
-cheats
-check
-checked
-checker
-checking
-checks
-cheek
-cheeks
-cheer
-cheered
-cheerer
-cheerful
-cheerfully
-cheering
-cheerless
-cheerly
-cheers
-cheese
-chequer
-cher
-cherish
-cherished
-cherisher
-cherishes
-cherishing
-cherries
-cherry
-cherrypit
-chertsey
-cherub
-cherubims
-cherubin
-cherubins
-cheshu
-chess
-chest
-chester
-chestnut
-chestnuts
-chests
-chetas
-chev
-cheval
-chevalier
-chevaliers
-cheveril
-chew
-chewed
-chewet
-chewing
-chez
-chi
-chick
-chicken
-chickens
-chicurmurco
-chid
-chidden
-chide
-chiders
-chides
-chiding
-chief
-chiefest
-chiefly
-chien
-child
-childed
-childeric
-childhood
-childhoods
-childing
-childish
-childishness
-childlike
-childness
-children
-chill
-chilling
-chime
-chimes
-chimney
-chimneypiece
-chimneys
-chimurcho
-chin
-china
-chine
-chines
-chink
-chinks
-chins
-chipp
-chipper
-chips
-chiron
-chirping
-chirrah
-chirurgeonly
-chisel
-chitopher
-chivalrous
-chivalry
-choice
-choicely
-choicest
-choir
-choirs
-chok
-choke
-choked
-chokes
-choking
-choler
-choleric
-cholers
-chollors
-choose
-chooser
-chooses
-chooseth
-choosing
-chop
-chopine
-choplogic
-chopp
-chopped
-chopping
-choppy
-chops
-chopt
-chor
-choristers
-chorus
-chose
-chosen
-chough
-choughs
-chrish
-christ
-christen
-christendom
-christendoms
-christening
-christenings
-christian
-christianlike
-christians
-christmas
-christom
-christopher
-christophero
-chronicle
-chronicled
-chronicler
-chroniclers
-chronicles
-chrysolite
-chuck
-chucks
-chud
-chuffs
-church
-churches
-churchman
-churchmen
-churchyard
-churchyards
-churl
-churlish
-churlishly
-churls
-churn
-chus
-cicatrice
-cicatrices
-cicely
-cicero
-ciceter
-ciel
-ciitzens
-cilicia
-cimber
-cimmerian
-cinable
-cincture
-cinders
-cine
-cinna
-cinque
-cipher
-ciphers
-circa
-circe
-circle
-circled
-circlets
-circling
-circuit
-circum
-circumcised
-circumference
-circummur
-circumscrib
-circumscribed
-circumscription
-circumspect
-circumstance
-circumstanced
-circumstances
-circumstantial
-circumvent
-circumvention
-cistern
-citadel
-cital
-cite
-cited
-cites
-cities
-citing
-citizen
-citizens
-cittern
-city
-civet
-civil
-civility
-civilly
-clack
-clad
-claim
-claiming
-claims
-clamb
-clamber
-clammer
-clamor
-clamorous
-clamors
-clamour
-clamours
-clang
-clangor
-clap
-clapp
-clapped
-clapper
-clapping
-claps
-clare
-clarence
-claret
-claribel
-clasp
-clasps
-clatter
-claud
-claudio
-claudius
-clause
-claw
-clawed
-clawing
-claws
-clay
-clays
-clean
-cleanliest
-cleanly
-cleans
-cleanse
-cleansing
-clear
-clearer
-clearest
-clearly
-clearness
-clears
-cleave
-cleaving
-clef
-cleft
-cleitus
-clemency
-clement
-cleomenes
-cleopatpa
-cleopatra
-clepeth
-clept
-clerestories
-clergy
-clergyman
-clergymen
-clerk
-clerkly
-clerks
-clew
-client
-clients
-cliff
-clifford
-cliffords
-cliffs
-clifton
-climate
-climature
-climb
-climbed
-climber
-climbeth
-climbing
-climbs
-clime
-cling
-clink
-clinking
-clinquant
-clip
-clipp
-clipper
-clippeth
-clipping
-clipt
-clitus
-clo
-cloak
-cloakbag
-cloaks
-clock
-clocks
-clod
-cloddy
-clodpole
-clog
-clogging
-clogs
-cloister
-cloistress
-cloquence
-clos
-close
-closed
-closely
-closeness
-closer
-closes
-closest
-closet
-closing
-closure
-cloten
-clotens
-cloth
-clothair
-clotharius
-clothe
-clothes
-clothier
-clothiers
-clothing
-cloths
-clotpoles
-clotpoll
-cloud
-clouded
-cloudiness
-clouds
-cloudy
-clout
-clouted
-clouts
-cloven
-clover
-cloves
-clovest
-clowder
-clown
-clownish
-clowns
-cloy
-cloyed
-cloying
-cloyless
-cloyment
-cloys
-club
-clubs
-cluck
-clung
-clust
-clusters
-clutch
-clyster
-cneius
-cnemies
-co
-coach
-coaches
-coachmakers
-coact
-coactive
-coagulate
-coal
-coals
-coarse
-coarsely
-coast
-coasting
-coasts
-coat
-coated
-coats
-cobble
-cobbled
-cobbler
-cobham
-cobloaf
-cobweb
-cobwebs
-cock
-cockatrice
-cockatrices
-cockle
-cockled
-cockney
-cockpit
-cocks
-cocksure
-coctus
-cocytus
-cod
-codding
-codling
-codpiece
-codpieces
-cods
-coelestibus
-coesar
-coeur
-coffer
-coffers
-coffin
-coffins
-cog
-cogging
-cogitation
-cogitations
-cognition
-cognizance
-cogscomb
-cohabitants
-coher
-cohere
-coherence
-coherent
-cohorts
-coif
-coign
-coil
-coin
-coinage
-coiner
-coining
-coins
-col
-colbrand
-colchos
-cold
-colder
-coldest
-coldly
-coldness
-coldspur
-colebrook
-colic
-collar
-collars
-collateral
-colleagued
-collect
-collected
-collection
-college
-colleges
-collied
-collier
-colliers
-collop
-collusion
-colme
-colmekill
-coloquintida
-color
-colors
-colossus
-colour
-colourable
-coloured
-colouring
-colours
-colt
-colted
-colts
-columbine
-columbines
-colville
-com
-comagene
-comart
-comb
-combat
-combatant
-combatants
-combated
-combating
-combin
-combinate
-combination
-combine
-combined
-combless
-combustion
-come
-comedian
-comedians
-comedy
-comeliness
-comely
-comer
-comers
-comes
-comest
-comet
-cometh
-comets
-comfect
-comfit
-comfits
-comfort
-comfortable
-comforted
-comforter
-comforting
-comfortless
-comforts
-comic
-comical
-coming
-comings
-cominius
-comma
-command
-commande
-commanded
-commander
-commanders
-commanding
-commandment
-commandments
-commands
-comme
-commenc
-commence
-commenced
-commencement
-commences
-commencing
-commend
-commendable
-commendation
-commendations
-commended
-commending
-commends
-comment
-commentaries
-commenting
-comments
-commerce
-commingled
-commiseration
-commission
-commissioners
-commissions
-commit
-commits
-committ
-committed
-committing
-commix
-commixed
-commixtion
-commixture
-commodious
-commodities
-commodity
-common
-commonalty
-commoner
-commoners
-commonly
-commons
-commonweal
-commonwealth
-commotion
-commotions
-commune
-communicat
-communicate
-communication
-communities
-community
-comonty
-compact
-companies
-companion
-companions
-companionship
-company
-compar
-comparative
-compare
-compared
-comparing
-comparison
-comparisons
-compartner
-compass
-compasses
-compassing
-compassion
-compassionate
-compeers
-compel
-compell
-compelled
-compelling
-compels
-compensation
-competence
-competency
-competent
-competitor
-competitors
-compil
-compile
-compiled
-complain
-complainer
-complainest
-complaining
-complainings
-complains
-complaint
-complaints
-complement
-complements
-complete
-complexion
-complexioned
-complexions
-complices
-complies
-compliment
-complimental
-compliments
-complot
-complots
-complotted
-comply
-compos
-compose
-composed
-composition
-compost
-composture
-composure
-compound
-compounded
-compounds
-comprehend
-comprehended
-comprehends
-compremises
-compris
-comprising
-compromis
-compromise
-compt
-comptible
-comptrollers
-compulsatory
-compulsion
-compulsive
-compunctious
-computation
-comrade
-comrades
-comutual
-con
-concave
-concavities
-conceal
-concealed
-concealing
-concealment
-concealments
-conceals
-conceit
-conceited
-conceitless
-conceits
-conceiv
-conceive
-conceived
-conceives
-conceiving
-conception
-conceptions
-conceptious
-concern
-concernancy
-concerneth
-concerning
-concernings
-concerns
-conclave
-conclud
-conclude
-concluded
-concludes
-concluding
-conclusion
-conclusions
-concolinel
-concord
-concubine
-concupiscible
-concupy
-concur
-concurring
-concurs
-condemn
-condemnation
-condemned
-condemning
-condemns
-condescend
-condign
-condition
-conditionally
-conditions
-condole
-condolement
-condoling
-conduce
-conduct
-conducted
-conducting
-conductor
-conduit
-conduits
-conected
-coney
-confection
-confectionary
-confections
-confederacy
-confederate
-confederates
-confer
-conference
-conferr
-conferring
-confess
-confessed
-confesses
-confesseth
-confessing
-confession
-confessions
-confessor
-confidence
-confident
-confidently
-confin
-confine
-confined
-confineless
-confiners
-confines
-confining
-confirm
-confirmation
-confirmations
-confirmed
-confirmer
-confirmers
-confirming
-confirmities
-confirms
-confiscate
-confiscated
-confiscation
-confixed
-conflict
-conflicting
-conflicts
-confluence
-conflux
-conform
-conformable
-confound
-confounded
-confounding
-confounds
-confront
-confronted
-confus
-confused
-confusedly
-confusion
-confusions
-confutation
-confutes
-congeal
-congealed
-congealment
-congee
-conger
-congest
-congied
-congratulate
-congreeing
-congreeted
-congregate
-congregated
-congregation
-congregations
-congruent
-congruing
-conies
-conjectural
-conjecture
-conjectures
-conjoin
-conjoined
-conjoins
-conjointly
-conjunct
-conjunction
-conjunctive
-conjur
-conjuration
-conjurations
-conjure
-conjured
-conjurer
-conjurers
-conjures
-conjuring
-conjuro
-conn
-connected
-connive
-conqu
-conquer
-conquered
-conquering
-conqueror
-conquerors
-conquers
-conquest
-conquests
-conquring
-conrade
-cons
-consanguineous
-consanguinity
-conscienc
-conscience
-consciences
-conscionable
-consecrate
-consecrated
-consecrations
-consent
-consented
-consenting
-consents
-consequence
-consequences
-consequently
-conserve
-conserved
-conserves
-consider
-considerance
-considerate
-consideration
-considerations
-considered
-considering
-considerings
-considers
-consign
-consigning
-consist
-consisteth
-consisting
-consistory
-consists
-consolate
-consolation
-consonancy
-consonant
-consort
-consorted
-consortest
-conspectuities
-conspir
-conspiracy
-conspirant
-conspirator
-conspirators
-conspire
-conspired
-conspirers
-conspires
-conspiring
-constable
-constables
-constance
-constancies
-constancy
-constant
-constantine
-constantinople
-constantly
-constellation
-constitution
-constrain
-constrained
-constraineth
-constrains
-constraint
-constring
-construction
-construe
-consul
-consuls
-consulship
-consulships
-consult
-consulting
-consults
-consum
-consume
-consumed
-consumes
-consuming
-consummate
-consummation
-consumption
-consumptions
-contagion
-contagious
-contain
-containing
-contains
-contaminate
-contaminated
-contemn
-contemned
-contemning
-contemns
-contemplate
-contemplation
-contemplative
-contempt
-contemptible
-contempts
-contemptuous
-contemptuously
-contend
-contended
-contending
-contendon
-content
-contenta
-contented
-contenteth
-contention
-contentious
-contentless
-contento
-contents
-contest
-contestation
-continence
-continency
-continent
-continents
-continu
-continual
-continually
-continuance
-continuantly
-continuate
-continue
-continued
-continuer
-continues
-continuing
-contract
-contracted
-contracting
-contraction
-contradict
-contradicted
-contradiction
-contradicts
-contraries
-contrarieties
-contrariety
-contrarious
-contrariously
-contrary
-contre
-contribution
-contributors
-contrite
-contriv
-contrive
-contrived
-contriver
-contrives
-contriving
-control
-controll
-controller
-controlling
-controlment
-controls
-controversy
-contumelious
-contumeliously
-contumely
-contusions
-convenience
-conveniences
-conveniency
-convenient
-conveniently
-convented
-conventicles
-convents
-convers
-conversant
-conversation
-conversations
-converse
-conversed
-converses
-conversing
-conversion
-convert
-converted
-convertest
-converting
-convertite
-convertites
-converts
-convey
-conveyance
-conveyances
-conveyers
-conveying
-convict
-convicted
-convince
-convinced
-convinces
-convive
-convocation
-convoy
-convulsions
-cony
-cook
-cookery
-cooks
-cool
-cooled
-cooling
-cools
-coop
-coops
-cop
-copatain
-cope
-cophetua
-copied
-copies
-copious
-copper
-copperspur
-coppice
-copulation
-copulatives
-copy
-cor
-coragio
-coral
-coram
-corambus
-coranto
-corantos
-corbo
-cord
-corded
-cordelia
-cordial
-cordis
-cords
-core
-corin
-corinth
-corinthian
-coriolanus
-corioli
-cork
-corky
-cormorant
-corn
-cornelia
-cornelius
-corner
-corners
-cornerstone
-cornets
-cornish
-corns
-cornuto
-cornwall
-corollary
-coronal
-coronation
-coronet
-coronets
-corporal
-corporals
-corporate
-corpse
-corpulent
-correct
-corrected
-correcting
-correction
-correctioner
-corrects
-correspondence
-correspondent
-corresponding
-corresponsive
-corrigible
-corrival
-corrivals
-corroborate
-corrosive
-corrupt
-corrupted
-corrupter
-corrupters
-corruptible
-corruptibly
-corrupting
-corruption
-corruptly
-corrupts
-corse
-corses
-corslet
-cosmo
-cost
-costard
-costermongers
-costlier
-costly
-costs
-cot
-cote
-coted
-cotsall
-cotsole
-cotswold
-cottage
-cottages
-cotus
-couch
-couched
-couching
-couchings
-coude
-cough
-coughing
-could
-couldst
-coulter
-council
-councillor
-councils
-counsel
-counsell
-counsellor
-counsellors
-counselor
-counselors
-counsels
-count
-counted
-countenanc
-countenance
-countenances
-counter
-counterchange
-countercheck
-counterfeit
-counterfeited
-counterfeiting
-counterfeitly
-counterfeits
-countermand
-countermands
-countermines
-counterpart
-counterpoints
-counterpois
-counterpoise
-counters
-countervail
-countess
-countesses
-counties
-counting
-countless
-countries
-countrv
-country
-countryman
-countrymen
-counts
-county
-couper
-couple
-coupled
-couplement
-couples
-couplet
-couplets
-cour
-courage
-courageous
-courageously
-courages
-courier
-couriers
-couronne
-cours
-course
-coursed
-courser
-coursers
-courses
-coursing
-court
-courted
-courteous
-courteously
-courtesan
-courtesies
-courtesy
-courtezan
-courtezans
-courtier
-courtiers
-courtlike
-courtly
-courtney
-courts
-courtship
-cousin
-cousins
-couterfeit
-coutume
-covenant
-covenants
-covent
-coventry
-cover
-covered
-covering
-coverlet
-covers
-covert
-covertly
-coverture
-covet
-coveted
-coveting
-covetings
-covetous
-covetously
-covetousness
-covets
-cow
-coward
-cowarded
-cowardice
-cowardly
-cowards
-cowardship
-cowish
-cowl
-cowslip
-cowslips
-cox
-coxcomb
-coxcombs
-coy
-coystrill
-coz
-cozen
-cozenage
-cozened
-cozener
-cozeners
-cozening
-coziers
-crab
-crabbed
-crabs
-crack
-cracked
-cracker
-crackers
-cracking
-cracks
-cradle
-cradled
-cradles
-craft
-crafted
-craftied
-craftier
-craftily
-crafts
-craftsmen
-crafty
-cram
-cramm
-cramp
-cramps
-crams
-cranking
-cranks
-cranmer
-crannied
-crannies
-cranny
-crants
-crare
-crash
-crassus
-crav
-crave
-craved
-craven
-cravens
-craves
-craveth
-craving
-crawl
-crawling
-crawls
-craz
-crazed
-crazy
-creaking
-cream
-create
-created
-creates
-creating
-creation
-creator
-creature
-creatures
-credence
-credent
-credible
-credit
-creditor
-creditors
-credo
-credulity
-credulous
-creed
-creek
-creeks
-creep
-creeping
-creeps
-crept
-crescent
-crescive
-cressets
-cressid
-cressida
-cressids
-cressy
-crest
-crested
-crestfall
-crestless
-crests
-cretan
-crete
-crevice
-crew
-crews
-crib
-cribb
-cribs
-cricket
-crickets
-cried
-criedst
-crier
-cries
-criest
-crieth
-crime
-crimeful
-crimeless
-crimes
-criminal
-crimson
-cringe
-cripple
-crisp
-crisped
-crispian
-crispianus
-crispin
-critic
-critical
-critics
-croak
-croaking
-croaks
-crocodile
-cromer
-cromwell
-crone
-crook
-crookback
-crooked
-crooking
-crop
-cropp
-crosby
-cross
-crossed
-crosses
-crossest
-crossing
-crossings
-crossly
-crossness
-crost
-crotchets
-crouch
-crouching
-crow
-crowd
-crowded
-crowding
-crowds
-crowflowers
-crowing
-crowkeeper
-crown
-crowned
-crowner
-crownet
-crownets
-crowning
-crowns
-crows
-crudy
-cruel
-cruell
-crueller
-cruelly
-cruels
-cruelty
-crum
-crumble
-crumbs
-crupper
-crusadoes
-crush
-crushed
-crushest
-crushing
-crust
-crusts
-crusty
-crutch
-crutches
-cry
-crying
-crystal
-crystalline
-crystals
-cub
-cubbert
-cubiculo
-cubit
-cubs
-cuckold
-cuckoldly
-cuckolds
-cuckoo
-cucullus
-cudgel
-cudgeled
-cudgell
-cudgelling
-cudgels
-cue
-cues
-cuff
-cuffs
-cuique
-cull
-culling
-cullion
-cullionly
-cullions
-culpable
-culverin
-cum
-cumber
-cumberland
-cunning
-cunningly
-cunnings
-cuore
-cup
-cupbearer
-cupboarding
-cupid
-cupids
-cuppele
-cups
-cur
-curan
-curate
-curb
-curbed
-curbing
-curbs
-curd
-curdied
-curds
-cure
-cured
-cureless
-curer
-cures
-curfew
-curing
-curio
-curiosity
-curious
-curiously
-curl
-curled
-curling
-curls
-currance
-currants
-current
-currents
-currish
-curry
-curs
-curse
-cursed
-curses
-cursies
-cursing
-cursorary
-curst
-curster
-curstest
-curstness
-cursy
-curtail
-curtain
-curtains
-curtal
-curtis
-curtle
-curtsied
-curtsies
-curtsy
-curvet
-curvets
-cushes
-cushion
-cushions
-custalorum
-custard
-custody
-custom
-customary
-customed
-customer
-customers
-customs
-custure
-cut
-cutler
-cutpurse
-cutpurses
-cuts
-cutter
-cutting
-cuttle
-cxsar
-cyclops
-cydnus
-cygnet
-cygnets
-cym
-cymbals
-cymbeline
-cyme
-cynic
-cynthia
-cypress
-cypriot
-cyprus
-cyrus
-cytherea
-d
-dabbled
-dace
-dad
-daedalus
-daemon
-daff
-daffed
-daffest
-daffodils
-dagger
-daggers
-dagonet
-daily
-daintier
-dainties
-daintiest
-daintily
-daintiness
-daintry
-dainty
-daisied
-daisies
-daisy
-dale
-dalliance
-dallied
-dallies
-dally
-dallying
-dalmatians
-dam
-damage
-damascus
-damask
-damasked
-dame
-dames
-damm
-damn
-damnable
-damnably
-damnation
-damned
-damns
-damoiselle
-damon
-damosella
-damp
-dams
-damsel
-damsons
-dan
-danc
-dance
-dancer
-dances
-dancing
-dandle
-dandy
-dane
-dang
-danger
-dangerous
-dangerously
-dangers
-dangling
-daniel
-danish
-dank
-dankish
-danskers
-daphne
-dappled
-dapples
-dar
-dardan
-dardanian
-dardanius
-dare
-dared
-dareful
-dares
-darest
-daring
-darius
-dark
-darken
-darkening
-darkens
-darker
-darkest
-darkling
-darkly
-darkness
-darling
-darlings
-darnel
-darraign
-dart
-darted
-darter
-dartford
-darting
-darts
-dash
-dashes
-dashing
-dastard
-dastards
-dat
-datchet
-date
-dated
-dateless
-dates
-daub
-daughter
-daughters
-daunt
-daunted
-dauntless
-dauphin
-daventry
-davy
-daw
-dawn
-dawning
-daws
-day
-daylight
-days
-dazzle
-dazzled
-dazzling
-de
-dead
-deadly
-deaf
-deafing
-deafness
-deafs
-deal
-dealer
-dealers
-dealest
-dealing
-dealings
-deals
-dealt
-dean
-deanery
-dear
-dearer
-dearest
-dearly
-dearness
-dears
-dearth
-dearths
-death
-deathbed
-deathful
-deaths
-deathsman
-deathsmen
-debarred
-debase
-debate
-debated
-debatement
-debateth
-debating
-debauch
-debile
-debility
-debitor
-debonair
-deborah
-debosh
-debt
-debted
-debtor
-debtors
-debts
-debuty
-decay
-decayed
-decayer
-decaying
-decays
-deceas
-decease
-deceased
-deceit
-deceitful
-deceits
-deceiv
-deceivable
-deceive
-deceived
-deceiver
-deceivers
-deceives
-deceivest
-deceiveth
-deceiving
-december
-decent
-deceptious
-decerns
-decide
-decides
-decimation
-decipher
-deciphers
-decision
-decius
-deck
-decking
-decks
-deckt
-declare
-declares
-declension
-declensions
-declin
-decline
-declined
-declines
-declining
-decoct
-decorum
-decreas
-decrease
-decreasing
-decree
-decreed
-decrees
-decrepit
-dedicate
-dedicated
-dedicates
-dedication
-deed
-deedless
-deeds
-deem
-deemed
-deep
-deeper
-deepest
-deeply
-deeps
-deepvow
-deer
-deesse
-defac
-deface
-defaced
-defacer
-defacers
-defacing
-defam
-default
-defeat
-defeated
-defeats
-defeatures
-defect
-defective
-defects
-defence
-defences
-defend
-defendant
-defended
-defender
-defenders
-defending
-defends
-defense
-defensible
-defensive
-defer
-deferr
-defiance
-deficient
-defied
-defies
-defil
-defile
-defiler
-defiles
-defiling
-define
-definement
-definite
-definitive
-definitively
-deflow
-deflower
-deflowered
-deform
-deformed
-deformities
-deformity
-deftly
-defunct
-defunction
-defuse
-defy
-defying
-degenerate
-degraded
-degree
-degrees
-deified
-deifying
-deign
-deigned
-deiphobus
-deities
-deity
-deja
-deject
-dejected
-delabreth
-delay
-delayed
-delaying
-delays
-delectable
-deliberate
-delicate
-delicates
-delicious
-deliciousness
-delight
-delighted
-delightful
-delights
-delinquents
-deliv
-deliver
-deliverance
-delivered
-delivering
-delivers
-delivery
-delphos
-deluded
-deluding
-deluge
-delve
-delver
-delves
-demand
-demanded
-demanding
-demands
-demean
-demeanor
-demeanour
-demerits
-demesnes
-demetrius
-demi
-demigod
-demise
-demoiselles
-demon
-demonstrable
-demonstrate
-demonstrated
-demonstrating
-demonstration
-demonstrative
-demure
-demurely
-demuring
-den
-denay
-deni
-denial
-denials
-denied
-denier
-denies
-deniest
-denis
-denmark
-dennis
-denny
-denote
-denoted
-denotement
-denounc
-denounce
-denouncing
-dens
-denunciation
-deny
-denying
-deo
-depart
-departed
-departest
-departing
-departure
-depeche
-depend
-dependant
-dependants
-depended
-dependence
-dependences
-dependency
-dependent
-dependents
-depender
-depending
-depends
-deplore
-deploring
-depopulate
-depos
-depose
-deposed
-deposing
-depositaries
-deprav
-depravation
-deprave
-depraved
-depraves
-depress
-depriv
-deprive
-depth
-depths
-deputation
-depute
-deputed
-deputies
-deputing
-deputy
-deracinate
-derby
-dercetas
-dere
-derides
-derision
-deriv
-derivation
-derivative
-derive
-derived
-derives
-derogate
-derogately
-derogation
-des
-desartless
-descant
-descend
-descended
-descending
-descends
-descension
-descent
-descents
-describe
-described
-describes
-descried
-description
-descriptions
-descry
-desdemon
-desdemona
-desert
-deserts
-deserv
-deserve
-deserved
-deservedly
-deserver
-deservers
-deserves
-deservest
-deserving
-deservings
-design
-designment
-designments
-designs
-desir
-desire
-desired
-desirers
-desires
-desirest
-desiring
-desirous
-desist
-desk
-desolate
-desolation
-desp
-despair
-despairing
-despairs
-despatch
-desperate
-desperately
-desperation
-despis
-despise
-despised
-despiser
-despiseth
-despising
-despite
-despiteful
-despoiled
-dest
-destin
-destined
-destinies
-destiny
-destitute
-destroy
-destroyed
-destroyer
-destroyers
-destroying
-destroys
-destruction
-destructions
-det
-detain
-detains
-detect
-detected
-detecting
-detection
-detector
-detects
-detention
-determin
-determinate
-determination
-determinations
-determine
-determined
-determines
-detest
-detestable
-detested
-detesting
-detests
-detract
-detraction
-detractions
-deucalion
-deuce
-deum
-deux
-devant
-devesting
-device
-devices
-devil
-devilish
-devils
-devis
-devise
-devised
-devises
-devising
-devoid
-devonshire
-devote
-devoted
-devotion
-devour
-devoured
-devourers
-devouring
-devours
-devout
-devoutly
-dew
-dewberries
-dewdrops
-dewlap
-dewlapp
-dews
-dewy
-dexter
-dexteriously
-dexterity
-di
-diable
-diablo
-diadem
-dial
-dialect
-dialogue
-dialogued
-dials
-diameter
-diamond
-diamonds
-dian
-diana
-diaper
-dibble
-dic
-dice
-dicers
-dich
-dick
-dickens
-dickon
-dicky
-dictator
-diction
-dictynna
-did
-diddle
-didest
-dido
-didst
-die
-died
-diedst
-dies
-diest
-diet
-dieted
-dieter
-dieu
-diff
-differ
-difference
-differences
-differency
-different
-differing
-differs
-difficile
-difficult
-difficulties
-difficulty
-diffidence
-diffidences
-diffus
-diffused
-diffusest
-dig
-digest
-digested
-digestion
-digestions
-digg
-digging
-dighton
-dignified
-dignifies
-dignify
-dignities
-dignity
-digress
-digressing
-digression
-digs
-digt
-dilate
-dilated
-dilations
-dilatory
-dild
-dildos
-dilemma
-dilemmas
-diligence
-diligent
-diluculo
-dim
-dimension
-dimensions
-diminish
-diminishing
-diminution
-diminutive
-diminutives
-dimm
-dimmed
-dimming
-dimpled
-dimples
-dims
-din
-dine
-dined
-diner
-dines
-ding
-dining
-dinner
-dinners
-dinnertime
-dint
-diomed
-diomede
-diomedes
-dion
-dip
-dipp
-dipping
-dips
-dir
-dire
-direct
-directed
-directing
-direction
-directions
-directitude
-directive
-directly
-directs
-direful
-direness
-direst
-dirge
-dirges
-dirt
-dirty
-dis
-disability
-disable
-disabled
-disabling
-disadvantage
-disagree
-disallow
-disanimates
-disannul
-disannuls
-disappointed
-disarm
-disarmed
-disarmeth
-disarms
-disaster
-disasters
-disastrous
-disbench
-disbranch
-disburdened
-disburs
-disburse
-disbursed
-discandy
-discandying
-discard
-discarded
-discase
-discased
-discern
-discerner
-discerning
-discernings
-discerns
-discharg
-discharge
-discharged
-discharging
-discipled
-disciples
-disciplin
-discipline
-disciplined
-disciplines
-disclaim
-disclaiming
-disclaims
-disclos
-disclose
-disclosed
-discloses
-discolour
-discoloured
-discolours
-discomfit
-discomfited
-discomfiture
-discomfort
-discomfortable
-discommend
-disconsolate
-discontent
-discontented
-discontentedly
-discontenting
-discontents
-discontinue
-discontinued
-discord
-discordant
-discords
-discourse
-discoursed
-discourser
-discourses
-discoursive
-discourtesy
-discov
-discover
-discovered
-discoverers
-discoveries
-discovering
-discovers
-discovery
-discredit
-discredited
-discredits
-discreet
-discreetly
-discretion
-discretions
-discuss
-disdain
-disdained
-disdaineth
-disdainful
-disdainfully
-disdaining
-disdains
-disdnguish
-diseas
-disease
-diseased
-diseases
-disedg
-disembark
-disfigure
-disfigured
-disfurnish
-disgorge
-disgrac
-disgrace
-disgraced
-disgraceful
-disgraces
-disgracing
-disgracious
-disguis
-disguise
-disguised
-disguiser
-disguises
-disguising
-dish
-dishabited
-dishclout
-dishearten
-disheartens
-dishes
-dishonest
-dishonestly
-dishonesty
-dishonor
-dishonorable
-dishonors
-dishonour
-dishonourable
-dishonoured
-dishonours
-disinherit
-disinherited
-disjoin
-disjoining
-disjoins
-disjoint
-disjunction
-dislik
-dislike
-disliken
-dislikes
-dislimns
-dislocate
-dislodg
-disloyal
-disloyalty
-dismal
-dismantle
-dismantled
-dismask
-dismay
-dismayed
-dismemb
-dismember
-dismes
-dismiss
-dismissed
-dismissing
-dismission
-dismount
-dismounted
-disnatur
-disobedience
-disobedient
-disobey
-disobeys
-disorb
-disorder
-disordered
-disorderly
-disorders
-disparage
-disparagement
-disparagements
-dispark
-dispatch
-dispensation
-dispense
-dispenses
-dispers
-disperse
-dispersed
-dispersedly
-dispersing
-dispiteous
-displac
-displace
-displaced
-displant
-displanting
-display
-displayed
-displeas
-displease
-displeased
-displeasing
-displeasure
-displeasures
-disponge
-disport
-disports
-dispos
-dispose
-disposed
-disposer
-disposing
-disposition
-dispositions
-dispossess
-dispossessing
-disprais
-dispraise
-dispraising
-dispraisingly
-dispropertied
-disproportion
-disproportioned
-disprov
-disprove
-disproved
-dispursed
-disputable
-disputation
-disputations
-dispute
-disputed
-disputes
-disputing
-disquantity
-disquiet
-disquietly
-disrelish
-disrobe
-disseat
-dissemble
-dissembled
-dissembler
-dissemblers
-dissembling
-dissembly
-dissension
-dissensions
-dissentious
-dissever
-dissipation
-dissolute
-dissolutely
-dissolution
-dissolutions
-dissolv
-dissolve
-dissolved
-dissolves
-dissuade
-dissuaded
-distaff
-distaffs
-distain
-distains
-distance
-distant
-distaste
-distasted
-distasteful
-distemp
-distemper
-distemperature
-distemperatures
-distempered
-distempering
-distil
-distill
-distillation
-distilled
-distills
-distilment
-distinct
-distinction
-distinctly
-distingue
-distinguish
-distinguishes
-distinguishment
-distract
-distracted
-distractedly
-distraction
-distractions
-distracts
-distrain
-distraught
-distress
-distressed
-distresses
-distressful
-distribute
-distributed
-distribution
-distrust
-distrustful
-disturb
-disturbed
-disturbers
-disturbing
-disunite
-disvalued
-disvouch
-dit
-ditch
-ditchers
-ditches
-dites
-ditties
-ditty
-diurnal
-div
-dive
-diver
-divers
-diversely
-diversity
-divert
-diverted
-diverts
-dives
-divest
-dividable
-dividant
-divide
-divided
-divides
-divideth
-divin
-divination
-divine
-divinely
-divineness
-diviner
-divines
-divinest
-divining
-divinity
-division
-divisions
-divorc
-divorce
-divorced
-divorcement
-divorcing
-divulg
-divulge
-divulged
-divulging
-dizy
-dizzy
-do
-doating
-dobbin
-dock
-docks
-doct
-doctor
-doctors
-doctrine
-document
-dodge
-doe
-doer
-doers
-does
-doest
-doff
-dog
-dogberry
-dogfish
-dogg
-dogged
-dogs
-doigts
-doing
-doings
-doit
-doits
-dolabella
-dole
-doleful
-doll
-dollar
-dollars
-dolor
-dolorous
-dolour
-dolours
-dolphin
-dolt
-dolts
-domestic
-domestics
-dominance
-dominations
-dominator
-domine
-domineer
-domineering
-dominical
-dominion
-dominions
-domitius
-dommelton
-don
-donalbain
-donation
-donc
-doncaster
-done
-dong
-donn
-donne
-donner
-donnerai
-doom
-doomsday
-door
-doorkeeper
-doors
-dorcas
-doreus
-doricles
-dormouse
-dorothy
-dorset
-dorsetshire
-dost
-dotage
-dotant
-dotard
-dotards
-dote
-doted
-doters
-dotes
-doteth
-doth
-doting
-double
-doubled
-doubleness
-doubler
-doublet
-doublets
-doubling
-doubly
-doubt
-doubted
-doubtful
-doubtfully
-doubting
-doubtless
-doubts
-doug
-dough
-doughty
-doughy
-douglas
-dout
-doute
-douts
-dove
-dovehouse
-dover
-doves
-dow
-dowager
-dowdy
-dower
-dowerless
-dowers
-dowlas
-dowle
-down
-downfall
-downright
-downs
-downstairs
-downtrod
-downward
-downwards
-downy
-dowries
-dowry
-dowsabel
-doxy
-dozed
-dozen
-dozens
-dozy
-drab
-drabbing
-drabs
-drachma
-drachmas
-draff
-drag
-dragg
-dragged
-dragging
-dragon
-dragonish
-dragons
-drain
-drained
-drains
-drake
-dram
-dramatis
-drank
-draught
-draughts
-drave
-draw
-drawbridge
-drawer
-drawers
-draweth
-drawing
-drawling
-drawn
-draws
-drayman
-draymen
-dread
-dreaded
-dreadful
-dreadfully
-dreading
-dreads
-dream
-dreamer
-dreamers
-dreaming
-dreams
-dreamt
-drearning
-dreary
-dreg
-dregs
-drench
-drenched
-dress
-dressed
-dresser
-dressing
-dressings
-drest
-drew
-dribbling
-dried
-drier
-dries
-drift
-drily
-drink
-drinketh
-drinking
-drinkings
-drinks
-driv
-drive
-drivelling
-driven
-drives
-driveth
-driving
-drizzle
-drizzled
-drizzles
-droit
-drollery
-dromio
-dromios
-drone
-drones
-droop
-droopeth
-drooping
-droops
-drop
-dropheir
-droplets
-dropp
-dropper
-droppeth
-dropping
-droppings
-drops
-dropsied
-dropsies
-dropsy
-dropt
-dross
-drossy
-drought
-drove
-droven
-drovier
-drown
-drowned
-drowning
-drowns
-drows
-drowse
-drowsily
-drowsiness
-drowsy
-drudge
-drudgery
-drudges
-drug
-drugg
-drugs
-drum
-drumble
-drummer
-drumming
-drums
-drunk
-drunkard
-drunkards
-drunken
-drunkenly
-drunkenness
-dry
-dryness
-dst
-du
-dub
-dubb
-ducat
-ducats
-ducdame
-duchess
-duchies
-duchy
-duck
-ducking
-ducks
-dudgeon
-due
-duellist
-duello
-duer
-dues
-duff
-dug
-dugs
-duke
-dukedom
-dukedoms
-dukes
-dulcet
-dulche
-dull
-dullard
-duller
-dullest
-dulling
-dullness
-dulls
-dully
-dulness
-duly
-dumain
-dumb
-dumbe
-dumbly
-dumbness
-dump
-dumps
-dun
-duncan
-dung
-dungeon
-dungeons
-dunghill
-dunghills
-dungy
-dunnest
-dunsinane
-dunsmore
-dunstable
-dupp
-durance
-during
-durst
-dusky
-dust
-dusted
-dusty
-dutch
-dutchman
-duteous
-duties
-dutiful
-duty
-dwarf
-dwarfish
-dwell
-dwellers
-dwelling
-dwells
-dwelt
-dwindle
-dy
-dye
-dyed
-dyer
-dying
-e
-each
-eager
-eagerly
-eagerness
-eagle
-eagles
-eaning
-eanlings
-ear
-earing
-earl
-earldom
-earlier
-earliest
-earliness
-earls
-early
-earn
-earned
-earnest
-earnestly
-earnestness
-earns
-ears
-earth
-earthen
-earthlier
-earthly
-earthquake
-earthquakes
-earthy
-eas
-ease
-eased
-easeful
-eases
-easier
-easiest
-easiliest
-easily
-easiness
-easing
-east
-eastcheap
-easter
-eastern
-eastward
-easy
-eat
-eaten
-eater
-eaters
-eating
-eats
-eaux
-eaves
-ebb
-ebbing
-ebbs
-ebon
-ebony
-ebrew
-ecce
-echapper
-echo
-echoes
-eclips
-eclipse
-eclipses
-ecolier
-ecoutez
-ecstacy
-ecstasies
-ecstasy
-ecus
-eden
-edg
-edgar
-edge
-edged
-edgeless
-edges
-edict
-edicts
-edifice
-edifices
-edified
-edifies
-edition
-edm
-edmund
-edmunds
-edmundsbury
-educate
-educated
-education
-edward
-eel
-eels
-effect
-effected
-effectless
-effects
-effectual
-effectually
-effeminate
-effigies
-effus
-effuse
-effusion
-eftest
-egal
-egally
-eget
-egeus
-egg
-eggs
-eggshell
-eglamour
-eglantine
-egma
-ego
-egregious
-egregiously
-egress
-egypt
-egyptian
-egyptians
-eie
-eight
-eighteen
-eighth
-eightpenny
-eighty
-eisel
-either
-eject
-eke
-el
-elbe
-elbow
-elbows
-eld
-elder
-elders
-eldest
-eleanor
-elect
-elected
-election
-elegancy
-elegies
-element
-elements
-elephant
-elephants
-elevated
-eleven
-eleventh
-elf
-elflocks
-eliads
-elinor
-elizabeth
-ell
-elle
-ellen
-elm
-eloquence
-eloquent
-else
-elsewhere
-elsinore
-eltham
-elves
-elvish
-ely
-elysium
-em
-emballing
-embalm
-embalms
-embark
-embarked
-embarquements
-embassade
-embassage
-embassies
-embassy
-embattailed
-embattl
-embattle
-embay
-embellished
-embers
-emblaze
-emblem
-emblems
-embodied
-embold
-emboldens
-emboss
-embossed
-embounded
-embowel
-embowell
-embrac
-embrace
-embraced
-embracement
-embracements
-embraces
-embracing
-embrasures
-embroider
-embroidery
-emhracing
-emilia
-eminence
-eminent
-eminently
-emmanuel
-emnity
-empale
-emperal
-emperess
-emperial
-emperor
-empery
-emphasis
-empire
-empirics
-empiricutic
-empleached
-employ
-employed
-employer
-employment
-employments
-empoison
-empress
-emptied
-emptier
-empties
-emptiness
-empty
-emptying
-emulate
-emulation
-emulations
-emulator
-emulous
-en
-enact
-enacted
-enacts
-enactures
-enamell
-enamelled
-enamour
-enamoured
-enanmour
-encamp
-encamped
-encave
-enceladus
-enchaf
-enchafed
-enchant
-enchanted
-enchanting
-enchantingly
-enchantment
-enchantress
-enchants
-enchas
-encircle
-encircled
-enclos
-enclose
-enclosed
-encloses
-encloseth
-enclosing
-enclouded
-encompass
-encompassed
-encompasseth
-encompassment
-encore
-encorporal
-encount
-encounter
-encountered
-encounters
-encourage
-encouraged
-encouragement
-encrimsoned
-encroaching
-encumb
-end
-endamage
-endamagement
-endanger
-endart
-endear
-endeared
-endeavour
-endeavours
-ended
-ender
-ending
-endings
-endite
-endless
-endow
-endowed
-endowments
-endows
-ends
-endu
-endue
-endur
-endurance
-endure
-endured
-endures
-enduring
-endymion
-eneas
-enemies
-enemy
-enernies
-enew
-enfeebled
-enfeebles
-enfeoff
-enfetter
-enfoldings
-enforc
-enforce
-enforced
-enforcedly
-enforcement
-enforces
-enforcest
-enfranched
-enfranchis
-enfranchise
-enfranchised
-enfranchisement
-enfreed
-enfreedoming
-engag
-engage
-engaged
-engagements
-engaging
-engaol
-engend
-engender
-engenders
-engilds
-engine
-engineer
-enginer
-engines
-engirt
-england
-english
-englishman
-englishmen
-engluts
-englutted
-engraffed
-engraft
-engrafted
-engrav
-engrave
-engross
-engrossed
-engrossest
-engrossing
-engrossments
-enguard
-enigma
-enigmatical
-enjoin
-enjoined
-enjoy
-enjoyed
-enjoyer
-enjoying
-enjoys
-enkindle
-enkindled
-enlard
-enlarg
-enlarge
-enlarged
-enlargement
-enlargeth
-enlighten
-enlink
-enmesh
-enmities
-enmity
-ennoble
-ennobled
-enobarb
-enobarbus
-enon
-enormity
-enormous
-enough
-enow
-enpatron
-enpierced
-enquir
-enquire
-enquired
-enrag
-enrage
-enraged
-enrages
-enrank
-enrapt
-enrich
-enriched
-enriches
-enridged
-enrings
-enrob
-enrobe
-enroll
-enrolled
-enrooted
-enrounded
-enschedul
-ensconce
-ensconcing
-enseamed
-ensear
-enseigne
-enseignez
-ensemble
-enshelter
-enshielded
-enshrines
-ensign
-ensigns
-enskied
-ensman
-ensnare
-ensnared
-ensnareth
-ensteep
-ensu
-ensue
-ensued
-ensues
-ensuing
-enswathed
-ent
-entail
-entame
-entangled
-entangles
-entendre
-enter
-entered
-entering
-enterprise
-enterprises
-enters
-entertain
-entertained
-entertainer
-entertaining
-entertainment
-entertainments
-enthrall
-enthralled
-enthron
-enthroned
-entice
-enticements
-enticing
-entire
-entirely
-entitle
-entitled
-entitling
-entomb
-entombed
-entrails
-entrance
-entrances
-entrap
-entrapp
-entre
-entreat
-entreated
-entreaties
-entreating
-entreatments
-entreats
-entreaty
-entrench
-entry
-entwist
-envelop
-envenom
-envenomed
-envenoms
-envied
-envies
-envious
-enviously
-environ
-environed
-envoy
-envy
-envying
-enwheel
-enwombed
-enwraps
-ephesian
-ephesians
-ephesus
-epicure
-epicurean
-epicures
-epicurism
-epicurus
-epidamnum
-epidaurus
-epigram
-epilepsy
-epileptic
-epilogue
-epilogues
-epistles
-epistrophus
-epitaph
-epitaphs
-epithet
-epitheton
-epithets
-epitome
-equal
-equalities
-equality
-equall
-equally
-equalness
-equals
-equinoctial
-equinox
-equipage
-equity
-equivocal
-equivocate
-equivocates
-equivocation
-equivocator
-er
-erbear
-erbearing
-erbears
-erbeat
-erblows
-erboard
-erborne
-ercame
-ercast
-ercharg
-ercharged
-ercharging
-ercles
-ercome
-ercover
-ercrows
-erdoing
-ere
-erebus
-erect
-erected
-erecting
-erection
-erects
-erewhile
-erflourish
-erflow
-erflowing
-erflows
-erfraught
-erga
-ergalled
-erglanced
-ergo
-ergone
-ergrow
-ergrown
-ergrowth
-erhang
-erhanging
-erhasty
-erhear
-erheard
-eringoes
-erjoy
-erleap
-erleaps
-erleavens
-erlook
-erlooking
-ermaster
-ermengare
-ermount
-ern
-ernight
-eros
-erpaid
-erparted
-erpast
-erpays
-erpeer
-erperch
-erpicturing
-erpingham
-erposting
-erpow
-erpress
-erpressed
-err
-errand
-errands
-errant
-errate
-erraught
-erreaches
-erred
-errest
-erring
-erroneous
-error
-errors
-errs
-errule
-errun
-erset
-ershade
-ershades
-ershine
-ershot
-ersized
-erskip
-erslips
-erspreads
-erst
-erstare
-erstep
-erstunk
-ersway
-ersways
-erswell
-erta
-ertake
-erteemed
-erthrow
-erthrown
-erthrows
-ertook
-ertop
-ertopping
-ertrip
-erturn
-erudition
-eruption
-eruptions
-ervalues
-erwalk
-erwatch
-erween
-erweens
-erweigh
-erweighs
-erwhelm
-erwhelmed
-erworn
-es
-escalus
-escap
-escape
-escaped
-escapes
-eschew
-escoted
-esill
-especial
-especially
-esperance
-espials
-espied
-espies
-espous
-espouse
-espy
-esquire
-esquires
-essay
-essays
-essence
-essential
-essentially
-esses
-essex
-est
-establish
-established
-estate
-estates
-esteem
-esteemed
-esteemeth
-esteeming
-esteems
-estimable
-estimate
-estimation
-estimations
-estime
-estranged
-estridge
-estridges
-et
-etc
-etceteras
-ete
-eternal
-eternally
-eterne
-eternity
-eterniz
-etes
-ethiop
-ethiope
-ethiopes
-ethiopian
-etna
-eton
-etre
-eunuch
-eunuchs
-euphrates
-euphronius
-euriphile
-europa
-europe
-ev
-evade
-evades
-evans
-evasion
-evasions
-eve
-even
-evening
-evenly
-event
-eventful
-events
-ever
-everlasting
-everlastingly
-evermore
-every
-everyone
-everything
-everywhere
-evidence
-evidences
-evident
-evil
-evilly
-evils
-evitate
-ewe
-ewer
-ewers
-ewes
-exact
-exacted
-exactest
-exacting
-exaction
-exactions
-exactly
-exacts
-exalt
-exalted
-examin
-examination
-examinations
-examine
-examined
-examines
-exampl
-example
-exampled
-examples
-exasperate
-exasperates
-exceed
-exceeded
-exceedeth
-exceeding
-exceedingly
-exceeds
-excel
-excelled
-excellence
-excellencies
-excellency
-excellent
-excellently
-excelling
-excels
-except
-excepted
-excepting
-exception
-exceptions
-exceptless
-excess
-excessive
-exchang
-exchange
-exchanged
-exchequer
-exchequers
-excite
-excited
-excitements
-excites
-exclaim
-exclaims
-exclamation
-exclamations
-excludes
-excommunicate
-excommunication
-excrement
-excrements
-excursion
-excursions
-excus
-excusable
-excuse
-excused
-excuses
-excusez
-excusing
-execrable
-execrations
-execute
-executed
-executing
-execution
-executioner
-executioners
-executor
-executors
-exempt
-exempted
-exequies
-exercise
-exercises
-exeter
-exeunt
-exhal
-exhalation
-exhalations
-exhale
-exhales
-exhaust
-exhibit
-exhibiters
-exhibition
-exhort
-exhortation
-exigent
-exil
-exile
-exiled
-exion
-exist
-exists
-exit
-exits
-exorciser
-exorcisms
-exorcist
-expect
-expectance
-expectancy
-expectation
-expectations
-expected
-expecters
-expecting
-expects
-expedience
-expedient
-expediently
-expedition
-expeditious
-expel
-expell
-expelling
-expels
-expend
-expense
-expenses
-experienc
-experience
-experiences
-experiment
-experimental
-experiments
-expert
-expertness
-expiate
-expiation
-expir
-expiration
-expire
-expired
-expires
-expiring
-explication
-exploit
-exploits
-expos
-expose
-exposing
-exposition
-expositor
-expostulate
-expostulation
-exposture
-exposure
-expound
-expounded
-express
-expressed
-expresseth
-expressing
-expressive
-expressly
-expressure
-expuls
-expulsion
-exquisite
-exsufflicate
-extant
-extemporal
-extemporally
-extempore
-extend
-extended
-extends
-extent
-extenuate
-extenuated
-extenuates
-extenuation
-exterior
-exteriorly
-exteriors
-extermin
-extern
-external
-extinct
-extincted
-extincture
-extinguish
-extirp
-extirpate
-extirped
-extol
-extoll
-extolment
-exton
-extort
-extorted
-extortion
-extortions
-extra
-extract
-extracted
-extracting
-extraordinarily
-extraordinary
-extraught
-extravagancy
-extravagant
-extreme
-extremely
-extremes
-extremest
-extremities
-extremity
-exuent
-exult
-exultation
-ey
-eyas
-eyases
-eye
-eyeball
-eyeballs
-eyebrow
-eyebrows
-eyed
-eyeless
-eyelid
-eyelids
-eyes
-eyesight
-eyestrings
-eying
-eyne
-eyrie
-fa
-fabian
-fable
-fables
-fabric
-fabulous
-fac
-face
-faced
-facere
-faces
-faciant
-facile
-facility
-facinerious
-facing
-facit
-fact
-faction
-factionary
-factions
-factious
-factor
-factors
-faculties
-faculty
-fade
-faded
-fadeth
-fadge
-fading
-fadings
-fadom
-fadoms
-fagot
-fagots
-fail
-failing
-fails
-fain
-faint
-fainted
-fainter
-fainting
-faintly
-faintness
-faints
-fair
-fairer
-fairest
-fairies
-fairing
-fairings
-fairly
-fairness
-fairs
-fairwell
-fairy
-fais
-fait
-faites
-faith
-faithful
-faithfull
-faithfully
-faithless
-faiths
-faitors
-fal
-falchion
-falcon
-falconbridge
-falconer
-falconers
-fall
-fallacy
-fallen
-falleth
-falliable
-fallible
-falling
-fallow
-fallows
-falls
-fally
-falorous
-false
-falsehood
-falsely
-falseness
-falser
-falsify
-falsing
-falstaff
-falstaffs
-falter
-fam
-fame
-famed
-familiar
-familiarity
-familiarly
-familiars
-family
-famine
-famish
-famished
-famous
-famoused
-famously
-fan
-fanatical
-fancies
-fancy
-fane
-fanes
-fang
-fangled
-fangless
-fangs
-fann
-fanning
-fans
-fantasied
-fantasies
-fantastic
-fantastical
-fantastically
-fantasticoes
-fantasy
-fap
-far
-farborough
-farced
-fardel
-fardels
-fare
-fares
-farewell
-farewells
-fariner
-faring
-farm
-farmer
-farmhouse
-farms
-farre
-farrow
-farther
-farthest
-farthing
-farthingale
-farthingales
-farthings
-fartuous
-fas
-fashion
-fashionable
-fashioning
-fashions
-fast
-fasted
-fasten
-fastened
-faster
-fastest
-fasting
-fastly
-fastolfe
-fasts
-fat
-fatal
-fatally
-fate
-fated
-fates
-father
-fathered
-fatherless
-fatherly
-fathers
-fathom
-fathomless
-fathoms
-fatigate
-fatness
-fats
-fatted
-fatter
-fattest
-fatting
-fatuus
-fauconbridge
-faulconbridge
-fault
-faultiness
-faultless
-faults
-faulty
-fausse
-fauste
-faustuses
-faut
-favor
-favorable
-favorably
-favors
-favour
-favourable
-favoured
-favouredly
-favourer
-favourers
-favouring
-favourite
-favourites
-favours
-favout
-fawn
-fawneth
-fawning
-fawns
-fay
-fe
-fealty
-fear
-feared
-fearest
-fearful
-fearfull
-fearfully
-fearfulness
-fearing
-fearless
-fears
-feast
-feasted
-feasting
-feasts
-feat
-feated
-feater
-feather
-feathered
-feathers
-featly
-feats
-featur
-feature
-featured
-featureless
-features
-february
-fecks
-fed
-fedary
-federary
-fee
-feeble
-feebled
-feebleness
-feebling
-feebly
-feed
-feeder
-feeders
-feedeth
-feeding
-feeds
-feel
-feeler
-feeling
-feelingly
-feels
-fees
-feet
-fehemently
-feign
-feigned
-feigning
-feil
-feith
-felicitate
-felicity
-fell
-fellest
-fellies
-fellow
-fellowly
-fellows
-fellowship
-fellowships
-fells
-felon
-felonious
-felony
-felt
-female
-females
-feminine
-fen
-fenc
-fence
-fencer
-fencing
-fends
-fennel
-fenny
-fens
-fenton
-fer
-ferdinand
-fere
-fernseed
-ferrara
-ferrers
-ferret
-ferry
-ferryman
-fertile
-fertility
-fervency
-fervour
-fery
-fest
-feste
-fester
-festinate
-festinately
-festival
-festivals
-fet
-fetch
-fetches
-fetching
-fetlock
-fetlocks
-fett
-fetter
-fettering
-fetters
-fettle
-feu
-feud
-fever
-feverous
-fevers
-few
-fewer
-fewest
-fewness
-fickle
-fickleness
-fico
-fiction
-fiddle
-fiddler
-fiddlestick
-fidele
-fidelicet
-fidelity
-fidius
-fie
-field
-fielded
-fields
-fiend
-fiends
-fierce
-fiercely
-fierceness
-fiery
-fife
-fifes
-fifteen
-fifteens
-fifteenth
-fifth
-fifty
-fiftyfold
-fig
-fight
-fighter
-fightest
-fighteth
-fighting
-fights
-figo
-figs
-figur
-figure
-figured
-figures
-figuring
-fike
-fil
-filberts
-filch
-filches
-filching
-file
-filed
-files
-filial
-filius
-fill
-filled
-fillet
-filling
-fillip
-fills
-filly
-film
-fils
-filth
-filths
-filthy
-fin
-finally
-finch
-find
-finder
-findeth
-finding
-findings
-finds
-fine
-fineless
-finely
-finem
-fineness
-finer
-fines
-finest
-fing
-finger
-fingering
-fingers
-fingre
-fingres
-finical
-finish
-finished
-finisher
-finless
-finn
-fins
-finsbury
-fir
-firago
-fire
-firebrand
-firebrands
-fired
-fires
-firework
-fireworks
-firing
-firk
-firm
-firmament
-firmly
-firmness
-first
-firstlings
-fish
-fisher
-fishermen
-fishers
-fishes
-fishified
-fishmonger
-fishpond
-fisnomy
-fist
-fisting
-fists
-fistula
-fit
-fitchew
-fitful
-fitly
-fitment
-fitness
-fits
-fitted
-fitter
-fittest
-fitteth
-fitting
-fitzwater
-five
-fivepence
-fives
-fix
-fixed
-fixes
-fixeth
-fixing
-fixture
-fl
-flag
-flagging
-flagon
-flagons
-flags
-flail
-flakes
-flaky
-flam
-flame
-flamen
-flamens
-flames
-flaming
-flaminius
-flanders
-flannel
-flap
-flaring
-flash
-flashes
-flashing
-flask
-flat
-flatly
-flatness
-flats
-flatt
-flatter
-flattered
-flatterer
-flatterers
-flatterest
-flatteries
-flattering
-flatters
-flattery
-flaunts
-flavio
-flavius
-flaw
-flaws
-flax
-flaxen
-flay
-flaying
-flea
-fleance
-fleas
-flecked
-fled
-fledge
-flee
-fleec
-fleece
-fleeces
-fleer
-fleering
-fleers
-fleet
-fleeter
-fleeting
-fleming
-flemish
-flesh
-fleshes
-fleshly
-fleshment
-fleshmonger
-flew
-flexible
-flexure
-flibbertigibbet
-flickering
-flidge
-fliers
-flies
-flieth
-flight
-flights
-flighty
-flinch
-fling
-flint
-flints
-flinty
-flirt
-float
-floated
-floating
-flock
-flocks
-flood
-floodgates
-floods
-floor
-flora
-florence
-florentine
-florentines
-florentius
-florizel
-flote
-floulish
-flour
-flourish
-flourishes
-flourisheth
-flourishing
-flout
-flouted
-flouting
-flouts
-flow
-flowed
-flower
-flowerets
-flowers
-flowing
-flown
-flows
-fluellen
-fluent
-flung
-flush
-flushing
-fluster
-flute
-flutes
-flutter
-flux
-fluxive
-fly
-flying
-fo
-foal
-foals
-foam
-foamed
-foaming
-foams
-foamy
-fob
-focative
-fodder
-foe
-foeman
-foemen
-foes
-fog
-foggy
-fogs
-foh
-foi
-foil
-foiled
-foils
-foin
-foining
-foins
-fois
-foison
-foisons
-foist
-foix
-fold
-folded
-folds
-folio
-folk
-folks
-follies
-follow
-followed
-follower
-followers
-followest
-following
-follows
-folly
-fond
-fonder
-fondly
-fondness
-font
-fontibell
-food
-fool
-fooleries
-foolery
-foolhardy
-fooling
-foolish
-foolishly
-foolishness
-fools
-foot
-football
-footboy
-footboys
-footed
-footfall
-footing
-footman
-footmen
-footpath
-footsteps
-footstool
-fopp
-fopped
-foppery
-foppish
-fops
-for
-forage
-foragers
-forbade
-forbear
-forbearance
-forbears
-forbid
-forbidden
-forbiddenly
-forbids
-forbod
-forborne
-forc
-force
-forced
-forceful
-forceless
-forces
-forcible
-forcibly
-forcing
-ford
-fordid
-fordo
-fordoes
-fordone
-fore
-forecast
-forefather
-forefathers
-forefinger
-forego
-foregone
-forehand
-forehead
-foreheads
-forehorse
-foreign
-foreigner
-foreigners
-foreknowing
-foreknowledge
-foremost
-forenamed
-forenoon
-forerun
-forerunner
-forerunning
-foreruns
-foresaid
-foresaw
-foresay
-foresee
-foreseeing
-foresees
-foreshow
-foreskirt
-forespent
-forest
-forestall
-forestalled
-forester
-foresters
-forests
-foretell
-foretelling
-foretells
-forethink
-forethought
-foretold
-forever
-foreward
-forewarn
-forewarned
-forewarning
-forfeit
-forfeited
-forfeiters
-forfeiting
-forfeits
-forfeiture
-forfeitures
-forfend
-forfended
-forg
-forgave
-forge
-forged
-forgeries
-forgery
-forges
-forget
-forgetful
-forgetfulness
-forgetive
-forgets
-forgetting
-forgive
-forgiven
-forgiveness
-forgo
-forgoing
-forgone
-forgot
-forgotten
-fork
-forked
-forks
-forlorn
-form
-formal
-formally
-formed
-former
-formerly
-formless
-forms
-fornication
-fornications
-fornicatress
-forres
-forrest
-forsake
-forsaken
-forsaketh
-forslow
-forsook
-forsooth
-forspent
-forspoke
-forswear
-forswearing
-forswore
-forsworn
-fort
-forted
-forth
-forthcoming
-forthlight
-forthright
-forthwith
-fortification
-fortifications
-fortified
-fortifies
-fortify
-fortinbras
-fortitude
-fortnight
-fortress
-fortresses
-forts
-fortun
-fortuna
-fortunate
-fortunately
-fortune
-fortuned
-fortunes
-fortward
-forty
-forum
-forward
-forwarding
-forwardness
-forwards
-forwearied
-fosset
-fost
-foster
-fostered
-fought
-foughten
-foul
-fouler
-foulest
-foully
-foulness
-found
-foundation
-foundations
-founded
-founder
-fount
-fountain
-fountains
-founts
-four
-fourscore
-fourteen
-fourth
-foutra
-fowl
-fowler
-fowling
-fowls
-fox
-foxes
-foxship
-fracted
-fraction
-fractions
-fragile
-fragment
-fragments
-fragrant
-frail
-frailer
-frailties
-frailty
-fram
-frame
-framed
-frames
-frampold
-fran
-francais
-france
-frances
-franchise
-franchised
-franchisement
-franchises
-franciae
-francis
-francisca
-franciscan
-francisco
-frank
-franker
-frankfort
-franklin
-franklins
-frankly
-frankness
-frantic
-franticly
-frateretto
-fratrum
-fraud
-fraudful
-fraught
-fraughtage
-fraughting
-fray
-frays
-freckl
-freckled
-freckles
-frederick
-free
-freed
-freedom
-freedoms
-freehearted
-freelier
-freely
-freeman
-freemen
-freeness
-freer
-frees
-freestone
-freetown
-freeze
-freezes
-freezing
-freezings
-french
-frenchman
-frenchmen
-frenchwoman
-frenzy
-frequent
-frequents
-fresh
-fresher
-freshes
-freshest
-freshly
-freshness
-fret
-fretful
-frets
-fretted
-fretten
-fretting
-friar
-friars
-friday
-fridays
-friend
-friended
-friending
-friendless
-friendliness
-friendly
-friends
-friendship
-friendships
-frieze
-fright
-frighted
-frightened
-frightful
-frighting
-frights
-fringe
-fringed
-frippery
-frisk
-fritters
-frivolous
-fro
-frock
-frog
-frogmore
-froissart
-frolic
-from
-front
-fronted
-frontier
-frontiers
-fronting
-frontlet
-fronts
-frost
-frosts
-frosty
-froth
-froward
-frown
-frowning
-frowningly
-frowns
-froze
-frozen
-fructify
-frugal
-fruit
-fruiterer
-fruitful
-fruitfully
-fruitfulness
-fruition
-fruitless
-fruits
-frush
-frustrate
-frutify
-fry
-fubb
-fuel
-fugitive
-fulfil
-fulfill
-fulfilling
-fulfils
-full
-fullam
-fuller
-fullers
-fullest
-fullness
-fully
-fulness
-fulsome
-fulvia
-fum
-fumble
-fumbles
-fumblest
-fumbling
-fume
-fumes
-fuming
-fumiter
-fumitory
-fun
-function
-functions
-fundamental
-funeral
-funerals
-fur
-furbish
-furies
-furious
-furlongs
-furnace
-furnaces
-furnish
-furnished
-furnishings
-furniture
-furnival
-furor
-furr
-furrow
-furrowed
-furrows
-furth
-further
-furtherance
-furtherer
-furthermore
-furthest
-fury
-furze
-furzes
-fust
-fustian
-fustilarian
-fusty
-fut
-future
-futurity
-g
-gabble
-gaberdine
-gabriel
-gad
-gadding
-gads
-gadshill
-gag
-gage
-gaged
-gagg
-gaging
-gagne
-gain
-gained
-gainer
-gaingiving
-gains
-gainsaid
-gainsay
-gainsaying
-gainsays
-gainst
-gait
-gaited
-galathe
-gale
-galen
-gales
-gall
-gallant
-gallantly
-gallantry
-gallants
-galled
-gallery
-galley
-galleys
-gallia
-gallian
-galliard
-galliasses
-gallimaufry
-galling
-gallons
-gallop
-galloping
-gallops
-gallow
-galloway
-gallowglasses
-gallows
-gallowses
-galls
-gallus
-gam
-gambol
-gambold
-gambols
-gamboys
-game
-gamers
-games
-gamesome
-gamester
-gaming
-gammon
-gamut
-gan
-gangren
-ganymede
-gaol
-gaoler
-gaolers
-gaols
-gap
-gape
-gapes
-gaping
-gar
-garb
-garbage
-garboils
-garcon
-gard
-garde
-garden
-gardener
-gardeners
-gardens
-gardez
-gardiner
-gardon
-gargantua
-gargrave
-garish
-garland
-garlands
-garlic
-garment
-garments
-garmet
-garner
-garners
-garnish
-garnished
-garret
-garrison
-garrisons
-gart
-garter
-garterd
-gartering
-garters
-gascony
-gash
-gashes
-gaskins
-gasp
-gasping
-gasted
-gastness
-gat
-gate
-gated
-gates
-gath
-gather
-gathered
-gathering
-gathers
-gatories
-gatory
-gaud
-gaudeo
-gaudy
-gauge
-gaul
-gaultree
-gaunt
-gauntlet
-gauntlets
-gav
-gave
-gavest
-gawded
-gawds
-gawsey
-gay
-gayness
-gaz
-gaze
-gazed
-gazer
-gazers
-gazes
-gazeth
-gazing
-gear
-geck
-geese
-geffrey
-geld
-gelded
-gelding
-gelida
-gelidus
-gelt
-gem
-geminy
-gems
-gen
-gender
-genders
-general
-generally
-generals
-generation
-generations
-generative
-generosity
-generous
-genitive
-genitivo
-genius
-gennets
-genoa
-genoux
-gens
-gent
-gentilhomme
-gentility
-gentle
-gentlefolks
-gentleman
-gentlemanlike
-gentlemen
-gentleness
-gentler
-gentles
-gentlest
-gentlewoman
-gentlewomen
-gently
-gentry
-george
-gerard
-germaines
-germains
-german
-germane
-germans
-germany
-gertrude
-gest
-gests
-gesture
-gestures
-get
-getrude
-gets
-getter
-getting
-ghastly
-ghost
-ghosted
-ghostly
-ghosts
-gi
-giant
-giantess
-giantlike
-giants
-gib
-gibber
-gibbet
-gibbets
-gibe
-giber
-gibes
-gibing
-gibingly
-giddily
-giddiness
-giddy
-gift
-gifts
-gig
-giglets
-giglot
-gilbert
-gild
-gilded
-gilding
-gilliams
-gillian
-gills
-gillyvors
-gilt
-gimmal
-gimmers
-gin
-ging
-ginger
-gingerbread
-gingerly
-ginn
-gins
-gioucestershire
-gipes
-gipsies
-gipsy
-gird
-girded
-girdle
-girdled
-girdles
-girdling
-girl
-girls
-girt
-girth
-gis
-giv
-give
-given
-giver
-givers
-gives
-givest
-giveth
-giving
-givings
-glad
-gladded
-gladding
-gladly
-gladness
-glamis
-glanc
-glance
-glanced
-glances
-glancing
-glanders
-glansdale
-glare
-glares
-glass
-glasses
-glassy
-glaz
-glazed
-gleams
-glean
-gleaned
-gleaning
-gleeful
-gleek
-gleeking
-gleeks
-glend
-glendower
-glib
-glide
-glided
-glides
-glideth
-gliding
-glimmer
-glimmering
-glimmers
-glimpse
-glimpses
-glist
-glistening
-glister
-glistering
-glisters
-glitt
-glittering
-globe
-globes
-glooming
-gloomy
-glories
-glorified
-glorify
-glorious
-gloriously
-glory
-glose
-gloss
-glosses
-glou
-glouceste
-gloucester
-gloucestershire
-glove
-glover
-gloves
-glow
-glowed
-glowing
-glowworm
-gloz
-gloze
-glozes
-glu
-glue
-glued
-glues
-glut
-glutt
-glutted
-glutton
-gluttoning
-gluttony
-gnarled
-gnarling
-gnat
-gnats
-gnaw
-gnawing
-gnawn
-gnaws
-go
-goad
-goaded
-goads
-goal
-goat
-goatish
-goats
-gobbets
-gobbo
-goblet
-goblets
-goblin
-goblins
-god
-godded
-godden
-goddess
-goddesses
-goddild
-godfather
-godfathers
-godhead
-godlike
-godliness
-godly
-godmother
-gods
-godson
-goer
-goers
-goes
-goest
-goeth
-goffe
-gogs
-going
-gold
-golden
-goldenly
-goldsmith
-goldsmiths
-golgotha
-goliases
-goliath
-gon
-gondola
-gondolier
-gone
-goneril
-gong
-gonzago
-gonzalo
-good
-goodfellow
-goodlier
-goodliest
-goodly
-goodman
-goodness
-goodnight
-goodrig
-goods
-goodwife
-goodwill
-goodwin
-goodwins
-goodyear
-goodyears
-goose
-gooseberry
-goosequills
-goot
-gor
-gorbellied
-gorboduc
-gordian
-gore
-gored
-gorg
-gorge
-gorgeous
-gorget
-gorging
-gorgon
-gormandize
-gormandizing
-gory
-gosling
-gospel
-gospels
-goss
-gossamer
-gossip
-gossiping
-gossiplike
-gossips
-got
-goth
-goths
-gotten
-gourd
-gout
-gouts
-gouty
-govern
-governance
-governed
-governess
-government
-governor
-governors
-governs
-gower
-gown
-gowns
-grac
-grace
-graced
-graceful
-gracefully
-graceless
-graces
-gracing
-gracious
-graciously
-gradation
-graff
-graffing
-graft
-grafted
-grafters
-grain
-grained
-grains
-gramercies
-gramercy
-grammar
-grand
-grandam
-grandame
-grandchild
-grande
-grandeur
-grandfather
-grandjurors
-grandmother
-grandpre
-grandsir
-grandsire
-grandsires
-grange
-grant
-granted
-granting
-grants
-grape
-grapes
-grapple
-grapples
-grappling
-grasp
-grasped
-grasps
-grass
-grasshoppers
-grassy
-grate
-grated
-grateful
-grates
-gratiano
-gratify
-gratii
-gratillity
-grating
-gratis
-gratitude
-gratulate
-grav
-grave
-gravediggers
-gravel
-graveless
-gravell
-gravely
-graven
-graveness
-graver
-graves
-gravest
-gravestone
-gravities
-gravity
-gravy
-gray
-graymalkin
-graz
-graze
-grazed
-grazing
-grease
-greases
-greasily
-greasy
-great
-greater
-greatest
-greatly
-greatness
-grecian
-grecians
-gree
-greece
-greed
-greedily
-greediness
-greedy
-greeing
-greek
-greekish
-greeks
-green
-greener
-greenly
-greens
-greensleeves
-greenwich
-greenwood
-greet
-greeted
-greeting
-greetings
-greets
-greg
-gregory
-gremio
-grew
-grey
-greybeard
-greybeards
-greyhound
-greyhounds
-grief
-griefs
-griev
-grievance
-grievances
-grieve
-grieved
-grieves
-grievest
-grieving
-grievingly
-grievous
-grievously
-griffin
-griffith
-grim
-grime
-grimly
-grin
-grind
-grinding
-grindstone
-grinning
-grip
-gripe
-gripes
-griping
-grise
-grisly
-grissel
-grize
-grizzle
-grizzled
-groan
-groaning
-groans
-groat
-groats
-groin
-groom
-grooms
-grop
-groping
-gros
-gross
-grosser
-grossly
-grossness
-ground
-grounded
-groundlings
-grounds
-grove
-grovel
-grovelling
-groves
-grow
-groweth
-growing
-grown
-grows
-growth
-grub
-grubb
-grubs
-grudge
-grudged
-grudges
-grudging
-gruel
-grumble
-grumblest
-grumbling
-grumblings
-grumio
-grund
-grunt
-gualtier
-guard
-guardage
-guardant
-guarded
-guardian
-guardians
-guards
-guardsman
-gud
-gudgeon
-guerdon
-guerra
-guess
-guesses
-guessingly
-guest
-guests
-guiana
-guichard
-guide
-guided
-guider
-guiderius
-guides
-guiding
-guidon
-guienne
-guil
-guildenstern
-guilders
-guildford
-guildhall
-guile
-guiled
-guileful
-guilfords
-guilt
-guiltian
-guiltier
-guiltily
-guiltiness
-guiltless
-guilts
-guilty
-guinea
-guinever
-guise
-gul
-gules
-gulf
-gulfs
-gull
-gulls
-gum
-gumm
-gums
-gun
-gunner
-gunpowder
-guns
-gurnet
-gurney
-gust
-gusts
-gusty
-guts
-gutter
-guy
-guynes
-guysors
-gypsy
-gyve
-gyved
-gyves
-h
-ha
-haberdasher
-habiliment
-habiliments
-habit
-habitation
-habited
-habits
-habitude
-hack
-hacket
-hackney
-hacks
-had
-hadst
-haec
-haeres
-hag
-hagar
-haggard
-haggards
-haggish
-haggled
-hags
-hail
-hailed
-hailstone
-hailstones
-hair
-hairless
-hairs
-hairy
-hal
-halberd
-halberds
-halcyon
-hale
-haled
-hales
-half
-halfcan
-halfpence
-halfpenny
-halfpennyworth
-halfway
-halidom
-hall
-halloa
-halloing
-hallond
-halloo
-hallooing
-hallow
-hallowed
-hallowmas
-hallown
-hals
-halt
-halter
-halters
-halting
-halts
-halves
-ham
-hames
-hamlet
-hammer
-hammered
-hammering
-hammers
-hamper
-hampton
-hams
-hamstring
-hand
-handed
-handful
-handicraft
-handicraftsmen
-handing
-handiwork
-handkercher
-handkerchers
-handkerchief
-handle
-handled
-handles
-handless
-handlest
-handling
-handmaid
-handmaids
-hands
-handsaw
-handsome
-handsomely
-handsomeness
-handwriting
-handy
-hang
-hanged
-hangers
-hangeth
-hanging
-hangings
-hangman
-hangmen
-hangs
-hannibal
-hap
-hapless
-haply
-happ
-happen
-happened
-happier
-happies
-happiest
-happily
-happiness
-happy
-haps
-harbinger
-harbingers
-harbor
-harbour
-harbourage
-harbouring
-harbours
-harcourt
-hard
-harder
-hardest
-hardiest
-hardiment
-hardiness
-hardly
-hardness
-hardocks
-hardy
-hare
-harelip
-hares
-harfleur
-hark
-harlot
-harlotry
-harlots
-harm
-harmed
-harmful
-harming
-harmless
-harmonious
-harmony
-harms
-harness
-harp
-harper
-harpier
-harping
-harpy
-harried
-harrow
-harrows
-harry
-harsh
-harshly
-harshness
-hart
-harts
-harum
-harvest
-has
-hast
-haste
-hasted
-hasten
-hastes
-hastily
-hasting
-hastings
-hasty
-hat
-hatch
-hatches
-hatchet
-hatching
-hatchment
-hate
-hated
-hateful
-hater
-haters
-hates
-hateth
-hatfield
-hath
-hating
-hatred
-hats
-haud
-hauf
-haught
-haughtiness
-haughty
-haunch
-haunches
-haunt
-haunted
-haunting
-haunts
-hautboy
-hautboys
-have
-haven
-havens
-haver
-having
-havings
-havior
-haviour
-havoc
-hawk
-hawking
-hawks
-hawthorn
-hawthorns
-hay
-hazard
-hazarded
-hazards
-hazel
-hazelnut
-he
-head
-headborough
-headed
-headier
-heading
-headland
-headless
-headlong
-heads
-headsman
-headstrong
-heady
-heal
-healed
-healing
-heals
-health
-healthful
-healths
-healthsome
-healthy
-heap
-heaping
-heaps
-hear
-heard
-hearer
-hearers
-hearest
-heareth
-hearing
-hearings
-heark
-hearken
-hearkens
-hears
-hearsay
-hearse
-hearsed
-hearst
-heart
-heartache
-heartbreak
-heartbreaking
-hearted
-hearten
-hearth
-hearths
-heartily
-heartiness
-heartless
-heartlings
-heartly
-hearts
-heartsick
-heartstrings
-hearty
-heat
-heated
-heath
-heathen
-heathenish
-heating
-heats
-heauties
-heav
-heave
-heaved
-heaven
-heavenly
-heavens
-heaves
-heavier
-heaviest
-heavily
-heaviness
-heaving
-heavings
-heavy
-hebona
-hebrew
-hecate
-hectic
-hector
-hectors
-hecuba
-hedg
-hedge
-hedgehog
-hedgehogs
-hedges
-heed
-heeded
-heedful
-heedfull
-heedfully
-heedless
-heel
-heels
-hefted
-hefts
-heifer
-heifers
-heigh
-height
-heighten
-heinous
-heinously
-heir
-heiress
-heirless
-heirs
-held
-helen
-helena
-helenus
-helias
-helicons
-hell
-hellespont
-hellfire
-hellish
-helm
-helmed
-helmet
-helmets
-helms
-help
-helper
-helpers
-helpful
-helping
-helpless
-helps
-helter
-hem
-heme
-hemlock
-hemm
-hemp
-hempen
-hems
-hen
-hence
-henceforth
-henceforward
-henchman
-henri
-henricus
-henry
-hens
-hent
-henton
-her
-herald
-heraldry
-heralds
-herb
-herbert
-herblets
-herbs
-herculean
-hercules
-herd
-herds
-herdsman
-herdsmen
-here
-hereabout
-hereabouts
-hereafter
-hereby
-hereditary
-hereford
-herefordshire
-herein
-hereof
-heresies
-heresy
-heretic
-heretics
-hereto
-hereupon
-heritage
-heritier
-hermes
-hermia
-hermione
-hermit
-hermitage
-hermits
-herne
-hero
-herod
-herods
-heroes
-heroic
-heroical
-herring
-herrings
-hers
-herself
-hesperides
-hesperus
-hest
-hests
-heure
-heureux
-hew
-hewgh
-hewing
-hewn
-hews
-hey
-heyday
-hibocrates
-hic
-hiccups
-hick
-hid
-hidden
-hide
-hideous
-hideously
-hideousness
-hides
-hidest
-hiding
-hie
-hied
-hiems
-hies
-hig
-high
-higher
-highest
-highly
-highmost
-highness
-hight
-highway
-highways
-hilding
-hildings
-hill
-hillo
-hilloa
-hills
-hilt
-hilts
-hily
-him
-himself
-hinc
-hinckley
-hind
-hinder
-hindered
-hinders
-hindmost
-hinds
-hing
-hinge
-hinges
-hint
-hip
-hipp
-hipparchus
-hippolyta
-hips
-hir
-hire
-hired
-hiren
-hirtius
-his
-hisperia
-hiss
-hisses
-hissing
-hist
-historical
-history
-hit
-hither
-hitherto
-hitherward
-hitherwards
-hits
-hitting
-hive
-hives
-hizzing
-ho
-hoa
-hoar
-hoard
-hoarded
-hoarding
-hoars
-hoarse
-hoary
-hob
-hobbididence
-hobby
-hobbyhorse
-hobgoblin
-hobnails
-hoc
-hod
-hodge
-hog
-hogs
-hogshead
-hogsheads
-hois
-hoise
-hoist
-hoisted
-hoists
-holborn
-hold
-holden
-holder
-holdeth
-holdfast
-holding
-holds
-hole
-holes
-holidam
-holidame
-holiday
-holidays
-holier
-holiest
-holily
-holiness
-holla
-holland
-hollander
-hollanders
-holloa
-holloaing
-hollow
-hollowly
-hollowness
-holly
-holmedon
-holofernes
-holp
-holy
-homage
-homager
-home
-homely
-homes
-homespuns
-homeward
-homewards
-homicide
-homicides
-homily
-hominem
-hommes
-homo
-honest
-honester
-honestest
-honestly
-honesty
-honey
-honeycomb
-honeying
-honeyless
-honeysuckle
-honeysuckles
-honi
-honneur
-honor
-honorable
-honorably
-honorato
-honorificabilitudinitatibus
-honors
-honour
-honourable
-honourably
-honoured
-honourest
-honourible
-honouring
-honours
-hoo
-hood
-hooded
-hoodman
-hoods
-hoodwink
-hoof
-hoofs
-hook
-hooking
-hooks
-hoop
-hoops
-hoot
-hooted
-hooting
-hoots
-hop
-hope
-hopeful
-hopeless
-hopes
-hopest
-hoping
-hopkins
-hoppedance
-hor
-horace
-horatio
-horizon
-horn
-hornbook
-horned
-horner
-horning
-hornpipes
-horns
-horologe
-horrible
-horribly
-horrid
-horrider
-horridly
-horror
-horrors
-hors
-horse
-horseback
-horsed
-horsehairs
-horseman
-horsemanship
-horsemen
-horses
-horseway
-horsing
-hortensio
-hortensius
-horum
-hose
-hospitable
-hospital
-hospitality
-host
-hostage
-hostages
-hostess
-hostile
-hostility
-hostilius
-hosts
-hot
-hotly
-hotspur
-hotter
-hottest
-hound
-hounds
-hour
-hourly
-hours
-hous
-house
-household
-householder
-householders
-households
-housekeeper
-housekeepers
-housekeeping
-houseless
-houses
-housewife
-housewifery
-housewives
-hovel
-hover
-hovered
-hovering
-hovers
-how
-howbeit
-howe
-howeer
-however
-howl
-howled
-howlet
-howling
-howls
-howsoe
-howsoever
-howsome
-hoxes
-hoy
-hoyday
-hubert
-huddled
-huddling
-hue
-hued
-hues
-hug
-huge
-hugely
-hugeness
-hugg
-hugger
-hugh
-hugs
-hujus
-hulk
-hulks
-hull
-hulling
-hullo
-hum
-human
-humane
-humanely
-humanity
-humble
-humbled
-humbleness
-humbler
-humbles
-humblest
-humbling
-humbly
-hume
-humh
-humidity
-humility
-humming
-humor
-humorous
-humors
-humour
-humourists
-humours
-humphrey
-humphry
-hums
-hundred
-hundreds
-hundredth
-hung
-hungarian
-hungary
-hunger
-hungerford
-hungerly
-hungry
-hunt
-hunted
-hunter
-hunters
-hunteth
-hunting
-huntington
-huntress
-hunts
-huntsman
-huntsmen
-hurdle
-hurl
-hurling
-hurls
-hurly
-hurlyburly
-hurricano
-hurricanoes
-hurried
-hurries
-hurry
-hurt
-hurting
-hurtled
-hurtless
-hurtling
-hurts
-husband
-husbanded
-husbandless
-husbandry
-husbands
-hush
-hushes
-husht
-husks
-huswife
-huswifes
-hutch
-hybla
-hydra
-hyen
-hymen
-hymenaeus
-hymn
-hymns
-hyperboles
-hyperbolical
-hyperion
-hypocrisy
-hypocrite
-hypocrites
-hyrcan
-hyrcania
-hyrcanian
-hyssop
-hysterica
-i
-iachimo
-iaculis
-iago
-iament
-ibat
-icarus
-ice
-iceland
-ici
-icicle
-icicles
-icy
-idea
-ideas
-idem
-iden
-ides
-idiot
-idiots
-idle
-idleness
-idles
-idly
-idol
-idolatrous
-idolatry
-ield
-if
-ifs
-ignis
-ignoble
-ignobly
-ignominious
-ignominy
-ignomy
-ignorance
-ignorant
-ii
-iii
-iiii
-il
-ilbow
-ild
-ilion
-ilium
-ill
-illegitimate
-illiterate
-illness
-illo
-ills
-illume
-illumin
-illuminate
-illumineth
-illusion
-illusions
-illustrate
-illustrated
-illustrious
-illyria
-illyrian
-ils
-im
-image
-imagery
-images
-imagin
-imaginary
-imagination
-imaginations
-imagine
-imagining
-imaginings
-imbar
-imbecility
-imbrue
-imitari
-imitate
-imitated
-imitation
-imitations
-immaculate
-immanity
-immask
-immaterial
-immediacy
-immediate
-immediately
-imminence
-imminent
-immoderate
-immoderately
-immodest
-immoment
-immortal
-immortaliz
-immortally
-immur
-immured
-immures
-imogen
-imp
-impaint
-impair
-impairing
-impale
-impaled
-impanelled
-impart
-imparted
-impartial
-impartment
-imparts
-impasted
-impatience
-impatient
-impatiently
-impawn
-impeach
-impeached
-impeachment
-impeachments
-impedes
-impediment
-impediments
-impenetrable
-imperator
-imperceiverant
-imperfect
-imperfection
-imperfections
-imperfectly
-imperial
-imperious
-imperiously
-impertinency
-impertinent
-impeticos
-impetuosity
-impetuous
-impieties
-impiety
-impious
-implacable
-implements
-implies
-implor
-implorators
-implore
-implored
-imploring
-impon
-import
-importance
-importancy
-important
-importantly
-imported
-importeth
-importing
-importless
-imports
-importun
-importunacy
-importunate
-importune
-importunes
-importunity
-impos
-impose
-imposed
-imposition
-impositions
-impossibilities
-impossibility
-impossible
-imposthume
-impostor
-impostors
-impotence
-impotent
-impounded
-impregnable
-imprese
-impress
-impressed
-impressest
-impression
-impressure
-imprimendum
-imprimis
-imprint
-imprinted
-imprison
-imprisoned
-imprisoning
-imprisonment
-improbable
-improper
-improve
-improvident
-impudence
-impudency
-impudent
-impudently
-impudique
-impugn
-impugns
-impure
-imputation
-impute
-in
-inaccessible
-inaidable
-inaudible
-inauspicious
-incaged
-incantations
-incapable
-incardinate
-incarnadine
-incarnate
-incarnation
-incens
-incense
-incensed
-incensement
-incenses
-incensing
-incertain
-incertainties
-incertainty
-incessant
-incessantly
-incest
-incestuous
-inch
-incharitable
-inches
-incidency
-incident
-incision
-incite
-incites
-incivil
-incivility
-inclin
-inclinable
-inclination
-incline
-inclined
-inclines
-inclining
-inclips
-include
-included
-includes
-inclusive
-incomparable
-incomprehensible
-inconsiderate
-inconstancy
-inconstant
-incontinency
-incontinent
-incontinently
-inconvenience
-inconveniences
-inconvenient
-incony
-incorporate
-incorps
-incorrect
-increas
-increase
-increases
-increaseth
-increasing
-incredible
-incredulous
-incur
-incurable
-incurr
-incurred
-incursions
-ind
-inde
-indebted
-indeed
-indent
-indented
-indenture
-indentures
-index
-indexes
-india
-indian
-indict
-indicted
-indictment
-indies
-indifferency
-indifferent
-indifferently
-indigent
-indigest
-indigested
-indign
-indignation
-indignations
-indigne
-indignities
-indignity
-indirect
-indirection
-indirections
-indirectly
-indiscreet
-indiscretion
-indispos
-indisposition
-indissoluble
-indistinct
-indistinguish
-indistinguishable
-indited
-individable
-indrench
-indu
-indubitate
-induc
-induce
-induced
-inducement
-induction
-inductions
-indue
-indued
-indues
-indulgence
-indulgences
-indulgent
-indurance
-industrious
-industriously
-industry
-inequality
-inestimable
-inevitable
-inexecrable
-inexorable
-inexplicable
-infallible
-infallibly
-infamonize
-infamous
-infamy
-infancy
-infant
-infants
-infect
-infected
-infecting
-infection
-infections
-infectious
-infectiously
-infects
-infer
-inference
-inferior
-inferiors
-infernal
-inferr
-inferreth
-inferring
-infest
-infidel
-infidels
-infinite
-infinitely
-infinitive
-infirm
-infirmities
-infirmity
-infixed
-infixing
-inflam
-inflame
-inflaming
-inflammation
-inflict
-infliction
-influence
-influences
-infold
-inform
-informal
-information
-informations
-informed
-informer
-informs
-infortunate
-infring
-infringe
-infringed
-infus
-infuse
-infused
-infusing
-infusion
-ingener
-ingenious
-ingeniously
-inglorious
-ingots
-ingraffed
-ingraft
-ingrate
-ingrated
-ingrateful
-ingratitude
-ingratitudes
-ingredient
-ingredients
-ingross
-inhabit
-inhabitable
-inhabitants
-inhabited
-inhabits
-inhearse
-inhearsed
-inherent
-inherit
-inheritance
-inherited
-inheriting
-inheritor
-inheritors
-inheritrix
-inherits
-inhibited
-inhibition
-inhoop
-inhuman
-iniquities
-iniquity
-initiate
-injointed
-injunction
-injunctions
-injur
-injure
-injurer
-injuries
-injurious
-injury
-injustice
-ink
-inkhorn
-inkle
-inkles
-inkling
-inky
-inlaid
-inland
-inlay
-inly
-inmost
-inn
-inner
-innkeeper
-innocence
-innocency
-innocent
-innocents
-innovation
-innovator
-inns
-innumerable
-inoculate
-inordinate
-inprimis
-inquir
-inquire
-inquiry
-inquisition
-inquisitive
-inroads
-insane
-insanie
-insatiate
-insconce
-inscrib
-inscription
-inscriptions
-inscroll
-inscrutable
-insculp
-insculpture
-insensible
-inseparable
-inseparate
-insert
-inserted
-inset
-inshell
-inshipp
-inside
-insinewed
-insinuate
-insinuateth
-insinuating
-insinuation
-insisted
-insisting
-insisture
-insociable
-insolence
-insolent
-insomuch
-inspir
-inspiration
-inspirations
-inspire
-inspired
-install
-installed
-instalment
-instance
-instances
-instant
-instantly
-instate
-instead
-insteeped
-instigate
-instigated
-instigation
-instigations
-instigator
-instinct
-instinctively
-institute
-institutions
-instruct
-instructed
-instruction
-instructions
-instructs
-instrument
-instrumental
-instruments
-insubstantial
-insufficience
-insufficiency
-insult
-insulted
-insulting
-insultment
-insults
-insupportable
-insuppressive
-insurrection
-insurrections
-int
-integer
-integritas
-integrity
-intellect
-intellects
-intellectual
-intelligence
-intelligencer
-intelligencing
-intelligent
-intelligis
-intelligo
-intemperance
-intemperate
-intend
-intended
-intendeth
-intending
-intendment
-intends
-intenible
-intent
-intention
-intentively
-intents
-inter
-intercept
-intercepted
-intercepter
-interception
-intercepts
-intercession
-intercessors
-interchained
-interchang
-interchange
-interchangeably
-interchangement
-interchanging
-interdiction
-interest
-interim
-interims
-interior
-interjections
-interjoin
-interlude
-intermingle
-intermission
-intermissive
-intermit
-intermix
-intermixed
-interpose
-interposer
-interposes
-interpret
-interpretation
-interpreted
-interpreter
-interpreters
-interprets
-interr
-interred
-interrogatories
-interrupt
-interrupted
-interrupter
-interruptest
-interruption
-interrupts
-intertissued
-intervallums
-interview
-intestate
-intestine
-intil
-intimate
-intimation
-intitled
-intituled
-into
-intolerable
-intoxicates
-intreasured
-intreat
-intrench
-intrenchant
-intricate
-intrinse
-intrinsicate
-intrude
-intruder
-intruding
-intrusion
-inundation
-inure
-inurn
-invade
-invades
-invasion
-invasive
-invectively
-invectives
-inveigled
-invent
-invented
-invention
-inventions
-inventor
-inventorially
-inventoried
-inventors
-inventory
-inverness
-invert
-invest
-invested
-investing
-investments
-inveterate
-invincible
-inviolable
-invised
-invisible
-invitation
-invite
-invited
-invites
-inviting
-invitis
-invocate
-invocation
-invoke
-invoked
-invulnerable
-inward
-inwardly
-inwardness
-inwards
-ionia
-ionian
-ipse
-ipswich
-ira
-irae
-iras
-ire
-ireful
-ireland
-iris
-irish
-irishman
-irishmen
-irks
-irksome
-iron
-irons
-irreconcil
-irrecoverable
-irregular
-irregulous
-irreligious
-irremovable
-irreparable
-irresolute
-irrevocable
-is
-isabel
-isabella
-isbel
-isbels
-iscariot
-ise
-ish
-isidore
-isis
-island
-islander
-islanders
-islands
-isle
-isles
-israel
-issu
-issue
-issued
-issueless
-issues
-issuing
-ist
-ista
-it
-italian
-italy
-itch
-itches
-itching
-item
-items
-iteration
-ithaca
-its
-itself
-itshall
-iv
-ivory
-ivy
-iwis
-ix
-j
-jacet
-jack
-jackanapes
-jacks
-jacksauce
-jackslave
-jacob
-jade
-jaded
-jades
-jail
-jakes
-jamany
-james
-jamy
-jane
-jangled
-jangling
-january
-janus
-japhet
-jaquenetta
-jaques
-jar
-jarring
-jars
-jarteer
-jasons
-jaunce
-jauncing
-jaundice
-jaundies
-jaw
-jawbone
-jaws
-jay
-jays
-jc
-je
-jealous
-jealousies
-jealousy
-jeer
-jeering
-jelly
-jenny
-jeopardy
-jephtha
-jephthah
-jerkin
-jerkins
-jerks
-jeronimy
-jerusalem
-jeshu
-jesses
-jessica
-jest
-jested
-jester
-jesters
-jesting
-jests
-jesu
-jesus
-jet
-jets
-jew
-jewel
-jeweller
-jewels
-jewess
-jewish
-jewry
-jews
-jezebel
-jig
-jigging
-jill
-jills
-jingling
-joan
-job
-jockey
-jocund
-jog
-jogging
-john
-johns
-join
-joinder
-joined
-joiner
-joineth
-joins
-joint
-jointed
-jointing
-jointly
-jointress
-joints
-jointure
-jollity
-jolly
-jolt
-joltheads
-jordan
-joseph
-joshua
-jot
-jour
-jourdain
-journal
-journey
-journeying
-journeyman
-journeymen
-journeys
-jove
-jovem
-jovial
-jowl
-jowls
-joy
-joyed
-joyful
-joyfully
-joyless
-joyous
-joys
-juan
-jud
-judas
-judases
-jude
-judg
-judge
-judged
-judgement
-judges
-judgest
-judging
-judgment
-judgments
-judicious
-jug
-juggle
-juggled
-juggler
-jugglers
-juggling
-jugs
-juice
-juiced
-jul
-jule
-julia
-juliet
-julietta
-julio
-julius
-july
-jump
-jumpeth
-jumping
-jumps
-june
-junes
-junior
-junius
-junkets
-juno
-jupiter
-jure
-jurement
-jurisdiction
-juror
-jurors
-jury
-jurymen
-just
-justeius
-justest
-justice
-justicer
-justicers
-justices
-justification
-justified
-justify
-justle
-justled
-justles
-justling
-justly
-justness
-justs
-jutting
-jutty
-juvenal
-kam
-kate
-kated
-kates
-katharine
-katherina
-katherine
-kecksies
-keech
-keel
-keels
-keen
-keenness
-keep
-keepdown
-keeper
-keepers
-keepest
-keeping
-keeps
-keiser
-ken
-kendal
-kennel
-kent
-kentish
-kentishman
-kentishmen
-kept
-kerchief
-kerely
-kern
-kernal
-kernel
-kernels
-kerns
-kersey
-kettle
-kettledrum
-kettledrums
-key
-keys
-kibe
-kibes
-kick
-kicked
-kickshaws
-kickshawses
-kicky
-kid
-kidney
-kikely
-kildare
-kill
-killed
-killer
-killeth
-killing
-killingworth
-kills
-kiln
-kimbolton
-kin
-kind
-kinder
-kindest
-kindle
-kindled
-kindless
-kindlier
-kindling
-kindly
-kindness
-kindnesses
-kindred
-kindreds
-kinds
-kine
-king
-kingdom
-kingdoms
-kingly
-kings
-kinred
-kins
-kinsman
-kinsmen
-kinswoman
-kirtle
-kirtles
-kiss
-kissed
-kisses
-kissing
-kitchen
-kitchens
-kite
-kites
-kitten
-kj
-kl
-klll
-knack
-knacks
-knapp
-knav
-knave
-knaveries
-knavery
-knaves
-knavish
-knead
-kneaded
-kneading
-knee
-kneel
-kneeling
-kneels
-knees
-knell
-knew
-knewest
-knife
-knight
-knighted
-knighthood
-knighthoods
-knightly
-knights
-knit
-knits
-knitters
-knitteth
-knives
-knobs
-knock
-knocking
-knocks
-knog
-knoll
-knot
-knots
-knotted
-knotty
-know
-knower
-knowest
-knowing
-knowingly
-knowings
-knowledge
-known
-knows
-l
-la
-laban
-label
-labell
-labienus
-labio
-labor
-laboring
-labors
-labour
-laboured
-labourer
-labourers
-labouring
-labours
-laboursome
-labras
-labyrinth
-lac
-lace
-laced
-lacedaemon
-laces
-lacies
-lack
-lackbeard
-lacked
-lackey
-lackeying
-lackeys
-lacking
-lacks
-lad
-ladder
-ladders
-lade
-laden
-ladies
-lading
-lads
-lady
-ladybird
-ladyship
-ladyships
-laer
-laertes
-lafeu
-lag
-lagging
-laid
-lain
-laissez
-lake
-lakes
-lakin
-lam
-lamb
-lambert
-lambkin
-lambkins
-lambs
-lame
-lamely
-lameness
-lament
-lamentable
-lamentably
-lamentation
-lamentations
-lamented
-lamenting
-lamentings
-laments
-lames
-laming
-lammas
-lammastide
-lamound
-lamp
-lampass
-lamps
-lanc
-lancaster
-lance
-lances
-lanceth
-lanch
-land
-landed
-landing
-landless
-landlord
-landmen
-lands
-lane
-lanes
-langage
-langley
-langton
-language
-languageless
-languages
-langues
-languish
-languished
-languishes
-languishing
-languishings
-languishment
-languor
-lank
-lantern
-lanterns
-lanthorn
-lap
-lapis
-lapland
-lapp
-laps
-lapse
-lapsed
-lapsing
-lapwing
-laquais
-larded
-larder
-larding
-lards
-large
-largely
-largeness
-larger
-largess
-largest
-lark
-larks
-larron
-lartius
-larum
-larums
-las
-lascivious
-lash
-lass
-lasses
-last
-lasted
-lasting
-lastly
-lasts
-latch
-latches
-late
-lated
-lately
-later
-latest
-lath
-latin
-latten
-latter
-lattice
-laud
-laudable
-laudis
-laugh
-laughable
-laughed
-laugher
-laughest
-laughing
-laughs
-laughter
-launce
-launcelot
-launces
-launch
-laund
-laundress
-laundry
-laur
-laura
-laurel
-laurels
-laurence
-laus
-lavache
-lave
-lavee
-lavender
-lavina
-lavinia
-lavish
-lavishly
-lavolt
-lavoltas
-law
-lawful
-lawfully
-lawless
-lawlessly
-lawn
-lawns
-lawrence
-laws
-lawyer
-lawyers
-lay
-layer
-layest
-laying
-lays
-lazar
-lazars
-lazarus
-lazy
-lc
-ld
-ldst
-le
-lead
-leaden
-leader
-leaders
-leadest
-leading
-leads
-leaf
-leagu
-league
-leagued
-leaguer
-leagues
-leah
-leak
-leaky
-lean
-leander
-leaner
-leaning
-leanness
-leans
-leap
-leaped
-leaping
-leaps
-leapt
-lear
-learn
-learned
-learnedly
-learning
-learnings
-learns
-learnt
-leas
-lease
-leases
-leash
-leasing
-least
-leather
-leathern
-leav
-leave
-leaven
-leavening
-leaver
-leaves
-leaving
-leavy
-lecher
-lecherous
-lechers
-lechery
-lecon
-lecture
-lectures
-led
-leda
-leech
-leeches
-leek
-leeks
-leer
-leers
-lees
-leese
-leet
-leets
-left
-leg
-legacies
-legacy
-legate
-legatine
-lege
-legerity
-leges
-legg
-legion
-legions
-legitimate
-legitimation
-legs
-leicester
-leicestershire
-leiger
-leigers
-leisure
-leisurely
-leisures
-leman
-lemon
-lena
-lend
-lender
-lending
-lendings
-lends
-length
-lengthen
-lengthens
-lengths
-lenity
-lennox
-lent
-lenten
-lentus
-leo
-leon
-leonardo
-leonati
-leonato
-leonatus
-leontes
-leopard
-leopards
-leper
-leperous
-lepidus
-leprosy
-lequel
-lers
-les
-less
-lessen
-lessens
-lesser
-lesson
-lessoned
-lessons
-lest
-lestrake
-let
-lethargied
-lethargies
-lethargy
-lethe
-lets
-lett
-letter
-letters
-letting
-lettuce
-leur
-leve
-level
-levell
-levelled
-levels
-leven
-levers
-leviathan
-leviathans
-levied
-levies
-levity
-levy
-levying
-lewd
-lewdly
-lewdness
-lewdsters
-lewis
-liable
-liar
-liars
-libbard
-libelling
-libels
-liberal
-liberality
-liberte
-liberties
-libertine
-libertines
-liberty
-library
-libya
-licence
-licens
-license
-licentious
-lichas
-licio
-lick
-licked
-licker
-lictors
-lid
-lids
-lie
-lied
-lief
-liefest
-liege
-liegeman
-liegemen
-lien
-lies
-liest
-lieth
-lieu
-lieutenant
-lieutenantry
-lieutenants
-lieve
-life
-lifeblood
-lifeless
-lifelings
-lift
-lifted
-lifter
-lifteth
-lifting
-lifts
-lig
-ligarius
-liggens
-light
-lighted
-lighten
-lightens
-lighter
-lightest
-lightly
-lightness
-lightning
-lightnings
-lights
-lik
-like
-liked
-likeliest
-likelihood
-likelihoods
-likely
-likeness
-liker
-likes
-likest
-likewise
-liking
-likings
-lilies
-lily
-lim
-limander
-limb
-limbeck
-limbecks
-limber
-limbo
-limbs
-lime
-limed
-limehouse
-limekilns
-limit
-limitation
-limited
-limits
-limn
-limp
-limping
-limps
-lin
-lincoln
-lincolnshire
-line
-lineal
-lineally
-lineament
-lineaments
-lined
-linen
-linens
-lines
-ling
-lingare
-linger
-lingered
-lingers
-linguist
-lining
-link
-links
-linsey
-linstock
-linta
-lion
-lionel
-lioness
-lions
-lip
-lipp
-lips
-lipsbury
-liquid
-liquor
-liquorish
-liquors
-lirra
-lisbon
-lisp
-lisping
-list
-listen
-listening
-lists
-literatured
-lither
-litter
-little
-littlest
-liv
-live
-lived
-livelier
-livelihood
-livelong
-lively
-liver
-liveries
-livers
-livery
-lives
-livest
-liveth
-livia
-living
-livings
-lizard
-lizards
-ll
-lll
-llous
-lnd
-lo
-loa
-loach
-load
-loaden
-loading
-loads
-loaf
-loam
-loan
-loath
-loathe
-loathed
-loather
-loathes
-loathing
-loathly
-loathness
-loathsome
-loathsomeness
-loathsomest
-loaves
-lob
-lobbies
-lobby
-local
-lochaber
-lock
-locked
-locking
-lockram
-locks
-locusts
-lode
-lodg
-lodge
-lodged
-lodgers
-lodges
-lodging
-lodgings
-lodovico
-lodowick
-lofty
-log
-logger
-loggerhead
-loggerheads
-loggets
-logic
-logs
-loins
-loiter
-loiterer
-loiterers
-loitering
-lolling
-lolls
-lombardy
-london
-londoners
-lone
-loneliness
-lonely
-long
-longaville
-longboat
-longed
-longer
-longest
-longeth
-longing
-longings
-longly
-longs
-longtail
-loo
-loof
-look
-looked
-looker
-lookers
-lookest
-looking
-looks
-loon
-loop
-loos
-loose
-loosed
-loosely
-loosen
-loosing
-lop
-lopp
-loquitur
-lord
-lorded
-lording
-lordings
-lordliness
-lordly
-lords
-lordship
-lordships
-lorenzo
-lorn
-lorraine
-lorship
-los
-lose
-loser
-losers
-loses
-losest
-loseth
-losing
-loss
-losses
-lost
-lot
-lots
-lott
-lottery
-loud
-louder
-loudly
-lour
-loureth
-louring
-louse
-louses
-lousy
-lout
-louted
-louts
-louvre
-lov
-love
-loved
-lovedst
-lovel
-lovelier
-loveliness
-lovell
-lovely
-lover
-lovered
-lovers
-loves
-lovest
-loveth
-loving
-lovingly
-low
-lowe
-lower
-lowest
-lowing
-lowliness
-lowly
-lown
-lowness
-loyal
-loyally
-loyalties
-loyalty
-lozel
-lt
-lubber
-lubberly
-luc
-luccicos
-luce
-lucentio
-luces
-lucetta
-luciana
-lucianus
-lucifer
-lucifier
-lucilius
-lucina
-lucio
-lucius
-luck
-luckier
-luckiest
-luckily
-luckless
-lucky
-lucre
-lucrece
-lucretia
-lucullius
-lucullus
-lucy
-lud
-ludlow
-lug
-lugg
-luggage
-luke
-lukewarm
-lull
-lulla
-lullaby
-lulls
-lumbert
-lump
-lumpish
-luna
-lunacies
-lunacy
-lunatic
-lunatics
-lunes
-lungs
-lupercal
-lurch
-lure
-lurk
-lurketh
-lurking
-lurks
-luscious
-lush
-lust
-lusted
-luster
-lustful
-lustier
-lustiest
-lustig
-lustihood
-lustily
-lustre
-lustrous
-lusts
-lusty
-lute
-lutes
-lutestring
-lutheran
-luxurious
-luxuriously
-luxury
-ly
-lycaonia
-lycurguses
-lydia
-lye
-lyen
-lying
-lym
-lymoges
-lynn
-lysander
-m
-ma
-maan
-mab
-macbeth
-maccabaeus
-macdonwald
-macduff
-mace
-macedon
-maces
-machiavel
-machination
-machinations
-machine
-mack
-macmorris
-maculate
-maculation
-mad
-madam
-madame
-madams
-madcap
-madded
-madding
-made
-madeira
-madly
-madman
-madmen
-madness
-madonna
-madrigals
-mads
-maecenas
-maggot
-maggots
-magic
-magical
-magician
-magistrate
-magistrates
-magnanimity
-magnanimous
-magni
-magnifi
-magnificence
-magnificent
-magnifico
-magnificoes
-magnus
-mahomet
-mahu
-maid
-maiden
-maidenhead
-maidenheads
-maidenhood
-maidenhoods
-maidenliest
-maidenly
-maidens
-maidhood
-maids
-mail
-mailed
-mails
-maim
-maimed
-maims
-main
-maincourse
-maine
-mainly
-mainmast
-mains
-maintain
-maintained
-maintains
-maintenance
-mais
-maison
-majestas
-majestee
-majestic
-majestical
-majestically
-majesties
-majesty
-major
-majority
-mak
-make
-makeless
-maker
-makers
-makes
-makest
-maketh
-making
-makings
-mal
-mala
-maladies
-malady
-malapert
-malcolm
-malcontent
-malcontents
-male
-maledictions
-malefactions
-malefactor
-malefactors
-males
-malevolence
-malevolent
-malhecho
-malice
-malicious
-maliciously
-malign
-malignancy
-malignant
-malignantly
-malkin
-mall
-mallard
-mallet
-mallows
-malmsey
-malt
-maltworms
-malvolio
-mamillius
-mammering
-mammet
-mammets
-mammock
-man
-manacle
-manacles
-manage
-managed
-manager
-managing
-manakin
-manchus
-mandate
-mandragora
-mandrake
-mandrakes
-mane
-manent
-manes
-manet
-manfully
-mangle
-mangled
-mangles
-mangling
-mangy
-manhood
-manhoods
-manifest
-manifested
-manifests
-manifold
-manifoldly
-manka
-mankind
-manlike
-manly
-mann
-manna
-manner
-mannerly
-manners
-manningtree
-mannish
-manor
-manors
-mans
-mansion
-mansionry
-mansions
-manslaughter
-mantle
-mantled
-mantles
-mantua
-mantuan
-manual
-manure
-manured
-manus
-many
-map
-mapp
-maps
-mar
-marble
-marbled
-marcade
-marcellus
-march
-marches
-marcheth
-marching
-marchioness
-marchpane
-marcians
-marcius
-marcus
-mardian
-mare
-mares
-marg
-margarelon
-margaret
-marge
-margent
-margery
-maria
-marian
-mariana
-maries
-marigold
-mariner
-mariners
-maritime
-marjoram
-mark
-marked
-market
-marketable
-marketplace
-markets
-marking
-markman
-marks
-marl
-marle
-marmoset
-marquess
-marquis
-marr
-marriage
-marriages
-married
-marries
-marring
-marrow
-marrowless
-marrows
-marry
-marrying
-mars
-marseilles
-marsh
-marshal
-marshalsea
-marshalship
-mart
-marted
-martem
-martext
-martial
-martin
-martino
-martius
-martlemas
-martlet
-marts
-martyr
-martyrs
-marullus
-marv
-marvel
-marvell
-marvellous
-marvellously
-marvels
-mary
-mas
-masculine
-masham
-mask
-masked
-masker
-maskers
-masking
-masks
-mason
-masonry
-masons
-masque
-masquers
-masques
-masquing
-mass
-massacre
-massacres
-masses
-massy
-mast
-mastcr
-master
-masterdom
-masterest
-masterless
-masterly
-masterpiece
-masters
-mastership
-mastic
-mastiff
-mastiffs
-masts
-match
-matches
-matcheth
-matching
-matchless
-mate
-mated
-mater
-material
-mates
-mathematics
-matin
-matron
-matrons
-matter
-matters
-matthew
-mattock
-mattress
-mature
-maturity
-maud
-maudlin
-maugre
-maul
-maund
-mauri
-mauritania
-mauvais
-maw
-maws
-maxim
-may
-mayday
-mayest
-mayor
-maypole
-mayst
-maz
-maze
-mazed
-mazes
-mazzard
-me
-meacock
-mead
-meadow
-meadows
-meads
-meagre
-meal
-meals
-mealy
-mean
-meanders
-meaner
-meanest
-meaneth
-meaning
-meanings
-meanly
-means
-meant
-meantime
-meanwhile
-measles
-measur
-measurable
-measure
-measured
-measureless
-measures
-measuring
-meat
-meats
-mechanic
-mechanical
-mechanicals
-mechanics
-mechante
-med
-medal
-meddle
-meddler
-meddling
-mede
-medea
-media
-mediation
-mediators
-medice
-medicinal
-medicine
-medicines
-meditate
-meditates
-meditating
-meditation
-meditations
-mediterranean
-mediterraneum
-medlar
-medlars
-meed
-meeds
-meek
-meekly
-meekness
-meet
-meeter
-meetest
-meeting
-meetings
-meetly
-meetness
-meets
-meg
-mehercle
-meilleur
-meiny
-meisen
-melancholies
-melancholy
-melford
-mell
-mellifluous
-mellow
-mellowing
-melodious
-melody
-melt
-melted
-melteth
-melting
-melts
-melun
-member
-members
-memento
-memorable
-memorandums
-memorial
-memorials
-memories
-memoriz
-memorize
-memory
-memphis
-men
-menac
-menace
-menaces
-menaphon
-menas
-mend
-mended
-mender
-mending
-mends
-menecrates
-menelaus
-menenius
-mental
-menteith
-mention
-mentis
-menton
-mephostophilus
-mer
-mercatante
-mercatio
-mercenaries
-mercenary
-mercer
-merchandise
-merchandized
-merchant
-merchants
-mercies
-merciful
-mercifully
-merciless
-mercurial
-mercuries
-mercury
-mercutio
-mercy
-mere
-mered
-merely
-merest
-meridian
-merit
-merited
-meritorious
-merits
-merlin
-mermaid
-mermaids
-merops
-merrier
-merriest
-merrily
-merriman
-merriment
-merriments
-merriness
-merry
-mervailous
-mes
-mesh
-meshes
-mesopotamia
-mess
-message
-messages
-messala
-messaline
-messenger
-messengers
-messes
-messina
-met
-metal
-metals
-metamorphis
-metamorphoses
-metaphor
-metaphysical
-metaphysics
-mete
-metellus
-meteor
-meteors
-meteyard
-metheglin
-metheglins
-methink
-methinks
-method
-methods
-methought
-methoughts
-metre
-metres
-metropolis
-mette
-mettle
-mettled
-meus
-mew
-mewed
-mewling
-mexico
-mi
-mice
-michael
-michaelmas
-micher
-miching
-mickle
-microcosm
-mid
-midas
-middest
-middle
-middleham
-midnight
-midriff
-midst
-midsummer
-midway
-midwife
-midwives
-mienne
-might
-mightful
-mightier
-mightiest
-mightily
-mightiness
-mightst
-mighty
-milan
-milch
-mild
-milder
-mildest
-mildew
-mildews
-mildly
-mildness
-mile
-miles
-milford
-militarist
-military
-milk
-milking
-milkmaid
-milks
-milksops
-milky
-mill
-mille
-miller
-milliner
-million
-millioned
-millions
-mills
-millstones
-milo
-mimic
-minc
-mince
-minces
-mincing
-mind
-minded
-minding
-mindless
-minds
-mine
-mineral
-minerals
-minerva
-mines
-mingle
-mingled
-mingling
-minikin
-minim
-minime
-minimo
-minimus
-mining
-minion
-minions
-minist
-minister
-ministers
-ministration
-minnow
-minnows
-minola
-minority
-minos
-minotaurs
-minstrel
-minstrels
-minstrelsy
-mint
-mints
-minute
-minutely
-minutes
-minx
-mio
-mir
-mirable
-miracle
-miracles
-miraculous
-miranda
-mire
-mirror
-mirrors
-mirth
-mirthful
-miry
-mis
-misadventur
-misadventure
-misanthropos
-misapplied
-misbecame
-misbecom
-misbecome
-misbegot
-misbegotten
-misbeliever
-misbelieving
-misbhav
-miscall
-miscalled
-miscarried
-miscarries
-miscarry
-miscarrying
-mischance
-mischances
-mischief
-mischiefs
-mischievous
-misconceived
-misconst
-misconster
-misconstruction
-misconstrued
-misconstrues
-miscreant
-miscreate
-misdeed
-misdeeds
-misdemean
-misdemeanours
-misdoubt
-misdoubteth
-misdoubts
-misenum
-miser
-miserable
-miserably
-misericorde
-miseries
-misers
-misery
-misfortune
-misfortunes
-misgive
-misgives
-misgiving
-misgoverned
-misgovernment
-misgraffed
-misguide
-mishap
-mishaps
-misheard
-misinterpret
-mislead
-misleader
-misleaders
-misleading
-misled
-mislike
-misord
-misplac
-misplaced
-misplaces
-mispris
-misprised
-misprision
-misprizing
-misproud
-misquote
-misreport
-miss
-missed
-misses
-misshap
-misshapen
-missheathed
-missing
-missingly
-missions
-missive
-missives
-misspoke
-mist
-mista
-mistak
-mistake
-mistaken
-mistakes
-mistaketh
-mistaking
-mistakings
-mistemp
-mistempered
-misterm
-mistful
-misthink
-misthought
-mistletoe
-mistook
-mistreadings
-mistress
-mistresses
-mistresss
-mistriship
-mistrust
-mistrusted
-mistrustful
-mistrusting
-mists
-misty
-misus
-misuse
-misused
-misuses
-mites
-mithridates
-mitigate
-mitigation
-mix
-mixed
-mixture
-mixtures
-mm
-mnd
-moan
-moans
-moat
-moated
-mobled
-mock
-mockable
-mocker
-mockeries
-mockers
-mockery
-mocking
-mocks
-mockvater
-mockwater
-model
-modena
-moderate
-moderately
-moderation
-modern
-modest
-modesties
-modestly
-modesty
-modicums
-modo
-module
-moe
-moi
-moiety
-moist
-moisten
-moisture
-moldwarp
-mole
-molehill
-moles
-molest
-molestation
-mollification
-mollis
-molten
-molto
-mome
-moment
-momentary
-moming
-mon
-monachum
-monarch
-monarchies
-monarchize
-monarcho
-monarchs
-monarchy
-monast
-monastery
-monastic
-monday
-monde
-money
-moneys
-mong
-monger
-mongers
-monging
-mongrel
-mongrels
-mongst
-monk
-monkey
-monkeys
-monks
-monmouth
-monopoly
-mons
-monsieur
-monsieurs
-monster
-monsters
-monstrous
-monstrously
-monstrousness
-monstruosity
-montacute
-montage
-montague
-montagues
-montano
-montant
-montez
-montferrat
-montgomery
-month
-monthly
-months
-montjoy
-monument
-monumental
-monuments
-mood
-moods
-moody
-moon
-moonbeams
-moonish
-moonlight
-moons
-moonshine
-moonshines
-moor
-moorfields
-moors
-moorship
-mop
-mope
-moping
-mopping
-mopsa
-moral
-moraler
-morality
-moralize
-mordake
-more
-moreover
-mores
-morgan
-mori
-morisco
-morn
-morning
-mornings
-morocco
-morris
-morrow
-morrows
-morsel
-morsels
-mort
-mortal
-mortality
-mortally
-mortals
-mortar
-mortgaged
-mortified
-mortifying
-mortimer
-mortimers
-mortis
-mortise
-morton
-mose
-moss
-mossgrown
-most
-mote
-moth
-mother
-mothers
-moths
-motion
-motionless
-motions
-motive
-motives
-motley
-mots
-mought
-mould
-moulded
-mouldeth
-moulds
-mouldy
-moult
-moulten
-mounch
-mounseur
-mounsieur
-mount
-mountain
-mountaineer
-mountaineers
-mountainous
-mountains
-mountant
-mountanto
-mountebank
-mountebanks
-mounted
-mounteth
-mounting
-mounts
-mourn
-mourned
-mourner
-mourners
-mournful
-mournfully
-mourning
-mourningly
-mournings
-mourns
-mous
-mouse
-mousetrap
-mousing
-mouth
-mouthed
-mouths
-mov
-movables
-move
-moveable
-moveables
-moved
-mover
-movers
-moves
-moveth
-moving
-movingly
-movousus
-mow
-mowbray
-mower
-mowing
-mows
-moy
-moys
-moyses
-mrs
-much
-muck
-mud
-mudded
-muddied
-muddy
-muffins
-muffl
-muffle
-muffled
-muffler
-muffling
-mugger
-mugs
-mulberries
-mulberry
-mule
-mules
-muleteers
-mulier
-mulieres
-muliteus
-mull
-mulmutius
-multiplied
-multiply
-multiplying
-multipotent
-multitude
-multitudes
-multitudinous
-mum
-mumble
-mumbling
-mummers
-mummy
-mun
-munch
-muniments
-munition
-murd
-murder
-murdered
-murderer
-murderers
-murdering
-murderous
-murders
-mure
-murk
-murkiest
-murky
-murmur
-murmurers
-murmuring
-murrain
-murray
-murrion
-murther
-murtherer
-murtherers
-murthering
-murtherous
-murthers
-mus
-muscadel
-muscovites
-muscovits
-muscovy
-muse
-muses
-mush
-mushrooms
-music
-musical
-musician
-musicians
-musics
-musing
-musings
-musk
-musket
-muskets
-muskos
-muss
-mussel
-mussels
-must
-mustachio
-mustard
-mustardseed
-muster
-mustering
-musters
-musty
-mutability
-mutable
-mutation
-mutations
-mute
-mutes
-mutest
-mutine
-mutineer
-mutineers
-mutines
-mutinies
-mutinous
-mutiny
-mutius
-mutter
-muttered
-mutton
-muttons
-mutual
-mutualities
-mutually
-muzzl
-muzzle
-muzzled
-mv
-mww
-my
-mynheers
-myrmidon
-myrmidons
-myrtle
-myself
-myst
-mysteries
-mystery
-n
-nag
-nage
-nags
-naiads
-nail
-nails
-nak
-naked
-nakedness
-nal
-nam
-name
-named
-nameless
-namely
-names
-namest
-naming
-nan
-nance
-nap
-nape
-napes
-napkin
-napkins
-naples
-napless
-napping
-naps
-narbon
-narcissus
-narines
-narrow
-narrowly
-naso
-nasty
-nathaniel
-natifs
-nation
-nations
-native
-nativity
-natur
-natural
-naturalize
-naturally
-nature
-natured
-natures
-natus
-naught
-naughtily
-naughty
-navarre
-nave
-navel
-navigation
-navy
-nay
-nayward
-nayword
-nazarite
-ne
-neaf
-neamnoins
-neanmoins
-neapolitan
-neapolitans
-near
-nearer
-nearest
-nearly
-nearness
-neat
-neatly
-neb
-nebour
-nebuchadnezzar
-nec
-necessaries
-necessarily
-necessary
-necessitied
-necessities
-necessity
-neck
-necklace
-necks
-nectar
-ned
-nedar
-need
-needed
-needer
-needful
-needfull
-needing
-needle
-needles
-needless
-needly
-needs
-needy
-neer
-neeze
-nefas
-negation
-negative
-negatives
-neglect
-neglected
-neglecting
-neglectingly
-neglection
-negligence
-negligent
-negotiate
-negotiations
-negro
-neigh
-neighbors
-neighbour
-neighbourhood
-neighbouring
-neighbourly
-neighbours
-neighing
-neighs
-neither
-nell
-nemean
-nemesis
-neoptolemus
-nephew
-nephews
-neptune
-ner
-nereides
-nerissa
-nero
-neroes
-ners
-nerve
-nerves
-nervii
-nervy
-nessus
-nest
-nestor
-nests
-net
-nether
-netherlands
-nets
-nettle
-nettled
-nettles
-neuter
-neutral
-nev
-never
-nevil
-nevils
-new
-newborn
-newer
-newest
-newgate
-newly
-newness
-news
-newsmongers
-newt
-newts
-next
-nibbling
-nicanor
-nice
-nicely
-niceness
-nicer
-nicety
-nicholas
-nick
-nickname
-nicks
-niece
-nieces
-niggard
-niggarding
-niggardly
-nigh
-night
-nightcap
-nightcaps
-nighted
-nightgown
-nightingale
-nightingales
-nightly
-nightmare
-nights
-nightwork
-nihil
-nile
-nill
-nilus
-nimble
-nimbleness
-nimbler
-nimbly
-nine
-nineteen
-ning
-ningly
-ninny
-ninth
-ninus
-niobe
-niobes
-nip
-nipp
-nipping
-nipple
-nips
-nit
-nly
-nnight
-nnights
-no
-noah
-nob
-nobility
-nobis
-noble
-nobleman
-noblemen
-nobleness
-nobler
-nobles
-noblesse
-noblest
-nobly
-nobody
-noces
-nod
-nodded
-nodding
-noddle
-noddles
-noddy
-nods
-noes
-nointed
-nois
-noise
-noiseless
-noisemaker
-noises
-noisome
-nole
-nominate
-nominated
-nomination
-nominativo
-non
-nonage
-nonce
-none
-nonino
-nonny
-nonpareil
-nonsuits
-nony
-nook
-nooks
-noon
-noonday
-noontide
-nor
-norbery
-norfolk
-norman
-normandy
-normans
-north
-northampton
-northamptonshire
-northerly
-northern
-northgate
-northumberland
-northumberlands
-northward
-norway
-norways
-norwegian
-norweyan
-nos
-nose
-nosegays
-noseless
-noses
-noster
-nostra
-nostril
-nostrils
-not
-notable
-notably
-notary
-notch
-note
-notebook
-noted
-notedly
-notes
-notest
-noteworthy
-nothing
-nothings
-notice
-notify
-noting
-notion
-notorious
-notoriously
-notre
-notwithstanding
-nought
-noun
-nouns
-nourish
-nourished
-nourisher
-nourishes
-nourisheth
-nourishing
-nourishment
-nous
-novel
-novelties
-novelty
-noverbs
-novi
-novice
-novices
-novum
-now
-nowhere
-noyance
-ns
-nt
-nubibus
-numa
-numb
-number
-numbered
-numbering
-numberless
-numbers
-numbness
-nun
-nuncio
-nuncle
-nunnery
-nuns
-nuntius
-nuptial
-nurs
-nurse
-nursed
-nurser
-nursery
-nurses
-nurseth
-nursh
-nursing
-nurtur
-nurture
-nut
-nuthook
-nutmeg
-nutmegs
-nutriment
-nuts
-nutshell
-ny
-nym
-nymph
-nymphs
-o
-oak
-oaken
-oaks
-oared
-oars
-oatcake
-oaten
-oath
-oathable
-oaths
-oats
-ob
-obduracy
-obdurate
-obedience
-obedient
-obeisance
-oberon
-obey
-obeyed
-obeying
-obeys
-obidicut
-object
-objected
-objections
-objects
-oblation
-oblations
-obligation
-obligations
-obliged
-oblique
-oblivion
-oblivious
-obloquy
-obscene
-obscenely
-obscur
-obscure
-obscured
-obscurely
-obscures
-obscuring
-obscurity
-obsequies
-obsequious
-obsequiously
-observ
-observance
-observances
-observancy
-observant
-observants
-observation
-observe
-observed
-observer
-observers
-observing
-observingly
-obsque
-obstacle
-obstacles
-obstinacy
-obstinate
-obstinately
-obstruct
-obstruction
-obstructions
-obtain
-obtained
-obtaining
-occasion
-occasions
-occident
-occidental
-occulted
-occupat
-occupation
-occupations
-occupied
-occupies
-occupy
-occurrence
-occurrences
-occurrents
-ocean
-oceans
-octavia
-octavius
-ocular
-od
-odd
-oddest
-oddly
-odds
-ode
-odes
-odious
-odoriferous
-odorous
-odour
-odours
-ods
-oeillades
-oes
-oeuvres
-of
-ofephesus
-off
-offal
-offence
-offenceful
-offences
-offend
-offended
-offendendo
-offender
-offenders
-offendeth
-offending
-offendress
-offends
-offense
-offenseless
-offenses
-offensive
-offer
-offered
-offering
-offerings
-offers
-offert
-offic
-office
-officed
-officer
-officers
-offices
-official
-officious
-offspring
-oft
-often
-oftener
-oftentimes
-oh
-oil
-oils
-oily
-old
-oldcastle
-olden
-older
-oldest
-oldness
-olive
-oliver
-olivers
-olives
-olivia
-olympian
-olympus
-oman
-omans
-omen
-ominous
-omission
-omit
-omittance
-omitted
-omitting
-omne
-omnes
-omnipotent
-on
-once
-one
-ones
-oneyers
-ongles
-onion
-onions
-only
-onset
-onward
-onwards
-oo
-ooze
-oozes
-oozy
-op
-opal
-ope
-open
-opener
-opening
-openly
-openness
-opens
-operant
-operate
-operation
-operations
-operative
-opes
-oph
-ophelia
-opinion
-opinions
-opportune
-opportunities
-opportunity
-oppos
-oppose
-opposed
-opposeless
-opposer
-opposers
-opposes
-opposing
-opposite
-opposites
-opposition
-oppositions
-oppress
-oppressed
-oppresses
-oppresseth
-oppressing
-oppression
-oppressor
-opprest
-opprobriously
-oppugnancy
-opulency
-opulent
-or
-oracle
-oracles
-orange
-oration
-orator
-orators
-oratory
-orb
-orbed
-orbs
-orchard
-orchards
-ord
-ordain
-ordained
-ordaining
-order
-ordered
-ordering
-orderless
-orderly
-orders
-ordinance
-ordinant
-ordinaries
-ordinary
-ordnance
-ords
-ordure
-ore
-organ
-organs
-orgillous
-orient
-orifex
-origin
-original
-orisons
-ork
-orlando
-orld
-orleans
-ornament
-ornaments
-orodes
-orphan
-orphans
-orpheus
-orsino
-ort
-orthography
-orts
-oscorbidulchos
-osier
-osiers
-osprey
-osr
-osric
-ossa
-ost
-ostent
-ostentare
-ostentation
-ostents
-ostler
-ostlers
-ostrich
-osw
-oswald
-othello
-other
-othergates
-others
-otherwhere
-otherwhiles
-otherwise
-otter
-ottoman
-ottomites
-oublie
-ouches
-ought
-oui
-ounce
-ounces
-ouphes
-our
-ours
-ourself
-ourselves
-ousel
-out
-outbids
-outbrave
-outbraves
-outbreak
-outcast
-outcries
-outcry
-outdar
-outdare
-outdares
-outdone
-outfac
-outface
-outfaced
-outfacing
-outfly
-outfrown
-outgo
-outgoes
-outgrown
-outjest
-outlaw
-outlawry
-outlaws
-outliv
-outlive
-outlives
-outliving
-outlook
-outlustres
-outpriz
-outrage
-outrageous
-outrages
-outran
-outright
-outroar
-outrun
-outrunning
-outruns
-outscold
-outscorn
-outsell
-outsells
-outside
-outsides
-outspeaks
-outsport
-outstare
-outstay
-outstood
-outstretch
-outstretched
-outstrike
-outstrip
-outstripped
-outswear
-outvenoms
-outward
-outwardly
-outwards
-outwear
-outweighs
-outwent
-outworn
-outworths
-oven
-over
-overawe
-overbear
-overblown
-overboard
-overbold
-overborne
-overbulk
-overbuys
-overcame
-overcast
-overcharg
-overcharged
-overcome
-overcomes
-overdone
-overearnest
-overfar
-overflow
-overflown
-overglance
-overgo
-overgone
-overgorg
-overgrown
-overhead
-overhear
-overheard
-overhold
-overjoyed
-overkind
-overland
-overleather
-overlive
-overlook
-overlooking
-overlooks
-overmaster
-overmounting
-overmuch
-overpass
-overpeer
-overpeering
-overplus
-overrul
-overrun
-overscutch
-overset
-overshades
-overshine
-overshines
-overshot
-oversights
-overspread
-overstain
-overswear
-overt
-overta
-overtake
-overtaketh
-overthrow
-overthrown
-overthrows
-overtook
-overtopp
-overture
-overturn
-overwatch
-overween
-overweening
-overweigh
-overwhelm
-overwhelming
-overworn
-ovid
-ovidius
-ow
-owe
-owed
-owedst
-owen
-owes
-owest
-oweth
-owing
-owl
-owls
-own
-owner
-owners
-owning
-owns
-owy
-ox
-oxen
-oxford
-oxfordshire
-oxlips
-oyes
-oyster
-p
-pabble
-pabylon
-pac
-pace
-paced
-paces
-pacified
-pacify
-pacing
-pack
-packet
-packets
-packhorses
-packing
-packings
-packs
-packthread
-pacorus
-paction
-pad
-paddle
-paddling
-paddock
-padua
-pagan
-pagans
-page
-pageant
-pageants
-pages
-pah
-paid
-pail
-pailfuls
-pails
-pain
-pained
-painful
-painfully
-pains
-paint
-painted
-painter
-painting
-paintings
-paints
-pair
-paired
-pairs
-pajock
-pal
-palabras
-palace
-palaces
-palamedes
-palate
-palates
-palatine
-palating
-pale
-paled
-paleness
-paler
-pales
-palestine
-palfrey
-palfreys
-palisadoes
-pall
-pallabris
-pallas
-pallets
-palm
-palmer
-palmers
-palms
-palmy
-palpable
-palsied
-palsies
-palsy
-palt
-palter
-paltry
-paly
-pamp
-pamper
-pamphlets
-pan
-pancackes
-pancake
-pancakes
-pandar
-pandars
-pandarus
-pander
-panderly
-panders
-pandulph
-panel
-pang
-panging
-pangs
-pannier
-pannonians
-pansa
-pansies
-pant
-pantaloon
-panted
-pantheon
-panther
-panthino
-panting
-pantingly
-pantler
-pantry
-pants
-pap
-papal
-paper
-papers
-paphlagonia
-paphos
-papist
-paps
-par
-parable
-paracelsus
-paradise
-paradox
-paradoxes
-paragon
-paragons
-parallel
-parallels
-paramour
-paramours
-parapets
-paraquito
-parasite
-parasites
-parca
-parcel
-parcell
-parcels
-parch
-parched
-parching
-parchment
-pard
-pardon
-pardona
-pardoned
-pardoner
-pardoning
-pardonne
-pardonner
-pardonnez
-pardons
-pare
-pared
-parel
-parent
-parentage
-parents
-parfect
-paring
-parings
-paris
-parish
-parishioners
-parisians
-paritors
-park
-parks
-parle
-parler
-parles
-parley
-parlez
-parliament
-parlors
-parlour
-parlous
-parmacity
-parolles
-parricide
-parricides
-parrot
-parrots
-parsley
-parson
-part
-partake
-partaken
-partaker
-partakers
-parted
-parthia
-parthian
-parthians
-parti
-partial
-partialize
-partially
-participate
-participation
-particle
-particular
-particularities
-particularize
-particularly
-particulars
-parties
-parting
-partisan
-partisans
-partition
-partizan
-partlet
-partly
-partner
-partners
-partridge
-parts
-party
-pas
-pash
-pashed
-pashful
-pass
-passable
-passado
-passage
-passages
-passant
-passed
-passenger
-passengers
-passes
-passeth
-passing
-passio
-passion
-passionate
-passioning
-passions
-passive
-passport
-passy
-past
-paste
-pasterns
-pasties
-pastime
-pastimes
-pastoral
-pastorals
-pastors
-pastry
-pasture
-pastures
-pasty
-pat
-patay
-patch
-patchery
-patches
-pate
-pated
-patent
-patents
-paternal
-pates
-path
-pathetical
-paths
-pathway
-pathways
-patience
-patient
-patiently
-patients
-patines
-patrician
-patricians
-patrick
-patrimony
-patroclus
-patron
-patronage
-patroness
-patrons
-patrum
-patter
-pattern
-patterns
-pattle
-pauca
-paucas
-paul
-paulina
-paunch
-paunches
-pause
-pauser
-pauses
-pausingly
-pauvres
-pav
-paved
-pavement
-pavilion
-pavilions
-pavin
-paw
-pawn
-pawns
-paws
-pax
-pay
-payest
-paying
-payment
-payments
-pays
-paysan
-paysans
-pe
-peace
-peaceable
-peaceably
-peaceful
-peacemakers
-peaces
-peach
-peaches
-peacock
-peacocks
-peak
-peaking
-peal
-peals
-pear
-peard
-pearl
-pearls
-pears
-peas
-peasant
-peasantry
-peasants
-peascod
-pease
-peaseblossom
-peat
-peaten
-peating
-pebble
-pebbled
-pebbles
-peck
-pecks
-peculiar
-pecus
-pedant
-pedantical
-pedascule
-pede
-pedestal
-pedigree
-pedlar
-pedlars
-pedro
-peds
-peel
-peep
-peeped
-peeping
-peeps
-peer
-peereth
-peering
-peerless
-peers
-peesel
-peevish
-peevishly
-peflur
-peg
-pegasus
-pegs
-peise
-peised
-peize
-pelf
-pelican
-pelion
-pell
-pella
-pelleted
-peloponnesus
-pelt
-pelting
-pembroke
-pen
-penalties
-penalty
-penance
-pence
-pencil
-pencill
-pencils
-pendant
-pendent
-pendragon
-pendulous
-penelope
-penetrable
-penetrate
-penetrative
-penitence
-penitent
-penitential
-penitently
-penitents
-penker
-penknife
-penn
-penned
-penning
-pennons
-penny
-pennyworth
-pennyworths
-pens
-pense
-pension
-pensioners
-pensive
-pensived
-pensively
-pent
-pentecost
-penthesilea
-penthouse
-penurious
-penury
-peopl
-people
-peopled
-peoples
-pepin
-pepper
-peppercorn
-peppered
-per
-peradventure
-peradventures
-perceiv
-perceive
-perceived
-perceives
-perceiveth
-perch
-perchance
-percies
-percussion
-percy
-perdie
-perdita
-perdition
-perdonato
-perdu
-perdurable
-perdurably
-perdy
-pere
-peregrinate
-peremptorily
-peremptory
-perfect
-perfected
-perfecter
-perfectest
-perfection
-perfections
-perfectly
-perfectness
-perfidious
-perfidiously
-perforce
-perform
-performance
-performances
-performed
-performer
-performers
-performing
-performs
-perfum
-perfume
-perfumed
-perfumer
-perfumes
-perge
-perhaps
-periapts
-perigort
-perigouna
-peril
-perilous
-perils
-period
-periods
-perish
-perished
-perishest
-perisheth
-perishing
-periwig
-perjur
-perjure
-perjured
-perjuries
-perjury
-perk
-perkes
-permafoy
-permanent
-permission
-permissive
-permit
-permitted
-pernicious
-perniciously
-peroration
-perpend
-perpendicular
-perpendicularly
-perpetual
-perpetually
-perpetuity
-perplex
-perplexed
-perplexity
-pers
-persecuted
-persecutions
-persecutor
-perseus
-persever
-perseverance
-persevers
-persia
-persian
-persist
-persisted
-persistency
-persistive
-persists
-person
-personae
-personage
-personages
-personal
-personally
-personate
-personated
-personates
-personating
-persons
-perspective
-perspectively
-perspectives
-perspicuous
-persuade
-persuaded
-persuades
-persuading
-persuasion
-persuasions
-pert
-pertain
-pertaining
-pertains
-pertaunt
-pertinent
-pertly
-perturb
-perturbation
-perturbations
-perturbed
-perus
-perusal
-peruse
-perused
-perusing
-perverse
-perversely
-perverseness
-pervert
-perverted
-peseech
-pest
-pester
-pestiferous
-pestilence
-pestilent
-pet
-petar
-peter
-petit
-petition
-petitionary
-petitioner
-petitioners
-petitions
-peto
-petrarch
-petruchio
-petter
-petticoat
-petticoats
-pettiness
-pettish
-pettitoes
-petty
-peu
-pew
-pewter
-pewterer
-phaethon
-phaeton
-phantasime
-phantasimes
-phantasma
-pharamond
-pharaoh
-pharsalia
-pheasant
-pheazar
-phebe
-phebes
-pheebus
-pheeze
-phibbus
-philadelphos
-philario
-philarmonus
-philemon
-philip
-philippan
-philippe
-philippi
-phillida
-philo
-philomel
-philomela
-philosopher
-philosophers
-philosophical
-philosophy
-philostrate
-philotus
-phlegmatic
-phoebe
-phoebus
-phoenicia
-phoenicians
-phoenix
-phorbus
-photinus
-phrase
-phraseless
-phrases
-phrygia
-phrygian
-phrynia
-physic
-physical
-physician
-physicians
-physics
-pia
-pibble
-pible
-picardy
-pick
-pickaxe
-pickaxes
-pickbone
-picked
-pickers
-picking
-pickle
-picklock
-pickpurse
-picks
-pickt
-pickthanks
-pictur
-picture
-pictured
-pictures
-pid
-pie
-piec
-piece
-pieces
-piecing
-pied
-piedness
-pier
-pierc
-pierce
-pierced
-pierces
-pierceth
-piercing
-piercy
-piers
-pies
-piety
-pig
-pigeon
-pigeons
-pight
-pigmy
-pigrogromitus
-pike
-pikes
-pil
-pilate
-pilates
-pilchers
-pile
-piles
-pilf
-pilfering
-pilgrim
-pilgrimage
-pilgrims
-pill
-pillage
-pillagers
-pillar
-pillars
-pillicock
-pillory
-pillow
-pillows
-pills
-pilot
-pilots
-pimpernell
-pin
-pinch
-pinched
-pinches
-pinching
-pindarus
-pine
-pined
-pines
-pinfold
-pining
-pinion
-pink
-pinn
-pinnace
-pins
-pinse
-pint
-pintpot
-pioned
-pioneers
-pioner
-pioners
-pious
-pip
-pipe
-piper
-pipers
-pipes
-piping
-pippin
-pippins
-pirate
-pirates
-pisa
-pisanio
-pish
-pismires
-piss
-pissing
-pistol
-pistols
-pit
-pitch
-pitched
-pitcher
-pitchers
-pitchy
-piteous
-piteously
-pitfall
-pith
-pithless
-pithy
-pitie
-pitied
-pities
-pitiful
-pitifully
-pitiless
-pits
-pittance
-pittie
-pittikins
-pity
-pitying
-pius
-plac
-place
-placed
-placentio
-places
-placeth
-placid
-placing
-plack
-placket
-plackets
-plagu
-plague
-plagued
-plagues
-plaguing
-plaguy
-plain
-plainer
-plainest
-plaining
-plainings
-plainly
-plainness
-plains
-plainsong
-plaintful
-plaintiff
-plaintiffs
-plaints
-planched
-planet
-planetary
-planets
-planks
-plant
-plantage
-plantagenet
-plantagenets
-plantain
-plantation
-planted
-planteth
-plants
-plash
-plashy
-plast
-plaster
-plasterer
-plat
-plate
-plated
-plates
-platform
-platforms
-plats
-platted
-plausible
-plausive
-plautus
-play
-played
-player
-players
-playeth
-playfellow
-playfellows
-playhouse
-playing
-plays
-plea
-pleach
-pleached
-plead
-pleaded
-pleader
-pleaders
-pleading
-pleads
-pleas
-pleasance
-pleasant
-pleasantly
-please
-pleased
-pleaser
-pleasers
-pleases
-pleasest
-pleaseth
-pleasing
-pleasure
-pleasures
-plebeians
-plebeii
-plebs
-pledge
-pledges
-pleines
-plenitude
-plenteous
-plenteously
-plenties
-plentiful
-plentifully
-plenty
-pless
-plessed
-plessing
-pliant
-plied
-plies
-plight
-plighted
-plighter
-plod
-plodded
-plodders
-plodding
-plods
-plood
-ploody
-plot
-plots
-plotted
-plotter
-plough
-ploughed
-ploughman
-ploughmen
-plow
-plows
-pluck
-plucked
-plucker
-plucking
-plucks
-plue
-plum
-plume
-plumed
-plumes
-plummet
-plump
-plumpy
-plums
-plung
-plunge
-plunged
-plural
-plurisy
-plus
-pluto
-plutus
-ply
-po
-pocket
-pocketing
-pockets
-pocky
-pody
-poem
-poesy
-poet
-poetical
-poetry
-poets
-poictiers
-poinards
-poins
-point
-pointblank
-pointed
-pointing
-points
-pois
-poise
-poising
-poison
-poisoned
-poisoner
-poisoning
-poisonous
-poisons
-poke
-poking
-pol
-polack
-polacks
-poland
-pold
-pole
-poleaxe
-polecat
-polecats
-polemon
-poles
-poli
-policies
-policy
-polish
-polished
-politic
-politician
-politicians
-politicly
-polixenes
-poll
-polluted
-pollution
-polonius
-poltroons
-polusion
-polydamus
-polydore
-polyxena
-pomander
-pomegranate
-pomewater
-pomfret
-pomgarnet
-pommel
-pomp
-pompeius
-pompey
-pompion
-pompous
-pomps
-pond
-ponder
-ponderous
-ponds
-poniard
-poniards
-pont
-pontic
-pontifical
-ponton
-pooh
-pool
-poole
-poop
-poor
-poorer
-poorest
-poorly
-pop
-pope
-popedom
-popilius
-popingay
-popish
-popp
-poppy
-pops
-popular
-popularity
-populous
-porch
-porches
-pore
-poring
-pork
-porn
-porpentine
-porridge
-porringer
-port
-portable
-portage
-portal
-portance
-portcullis
-portend
-portends
-portent
-portentous
-portents
-porter
-porters
-portia
-portion
-portly
-portotartarossa
-portrait
-portraiture
-ports
-portugal
-pose
-posied
-posies
-position
-positive
-positively
-posse
-possess
-possessed
-possesses
-possesseth
-possessing
-possession
-possessions
-possessor
-posset
-possets
-possibilities
-possibility
-possible
-possibly
-possitable
-post
-poste
-posted
-posterior
-posteriors
-posterity
-postern
-posterns
-posters
-posthorse
-posthorses
-posthumus
-posting
-postmaster
-posts
-postscript
-posture
-postures
-posy
-pot
-potable
-potations
-potato
-potatoes
-potch
-potency
-potent
-potentates
-potential
-potently
-potents
-pothecary
-pother
-potion
-potions
-potpan
-pots
-potter
-potting
-pottle
-pouch
-poulter
-poultice
-poultney
-pouncet
-pound
-pounds
-pour
-pourest
-pouring
-pourquoi
-pours
-pout
-poverty
-pow
-powd
-powder
-power
-powerful
-powerfully
-powerless
-powers
-pox
-poys
-poysam
-prabbles
-practic
-practice
-practiced
-practicer
-practices
-practicing
-practis
-practisants
-practise
-practiser
-practisers
-practises
-practising
-praeclarissimus
-praemunire
-praetor
-praetors
-pragging
-prague
-prain
-prains
-prais
-praise
-praised
-praises
-praisest
-praiseworthy
-praising
-prancing
-prank
-pranks
-prat
-prate
-prated
-prater
-prating
-prattle
-prattler
-prattling
-prave
-prawls
-prawns
-pray
-prayer
-prayers
-praying
-prays
-pre
-preach
-preached
-preachers
-preaches
-preaching
-preachment
-pread
-preambulate
-precedence
-precedent
-preceding
-precept
-preceptial
-precepts
-precinct
-precious
-preciously
-precipice
-precipitating
-precipitation
-precise
-precisely
-preciseness
-precisian
-precor
-precurse
-precursors
-predeceased
-predecessor
-predecessors
-predestinate
-predicament
-predict
-prediction
-predictions
-predominance
-predominant
-predominate
-preeches
-preeminence
-preface
-prefer
-preferment
-preferments
-preferr
-preferreth
-preferring
-prefers
-prefiguring
-prefix
-prefixed
-preformed
-pregnancy
-pregnant
-pregnantly
-prejudicates
-prejudice
-prejudicial
-prelate
-premeditated
-premeditation
-premised
-premises
-prenez
-prenominate
-prentice
-prentices
-preordinance
-prepar
-preparation
-preparations
-prepare
-prepared
-preparedly
-prepares
-preparing
-prepost
-preposterous
-preposterously
-prerogatifes
-prerogative
-prerogatived
-presage
-presagers
-presages
-presageth
-presaging
-prescience
-prescribe
-prescript
-prescription
-prescriptions
-prescripts
-presence
-presences
-present
-presentation
-presented
-presenter
-presenters
-presenteth
-presenting
-presently
-presentment
-presents
-preserv
-preservation
-preservative
-preserve
-preserved
-preserver
-preservers
-preserving
-president
-press
-pressed
-presser
-presses
-pressing
-pressure
-pressures
-prest
-prester
-presume
-presumes
-presuming
-presumption
-presumptuous
-presuppos
-pret
-pretence
-pretences
-pretend
-pretended
-pretending
-pretense
-pretext
-pretia
-prettier
-prettiest
-prettily
-prettiness
-pretty
-prevail
-prevailed
-prevaileth
-prevailing
-prevailment
-prevails
-prevent
-prevented
-prevention
-preventions
-prevents
-prey
-preyful
-preys
-priam
-priami
-priamus
-pribbles
-price
-prick
-pricked
-pricket
-pricking
-pricks
-pricksong
-pride
-prides
-pridge
-prie
-pried
-prief
-pries
-priest
-priesthood
-priests
-prig
-primal
-prime
-primer
-primero
-primest
-primitive
-primo
-primogenity
-primrose
-primroses
-primy
-prince
-princely
-princes
-princess
-principal
-principalities
-principality
-principle
-principles
-princox
-prings
-print
-printed
-printing
-printless
-prints
-prioress
-priories
-priority
-priory
-priscian
-prison
-prisoner
-prisoners
-prisonment
-prisonnier
-prisons
-pristine
-prithe
-prithee
-privacy
-private
-privately
-privates
-privilage
-privileg
-privilege
-privileged
-privileges
-privilegio
-privily
-privity
-privy
-priz
-prize
-prized
-prizer
-prizes
-prizest
-prizing
-pro
-probable
-probal
-probation
-proceed
-proceeded
-proceeders
-proceeding
-proceedings
-proceeds
-process
-procession
-proclaim
-proclaimed
-proclaimeth
-proclaims
-proclamation
-proclamations
-proconsul
-procrastinate
-procreant
-procreants
-procreation
-procrus
-proculeius
-procur
-procurator
-procure
-procured
-procures
-procuring
-prodigal
-prodigality
-prodigally
-prodigals
-prodigies
-prodigious
-prodigiously
-prodigy
-proditor
-produc
-produce
-produced
-produces
-producing
-proface
-profan
-profanation
-profane
-profaned
-profanely
-profaneness
-profaners
-profaning
-profess
-professed
-professes
-profession
-professions
-professors
-proffer
-proffered
-profferer
-proffers
-proficient
-profit
-profitable
-profitably
-profited
-profiting
-profitless
-profits
-profound
-profoundest
-profoundly
-progenitors
-progeny
-progne
-prognosticate
-prognostication
-progress
-progression
-prohibit
-prohibition
-project
-projection
-projects
-prolixious
-prolixity
-prologue
-prologues
-prolong
-prolongs
-promethean
-prometheus
-promis
-promise
-promised
-promises
-promiseth
-promising
-promontory
-promotion
-promotions
-prompt
-prompted
-promptement
-prompter
-prompting
-prompts
-prompture
-promulgate
-prone
-prononcer
-prononcez
-pronoun
-pronounc
-pronounce
-pronounced
-pronouncing
-pronouns
-proof
-proofs
-prop
-propagate
-propagation
-propend
-propension
-proper
-properer
-properly
-propertied
-properties
-property
-prophecies
-prophecy
-prophesied
-prophesier
-prophesy
-prophesying
-prophet
-prophetess
-prophetic
-prophetically
-prophets
-propinquity
-propontic
-proportion
-proportionable
-proportions
-propos
-propose
-proposed
-proposer
-proposes
-proposing
-proposition
-propositions
-propounded
-propp
-propre
-propriety
-props
-propugnation
-prorogue
-prorogued
-proscription
-proscriptions
-prose
-prosecute
-prosecution
-proselytes
-proserpina
-prosp
-prospect
-prosper
-prosperity
-prospero
-prosperous
-prosperously
-prospers
-prostitute
-prostrate
-protect
-protected
-protection
-protector
-protectors
-protectorship
-protectress
-protects
-protest
-protestation
-protestations
-protested
-protester
-protesting
-protests
-proteus
-protheus
-protract
-protractive
-proud
-prouder
-proudest
-proudlier
-proudly
-prouds
-prov
-provand
-prove
-proved
-provender
-proverb
-proverbs
-proves
-proveth
-provide
-provided
-providence
-provident
-providently
-provider
-provides
-province
-provinces
-provincial
-proving
-provision
-proviso
-provocation
-provok
-provoke
-provoked
-provoker
-provokes
-provoketh
-provoking
-provost
-prowess
-prudence
-prudent
-prun
-prune
-prunes
-pruning
-pry
-prying
-psalm
-psalmist
-psalms
-psalteries
-ptolemies
-ptolemy
-public
-publican
-publication
-publicly
-publicola
-publish
-published
-publisher
-publishing
-publius
-pucelle
-puck
-pudder
-pudding
-puddings
-puddle
-puddled
-pudency
-pueritia
-puff
-puffing
-puffs
-pugging
-puis
-puissance
-puissant
-puke
-puking
-pulcher
-puling
-pull
-puller
-pullet
-pulling
-pulls
-pulpit
-pulpiter
-pulpits
-pulse
-pulsidge
-pump
-pumpion
-pumps
-pun
-punched
-punish
-punished
-punishes
-punishment
-punishments
-punk
-punto
-puny
-pupil
-pupils
-puppet
-puppets
-puppies
-puppy
-pur
-purblind
-purchas
-purchase
-purchased
-purchases
-purchaseth
-purchasing
-pure
-purely
-purer
-purest
-purg
-purgation
-purgative
-purgatory
-purge
-purged
-purgers
-purging
-purifies
-purifying
-puritan
-purity
-purlieus
-purple
-purpled
-purples
-purport
-purpos
-purpose
-purposed
-purposely
-purposes
-purposeth
-purposing
-purr
-purs
-purse
-pursents
-purses
-pursu
-pursue
-pursued
-pursuers
-pursues
-pursuest
-pursueth
-pursuing
-pursuit
-pursuivant
-pursuivants
-pursy
-purus
-purveyor
-push
-pushes
-pusillanimity
-put
-putrefy
-putrified
-puts
-putter
-putting
-puttock
-puzzel
-puzzle
-puzzled
-puzzles
-py
-pygmalion
-pygmies
-pygmy
-pyramid
-pyramides
-pyramids
-pyramis
-pyramises
-pyramus
-pyrenean
-pyrrhus
-pythagoras
-qu
-quadrangle
-quae
-quaff
-quaffing
-quagmire
-quail
-quailing
-quails
-quaint
-quaintly
-quak
-quake
-quakes
-qualification
-qualified
-qualifies
-qualify
-qualifying
-qualite
-qualities
-quality
-qualm
-qualmish
-quam
-quand
-quando
-quantities
-quantity
-quare
-quarrel
-quarrell
-quarreller
-quarrelling
-quarrelous
-quarrels
-quarrelsome
-quarries
-quarry
-quart
-quarter
-quartered
-quartering
-quarters
-quarts
-quasi
-quat
-quatch
-quay
-que
-quean
-queas
-queasiness
-queasy
-queen
-queens
-quell
-queller
-quench
-quenched
-quenching
-quenchless
-quern
-quest
-questant
-question
-questionable
-questioned
-questioning
-questionless
-questions
-questrists
-quests
-queubus
-qui
-quick
-quicken
-quickens
-quicker
-quicklier
-quickly
-quickness
-quicksand
-quicksands
-quicksilverr
-quid
-quiddities
-quiddits
-quier
-quiet
-quieter
-quietly
-quietness
-quietus
-quill
-quillets
-quills
-quilt
-quinapalus
-quince
-quinces
-quintain
-quintessence
-quintus
-quip
-quips
-quire
-quiring
-quirk
-quirks
-quis
-quit
-quite
-quits
-quittance
-quitted
-quitting
-quiver
-quivering
-quivers
-quo
-quod
-quoifs
-quoint
-quoit
-quoits
-quondam
-quoniam
-quote
-quoted
-quotes
-quoth
-quotidian
-r
-rabbit
-rabble
-rabblement
-race
-rack
-rackers
-racket
-rackets
-racking
-racks
-radiance
-radiant
-radish
-rafe
-raft
-rag
-rage
-rages
-rageth
-ragg
-ragged
-raggedness
-raging
-ragozine
-rags
-rah
-rail
-railed
-railer
-railest
-raileth
-railing
-rails
-raiment
-rain
-rainbow
-raineth
-raining
-rainold
-rains
-rainy
-rais
-raise
-raised
-raises
-raising
-raisins
-rak
-rake
-rakers
-rakes
-ral
-rald
-ralph
-ram
-rambures
-ramm
-rampallian
-rampant
-ramping
-rampir
-ramps
-rams
-ramsey
-ramston
-ran
-rance
-rancorous
-rancors
-rancour
-random
-rang
-range
-ranged
-rangers
-ranges
-ranging
-rank
-ranker
-rankest
-ranking
-rankle
-rankly
-rankness
-ranks
-ransack
-ransacking
-ransom
-ransomed
-ransoming
-ransomless
-ransoms
-rant
-ranting
-rap
-rape
-rapes
-rapier
-rapiers
-rapine
-raps
-rapt
-rapture
-raptures
-rar
-rare
-rarely
-rareness
-rarer
-rarest
-rarities
-rarity
-rascal
-rascalliest
-rascally
-rascals
-rased
-rash
-rasher
-rashly
-rashness
-rat
-ratcatcher
-ratcliff
-rate
-rated
-rately
-rates
-rather
-ratherest
-ratified
-ratifiers
-ratify
-rating
-rational
-ratolorum
-rats
-ratsbane
-rattle
-rattles
-rattling
-rature
-raught
-rav
-rave
-ravel
-raven
-ravening
-ravenous
-ravens
-ravenspurgh
-raves
-ravin
-raving
-ravish
-ravished
-ravisher
-ravishing
-ravishments
-raw
-rawer
-rawly
-rawness
-ray
-rayed
-rays
-raz
-raze
-razed
-razes
-razeth
-razing
-razor
-razorable
-razors
-razure
-re
-reach
-reaches
-reacheth
-reaching
-read
-reader
-readiest
-readily
-readiness
-reading
-readins
-reads
-ready
-real
-really
-realm
-realms
-reap
-reapers
-reaping
-reaps
-rear
-rears
-rearward
-reason
-reasonable
-reasonably
-reasoned
-reasoning
-reasonless
-reasons
-reave
-rebate
-rebato
-rebeck
-rebel
-rebell
-rebelling
-rebellion
-rebellious
-rebels
-rebound
-rebuk
-rebuke
-rebukeable
-rebuked
-rebukes
-rebus
-recall
-recant
-recantation
-recanter
-recanting
-receipt
-receipts
-receiv
-receive
-received
-receiver
-receives
-receivest
-receiveth
-receiving
-receptacle
-rechate
-reciprocal
-reciprocally
-recite
-recited
-reciterai
-reck
-recking
-reckless
-reckon
-reckoned
-reckoning
-reckonings
-recks
-reclaim
-reclaims
-reclusive
-recognizance
-recognizances
-recoil
-recoiling
-recollected
-recomforted
-recomforture
-recommend
-recommended
-recommends
-recompens
-recompense
-reconcil
-reconcile
-reconciled
-reconcilement
-reconciler
-reconciles
-reconciliation
-record
-recordation
-recorded
-recorder
-recorders
-records
-recount
-recounted
-recounting
-recountments
-recounts
-recourse
-recov
-recover
-recoverable
-recovered
-recoveries
-recovers
-recovery
-recreant
-recreants
-recreate
-recreation
-rectify
-rector
-rectorship
-recure
-recured
-red
-redbreast
-redder
-reddest
-rede
-redeem
-redeemed
-redeemer
-redeeming
-redeems
-redeliver
-redemption
-redime
-redness
-redoubled
-redoubted
-redound
-redress
-redressed
-redresses
-reduce
-reechy
-reed
-reeds
-reek
-reeking
-reeks
-reeky
-reel
-reeleth
-reeling
-reels
-refell
-refer
-reference
-referr
-referred
-refigured
-refin
-refined
-reflect
-reflecting
-reflection
-reflex
-reform
-reformation
-reformed
-refractory
-refrain
-refresh
-refreshing
-reft
-refts
-refuge
-refus
-refusal
-refuse
-refused
-refusest
-refusing
-reg
-regal
-regalia
-regan
-regard
-regardance
-regarded
-regardfully
-regarding
-regards
-regenerate
-regent
-regentship
-regia
-regiment
-regiments
-regina
-region
-regions
-regist
-register
-registers
-regreet
-regreets
-regress
-reguerdon
-regular
-rehears
-rehearsal
-rehearse
-reign
-reigned
-reignier
-reigning
-reigns
-rein
-reinforc
-reinforce
-reinforcement
-reins
-reiterate
-reject
-rejected
-rejoic
-rejoice
-rejoices
-rejoiceth
-rejoicing
-rejoicingly
-rejoindure
-rejourn
-rel
-relapse
-relate
-relates
-relation
-relations
-relative
-releas
-release
-released
-releasing
-relent
-relenting
-relents
-reliances
-relics
-relief
-reliev
-relieve
-relieved
-relieves
-relieving
-religion
-religions
-religious
-religiously
-relinquish
-reliques
-reliquit
-relish
-relume
-rely
-relying
-remain
-remainder
-remainders
-remained
-remaineth
-remaining
-remains
-remark
-remarkable
-remediate
-remedied
-remedies
-remedy
-rememb
-remember
-remembered
-remembers
-remembrance
-remembrancer
-remembrances
-remercimens
-remiss
-remission
-remissness
-remit
-remnant
-remnants
-remonstrance
-remorse
-remorseful
-remorseless
-remote
-remotion
-remov
-remove
-removed
-removedness
-remover
-removes
-removing
-remunerate
-remuneration
-rence
-rend
-render
-rendered
-renders
-rendezvous
-renegado
-renege
-reneges
-renew
-renewed
-renewest
-renounce
-renouncement
-renouncing
-renowmed
-renown
-renowned
-rent
-rents
-repaid
-repair
-repaired
-repairing
-repairs
-repass
-repast
-repasture
-repay
-repaying
-repays
-repeal
-repealing
-repeals
-repeat
-repeated
-repeating
-repeats
-repel
-repent
-repentance
-repentant
-repented
-repenting
-repents
-repetition
-repetitions
-repin
-repine
-repining
-replant
-replenish
-replenished
-replete
-replication
-replied
-replies
-repliest
-reply
-replying
-report
-reported
-reporter
-reportest
-reporting
-reportingly
-reports
-reposal
-repose
-reposeth
-reposing
-repossess
-reprehend
-reprehended
-reprehending
-represent
-representing
-reprieve
-reprieves
-reprisal
-reproach
-reproaches
-reproachful
-reproachfully
-reprobate
-reprobation
-reproof
-reprov
-reprove
-reproveable
-reproves
-reproving
-repugn
-repugnancy
-repugnant
-repulse
-repulsed
-repurchas
-repured
-reputation
-repute
-reputed
-reputeless
-reputes
-reputing
-request
-requested
-requesting
-requests
-requiem
-requir
-require
-required
-requires
-requireth
-requiring
-requisite
-requisites
-requit
-requital
-requite
-requited
-requites
-rer
-rere
-rers
-rescu
-rescue
-rescued
-rescues
-rescuing
-resemblance
-resemble
-resembled
-resembles
-resembleth
-resembling
-reserv
-reservation
-reserve
-reserved
-reserves
-reside
-residence
-resident
-resides
-residing
-residue
-resign
-resignation
-resist
-resistance
-resisted
-resisting
-resists
-resolute
-resolutely
-resolutes
-resolution
-resolv
-resolve
-resolved
-resolvedly
-resolves
-resolveth
-resort
-resorted
-resounding
-resounds
-respeaking
-respect
-respected
-respecting
-respective
-respectively
-respects
-respice
-respite
-respites
-responsive
-respose
-ress
-rest
-rested
-resteth
-restful
-resting
-restitution
-restless
-restor
-restoration
-restorative
-restore
-restored
-restores
-restoring
-restrain
-restrained
-restraining
-restrains
-restraint
-rests
-resty
-resum
-resume
-resumes
-resurrections
-retail
-retails
-retain
-retainers
-retaining
-retell
-retention
-retentive
-retinue
-retir
-retire
-retired
-retirement
-retires
-retiring
-retold
-retort
-retorts
-retourne
-retract
-retreat
-retrograde
-rets
-return
-returned
-returnest
-returneth
-returning
-returns
-revania
-reveal
-reveals
-revel
-reveler
-revell
-reveller
-revellers
-revelling
-revelry
-revels
-reveng
-revenge
-revenged
-revengeful
-revengement
-revenger
-revengers
-revenges
-revenging
-revengingly
-revenue
-revenues
-reverb
-reverberate
-reverbs
-reverenc
-reverence
-reverend
-reverent
-reverently
-revers
-reverse
-reversion
-reverted
-review
-reviewest
-revil
-revile
-revisits
-reviv
-revive
-revives
-reviving
-revok
-revoke
-revokement
-revolt
-revolted
-revolting
-revolts
-revolution
-revolutions
-revolve
-revolving
-reward
-rewarded
-rewarder
-rewarding
-rewards
-reword
-reworded
-rex
-rey
-reynaldo
-rford
-rful
-rfull
-rhapsody
-rheims
-rhenish
-rhesus
-rhetoric
-rheum
-rheumatic
-rheums
-rheumy
-rhinoceros
-rhodes
-rhodope
-rhubarb
-rhym
-rhyme
-rhymers
-rhymes
-rhyming
-rialto
-rib
-ribald
-riband
-ribands
-ribaudred
-ribb
-ribbed
-ribbon
-ribbons
-ribs
-rice
-rich
-richard
-richer
-riches
-richest
-richly
-richmond
-richmonds
-rid
-riddance
-ridden
-riddle
-riddles
-riddling
-ride
-rider
-riders
-rides
-ridest
-rideth
-ridge
-ridges
-ridiculous
-riding
-rids
-rien
-ries
-rifle
-rift
-rifted
-rig
-rigg
-riggish
-right
-righteous
-righteously
-rightful
-rightfully
-rightly
-rights
-rigol
-rigorous
-rigorously
-rigour
-ril
-rim
-rin
-rinaldo
-rind
-ring
-ringing
-ringleader
-ringlets
-rings
-ringwood
-riot
-rioter
-rioting
-riotous
-riots
-rip
-ripe
-ripely
-ripen
-ripened
-ripeness
-ripening
-ripens
-riper
-ripest
-riping
-ripp
-ripping
-rise
-risen
-rises
-riseth
-rish
-rising
-rite
-rites
-rivage
-rival
-rivality
-rivall
-rivals
-rive
-rived
-rivelled
-river
-rivers
-rivet
-riveted
-rivets
-rivo
-rj
-rless
-road
-roads
-roam
-roaming
-roan
-roar
-roared
-roarers
-roaring
-roars
-roast
-roasted
-rob
-roba
-robas
-robb
-robbed
-robber
-robbers
-robbery
-robbing
-robe
-robed
-robert
-robes
-robin
-robs
-robustious
-rochester
-rochford
-rock
-rocks
-rocky
-rod
-rode
-roderigo
-rods
-roe
-roes
-roger
-rogero
-rogue
-roguery
-rogues
-roguish
-roi
-roisting
-roll
-rolled
-rolling
-rolls
-rom
-romage
-roman
-romano
-romanos
-romans
-rome
-romeo
-romish
-rondure
-ronyon
-rood
-roof
-roofs
-rook
-rooks
-rooky
-room
-rooms
-root
-rooted
-rootedly
-rooteth
-rooting
-roots
-rope
-ropery
-ropes
-roping
-ros
-rosalind
-rosalinda
-rosalinde
-rosaline
-roscius
-rose
-rosed
-rosemary
-rosencrantz
-roses
-ross
-rosy
-rot
-rote
-roted
-rother
-rotherham
-rots
-rotted
-rotten
-rottenness
-rotting
-rotundity
-rouen
-rough
-rougher
-roughest
-roughly
-roughness
-round
-rounded
-roundel
-rounder
-roundest
-rounding
-roundly
-rounds
-roundure
-rous
-rouse
-roused
-rousillon
-rously
-roussi
-rout
-routed
-routs
-rove
-rover
-row
-rowel
-rowland
-rowlands
-roy
-royal
-royalize
-royally
-royalties
-royalty
-roynish
-rs
-rt
-rub
-rubb
-rubbing
-rubbish
-rubies
-rubious
-rubs
-ruby
-rud
-rudand
-rudder
-ruddiness
-ruddock
-ruddy
-rude
-rudely
-rudeness
-ruder
-rudesby
-rudest
-rudiments
-rue
-rued
-ruff
-ruffian
-ruffians
-ruffle
-ruffling
-ruffs
-rug
-rugby
-rugemount
-rugged
-ruin
-ruinate
-ruined
-ruining
-ruinous
-ruins
-rul
-rule
-ruled
-ruler
-rulers
-rules
-ruling
-rumble
-ruminaies
-ruminat
-ruminate
-ruminated
-ruminates
-rumination
-rumor
-rumour
-rumourer
-rumours
-rump
-run
-runagate
-runagates
-runaway
-runaways
-rung
-runn
-runner
-runners
-running
-runs
-rupture
-ruptures
-rural
-rush
-rushes
-rushing
-rushling
-rushy
-russet
-russia
-russian
-russians
-rust
-rusted
-rustic
-rustically
-rustics
-rustle
-rustling
-rusts
-rusty
-rut
-ruth
-ruthful
-ruthless
-rutland
-ruttish
-ry
-rye
-rything
-s
-sa
-saba
-sabbath
-sable
-sables
-sack
-sackbuts
-sackcloth
-sacked
-sackerson
-sacks
-sacrament
-sacred
-sacrific
-sacrifice
-sacrificers
-sacrifices
-sacrificial
-sacrificing
-sacrilegious
-sacring
-sad
-sadder
-saddest
-saddle
-saddler
-saddles
-sadly
-sadness
-saf
-safe
-safeguard
-safely
-safer
-safest
-safeties
-safety
-saffron
-sag
-sage
-sagittary
-said
-saidst
-sail
-sailing
-sailmaker
-sailor
-sailors
-sails
-sain
-saint
-sainted
-saintlike
-saints
-saith
-sake
-sakes
-sala
-salad
-salamander
-salary
-sale
-salerio
-salicam
-salique
-salisbury
-sall
-sallet
-sallets
-sallies
-sallow
-sally
-salmon
-salmons
-salt
-salter
-saltiers
-saltness
-saltpetre
-salutation
-salutations
-salute
-saluted
-salutes
-saluteth
-salv
-salvation
-salve
-salving
-same
-samingo
-samp
-sampire
-sample
-sampler
-sampson
-samson
-samsons
-sancta
-sanctified
-sanctifies
-sanctify
-sanctimonies
-sanctimonious
-sanctimony
-sanctities
-sanctity
-sanctuarize
-sanctuary
-sand
-sandal
-sandbag
-sanded
-sands
-sandy
-sandys
-sang
-sanguine
-sanguis
-sanity
-sans
-santrailles
-sap
-sapient
-sapit
-sapless
-sapling
-sapphire
-sapphires
-saracens
-sarcenet
-sard
-sardians
-sardinia
-sardis
-sarum
-sat
-satan
-satchel
-sate
-sated
-satiate
-satiety
-satin
-satire
-satirical
-satis
-satisfaction
-satisfied
-satisfies
-satisfy
-satisfying
-saturday
-saturdays
-saturn
-saturnine
-saturninus
-satyr
-satyrs
-sauc
-sauce
-sauced
-saucers
-sauces
-saucily
-sauciness
-saucy
-sauf
-saunder
-sav
-savage
-savagely
-savageness
-savagery
-savages
-save
-saved
-saves
-saving
-saviour
-savory
-savour
-savouring
-savours
-savoury
-savoy
-saw
-sawed
-sawest
-sawn
-sawpit
-saws
-sawyer
-saxons
-saxony
-saxton
-say
-sayest
-saying
-sayings
-says
-sayst
-sblood
-sc
-scab
-scabbard
-scabs
-scaffold
-scaffoldage
-scal
-scald
-scalded
-scalding
-scale
-scaled
-scales
-scaling
-scall
-scalp
-scalps
-scaly
-scamble
-scambling
-scamels
-scan
-scandal
-scandaliz
-scandalous
-scandy
-scann
-scant
-scanted
-scanter
-scanting
-scantling
-scants
-scap
-scape
-scaped
-scapes
-scapeth
-scar
-scarce
-scarcely
-scarcity
-scare
-scarecrow
-scarecrows
-scarf
-scarfed
-scarfs
-scaring
-scarlet
-scarr
-scarre
-scars
-scarus
-scath
-scathe
-scathful
-scatt
-scatter
-scattered
-scattering
-scatters
-scelera
-scelerisque
-scene
-scenes
-scent
-scented
-scept
-scepter
-sceptre
-sceptred
-sceptres
-schedule
-schedules
-scholar
-scholarly
-scholars
-school
-schoolboy
-schoolboys
-schoolfellows
-schooling
-schoolmaster
-schoolmasters
-schools
-sciatica
-sciaticas
-science
-sciences
-scimitar
-scion
-scions
-scissors
-scoff
-scoffer
-scoffing
-scoffs
-scoggin
-scold
-scolding
-scolds
-sconce
-scone
-scope
-scopes
-scorch
-scorched
-score
-scored
-scores
-scoring
-scorn
-scorned
-scornful
-scornfully
-scorning
-scorns
-scorpion
-scorpions
-scot
-scotch
-scotches
-scotland
-scots
-scottish
-scoundrels
-scour
-scoured
-scourg
-scourge
-scouring
-scout
-scouts
-scowl
-scrap
-scrape
-scraping
-scraps
-scratch
-scratches
-scratching
-scream
-screams
-screech
-screeching
-screen
-screens
-screw
-screws
-scribbl
-scribbled
-scribe
-scribes
-scrimers
-scrip
-scrippage
-scripture
-scriptures
-scrivener
-scroll
-scrolls
-scroop
-scrowl
-scroyles
-scrubbed
-scruple
-scruples
-scrupulous
-scuffles
-scuffling
-scullion
-sculls
-scum
-scurril
-scurrility
-scurrilous
-scurvy
-scuse
-scut
-scutcheon
-scutcheons
-scylla
-scythe
-scythed
-scythia
-scythian
-sdeath
-se
-sea
-seacoal
-seafaring
-seal
-sealed
-sealing
-seals
-seam
-seamen
-seamy
-seaport
-sear
-searce
-search
-searchers
-searches
-searcheth
-searching
-seared
-seas
-seasick
-seaside
-season
-seasoned
-seasons
-seat
-seated
-seats
-sebastian
-second
-secondarily
-secondary
-seconded
-seconds
-secrecy
-secret
-secretaries
-secretary
-secretly
-secrets
-sect
-sectary
-sects
-secundo
-secure
-securely
-securing
-security
-sedg
-sedge
-sedges
-sedgy
-sedition
-seditious
-seduc
-seduce
-seduced
-seducer
-seducing
-see
-seed
-seeded
-seedness
-seeds
-seedsman
-seein
-seeing
-seek
-seeking
-seeks
-seel
-seeling
-seely
-seem
-seemed
-seemers
-seemest
-seemeth
-seeming
-seemingly
-seemly
-seems
-seen
-seer
-sees
-seese
-seest
-seethe
-seethes
-seething
-seeting
-segregation
-seigneur
-seigneurs
-seiz
-seize
-seized
-seizes
-seizeth
-seizing
-seizure
-seld
-seldom
-select
-seleucus
-self
-selfsame
-sell
-seller
-selling
-sells
-selves
-semblable
-semblably
-semblance
-semblances
-semblative
-semi
-semicircle
-semiramis
-semper
-sempronius
-senate
-senator
-senators
-send
-sender
-sendeth
-sending
-sends
-seneca
-senior
-seniory
-senis
-sennet
-senoys
-sense
-senseless
-senses
-sensible
-sensibly
-sensual
-sensuality
-sent
-sentenc
-sentence
-sentences
-sententious
-sentinel
-sentinels
-separable
-separate
-separated
-separates
-separation
-septentrion
-sepulchre
-sepulchres
-sepulchring
-sequel
-sequence
-sequent
-sequest
-sequester
-sequestration
-sere
-serenis
-serge
-sergeant
-serious
-seriously
-sermon
-sermons
-serpent
-serpentine
-serpents
-serpigo
-serv
-servant
-servanted
-servants
-serve
-served
-server
-serves
-serveth
-service
-serviceable
-services
-servile
-servility
-servilius
-serving
-servingman
-servingmen
-serviteur
-servitor
-servitors
-servitude
-sessa
-session
-sessions
-sestos
-set
-setebos
-sets
-setter
-setting
-settle
-settled
-settlest
-settling
-sev
-seven
-sevenfold
-sevennight
-seventeen
-seventh
-seventy
-sever
-several
-severally
-severals
-severe
-severed
-severely
-severest
-severing
-severity
-severn
-severs
-sew
-seward
-sewer
-sewing
-sex
-sexes
-sexton
-sextus
-seymour
-seyton
-sfoot
-sh
-shackle
-shackles
-shade
-shades
-shadow
-shadowed
-shadowing
-shadows
-shadowy
-shady
-shafalus
-shaft
-shafts
-shag
-shak
-shake
-shaked
-shaken
-shakes
-shaking
-shales
-shall
-shallenge
-shallow
-shallowest
-shallowly
-shallows
-shalt
-sham
-shambles
-shame
-shamed
-shameful
-shamefully
-shameless
-shames
-shamest
-shaming
-shank
-shanks
-shap
-shape
-shaped
-shapeless
-shapen
-shapes
-shaping
-shar
-shard
-sharded
-shards
-share
-shared
-sharers
-shares
-sharing
-shark
-sharp
-sharpen
-sharpened
-sharpens
-sharper
-sharpest
-sharply
-sharpness
-sharps
-shatter
-shav
-shave
-shaven
-shaw
-she
-sheaf
-sheal
-shear
-shearers
-shearing
-shearman
-shears
-sheath
-sheathe
-sheathed
-sheathes
-sheathing
-sheaved
-sheaves
-shed
-shedding
-sheds
-sheen
-sheep
-sheepcote
-sheepcotes
-sheeps
-sheepskins
-sheer
-sheet
-sheeted
-sheets
-sheffield
-shelf
-shell
-shells
-shelt
-shelter
-shelters
-shelves
-shelving
-shelvy
-shent
-shepherd
-shepherdes
-shepherdess
-shepherdesses
-shepherds
-sher
-sheriff
-sherris
-shes
-sheweth
-shield
-shielded
-shields
-shift
-shifted
-shifting
-shifts
-shilling
-shillings
-shin
-shine
-shines
-shineth
-shining
-shins
-shiny
-ship
-shipboard
-shipman
-shipmaster
-shipmen
-shipp
-shipped
-shipping
-ships
-shipt
-shipwreck
-shipwrecking
-shipwright
-shipwrights
-shire
-shirley
-shirt
-shirts
-shive
-shiver
-shivering
-shivers
-shoal
-shoals
-shock
-shocks
-shod
-shoe
-shoeing
-shoemaker
-shoes
-shog
-shone
-shook
-shoon
-shoot
-shooter
-shootie
-shooting
-shoots
-shop
-shops
-shore
-shores
-shorn
-short
-shortcake
-shorten
-shortened
-shortens
-shorter
-shortly
-shortness
-shot
-shotten
-shoughs
-should
-shoulder
-shouldering
-shoulders
-shouldst
-shout
-shouted
-shouting
-shouts
-shov
-shove
-shovel
-shovels
-show
-showed
-shower
-showers
-showest
-showing
-shown
-shows
-shreds
-shrew
-shrewd
-shrewdly
-shrewdness
-shrewish
-shrewishly
-shrewishness
-shrews
-shrewsbury
-shriek
-shrieking
-shrieks
-shrieve
-shrift
-shrill
-shriller
-shrills
-shrilly
-shrimp
-shrine
-shrink
-shrinking
-shrinks
-shriv
-shrive
-shriver
-shrives
-shriving
-shroud
-shrouded
-shrouding
-shrouds
-shrove
-shrow
-shrows
-shrub
-shrubs
-shrug
-shrugs
-shrunk
-shudd
-shudders
-shuffl
-shuffle
-shuffled
-shuffling
-shun
-shunless
-shunn
-shunned
-shunning
-shuns
-shut
-shuts
-shuttle
-shy
-shylock
-si
-sibyl
-sibylla
-sibyls
-sicil
-sicilia
-sicilian
-sicilius
-sicils
-sicily
-sicinius
-sick
-sicken
-sickens
-sicker
-sickle
-sicklemen
-sicklied
-sickliness
-sickly
-sickness
-sicles
-sicyon
-side
-sided
-sides
-siege
-sieges
-sienna
-sies
-sieve
-sift
-sifted
-sigeia
-sigh
-sighed
-sighing
-sighs
-sight
-sighted
-sightless
-sightly
-sights
-sign
-signal
-signet
-signieur
-significant
-significants
-signified
-signifies
-signify
-signifying
-signior
-signiories
-signiors
-signiory
-signor
-signories
-signs
-signum
-silenc
-silence
-silenced
-silencing
-silent
-silently
-silius
-silk
-silken
-silkman
-silks
-silliest
-silliness
-silling
-silly
-silva
-silver
-silvered
-silverly
-silvia
-silvius
-sima
-simile
-similes
-simois
-simon
-simony
-simp
-simpcox
-simple
-simpleness
-simpler
-simples
-simplicity
-simply
-simular
-simulation
-sin
-since
-sincere
-sincerely
-sincerity
-sinel
-sinew
-sinewed
-sinews
-sinewy
-sinful
-sinfully
-sing
-singe
-singeing
-singer
-singes
-singeth
-singing
-single
-singled
-singleness
-singly
-sings
-singular
-singulariter
-singularities
-singularity
-singuled
-sinister
-sink
-sinking
-sinks
-sinn
-sinner
-sinners
-sinning
-sinon
-sins
-sip
-sipping
-sir
-sire
-siren
-sirrah
-sirs
-sist
-sister
-sisterhood
-sisterly
-sisters
-sit
-sith
-sithence
-sits
-sitting
-situate
-situation
-situations
-siward
-six
-sixpence
-sixpences
-sixpenny
-sixteen
-sixth
-sixty
-siz
-size
-sizes
-sizzle
-skains
-skamble
-skein
-skelter
-skies
-skilful
-skilfully
-skill
-skilless
-skillet
-skillful
-skills
-skim
-skimble
-skin
-skinker
-skinny
-skins
-skip
-skipp
-skipper
-skipping
-skirmish
-skirmishes
-skirr
-skirted
-skirts
-skittish
-skulking
-skull
-skulls
-sky
-skyey
-skyish
-slab
-slack
-slackly
-slackness
-slain
-slake
-sland
-slander
-slandered
-slanderer
-slanderers
-slandering
-slanderous
-slanders
-slash
-slaught
-slaughter
-slaughtered
-slaughterer
-slaughterman
-slaughtermen
-slaughterous
-slaughters
-slave
-slaver
-slavery
-slaves
-slavish
-slay
-slayeth
-slaying
-slays
-sleave
-sledded
-sleek
-sleekly
-sleep
-sleeper
-sleepers
-sleepest
-sleeping
-sleeps
-sleepy
-sleeve
-sleeves
-sleid
-sleided
-sleight
-sleights
-slender
-slenderer
-slenderly
-slept
-slew
-slewest
-slice
-slid
-slide
-slides
-sliding
-slight
-slighted
-slightest
-slightly
-slightness
-slights
-slily
-slime
-slimy
-slings
-slink
-slip
-slipp
-slipper
-slippers
-slippery
-slips
-slish
-slit
-sliver
-slobb
-slomber
-slop
-slope
-slops
-sloth
-slothful
-slough
-slovenly
-slovenry
-slow
-slower
-slowly
-slowness
-slubber
-slug
-sluggard
-sluggardiz
-sluggish
-sluic
-slumb
-slumber
-slumbers
-slumbery
-slunk
-slut
-sluts
-sluttery
-sluttish
-sluttishness
-sly
-slys
-smack
-smacking
-smacks
-small
-smaller
-smallest
-smallness
-smalus
-smart
-smarting
-smartly
-smatch
-smatter
-smear
-smell
-smelling
-smells
-smelt
-smil
-smile
-smiled
-smiles
-smilest
-smilets
-smiling
-smilingly
-smirch
-smirched
-smit
-smite
-smites
-smith
-smithfield
-smock
-smocks
-smok
-smoke
-smoked
-smokes
-smoking
-smoky
-smooth
-smoothed
-smoothing
-smoothly
-smoothness
-smooths
-smote
-smoth
-smother
-smothered
-smothering
-smug
-smulkin
-smutch
-snaffle
-snail
-snails
-snake
-snakes
-snaky
-snap
-snapp
-snapper
-snar
-snare
-snares
-snarl
-snarleth
-snarling
-snatch
-snatchers
-snatches
-snatching
-sneak
-sneaking
-sneap
-sneaping
-sneck
-snip
-snipe
-snipt
-snore
-snores
-snoring
-snorting
-snout
-snow
-snowballs
-snowed
-snowy
-snuff
-snuffs
-snug
-so
-soak
-soaking
-soaks
-soar
-soaring
-soars
-sob
-sobbing
-sober
-soberly
-sobriety
-sobs
-sociable
-societies
-society
-socks
-socrates
-sod
-sodden
-soe
-soever
-soft
-soften
-softens
-softer
-softest
-softly
-softness
-soil
-soiled
-soilure
-soit
-sojourn
-sol
-sola
-solace
-solanio
-sold
-soldat
-solder
-soldest
-soldier
-soldiers
-soldiership
-sole
-solely
-solem
-solemn
-solemness
-solemnities
-solemnity
-solemniz
-solemnize
-solemnized
-solemnly
-soles
-solicit
-solicitation
-solicited
-soliciting
-solicitings
-solicitor
-solicits
-solid
-solidares
-solidity
-solinus
-solitary
-solomon
-solon
-solum
-solus
-solyman
-some
-somebody
-someone
-somerset
-somerville
-something
-sometime
-sometimes
-somever
-somewhat
-somewhere
-somewhither
-somme
-son
-sonance
-song
-songs
-sonnet
-sonneting
-sonnets
-sons
-sont
-sonties
-soon
-sooner
-soonest
-sooth
-soothe
-soothers
-soothing
-soothsay
-soothsayer
-sooty
-sop
-sophister
-sophisticated
-sophy
-sops
-sorcerer
-sorcerers
-sorceress
-sorceries
-sorcery
-sore
-sorel
-sorely
-sorer
-sores
-sorrier
-sorriest
-sorrow
-sorrowed
-sorrowest
-sorrowful
-sorrowing
-sorrows
-sorry
-sort
-sortance
-sorted
-sorting
-sorts
-sossius
-sot
-soto
-sots
-sottish
-soud
-sought
-soul
-sould
-soulless
-souls
-sound
-sounded
-sounder
-soundest
-sounding
-soundless
-soundly
-soundness
-soundpost
-sounds
-sour
-source
-sources
-sourest
-sourly
-sours
-sous
-souse
-south
-southam
-southampton
-southerly
-southern
-southward
-southwark
-southwell
-souviendrai
-sov
-sovereign
-sovereignest
-sovereignly
-sovereignty
-sovereignvours
-sow
-sowing
-sowl
-sowter
-space
-spaces
-spacious
-spade
-spades
-spain
-spak
-spake
-spakest
-span
-spangle
-spangled
-spaniard
-spaniel
-spaniels
-spanish
-spann
-spans
-spar
-spare
-spares
-sparing
-sparingly
-spark
-sparkle
-sparkles
-sparkling
-sparks
-sparrow
-sparrows
-sparta
-spartan
-spavin
-spavins
-spawn
-speak
-speaker
-speakers
-speakest
-speaketh
-speaking
-speaks
-spear
-speargrass
-spears
-special
-specialities
-specially
-specialties
-specialty
-specify
-speciously
-spectacle
-spectacled
-spectacles
-spectators
-spectatorship
-speculation
-speculations
-speculative
-sped
-speech
-speeches
-speechless
-speed
-speeded
-speedier
-speediest
-speedily
-speediness
-speeding
-speeds
-speedy
-speens
-spell
-spelling
-spells
-spelt
-spencer
-spend
-spendest
-spending
-spends
-spendthrift
-spent
-sperato
-sperm
-spero
-sperr
-spher
-sphere
-sphered
-spheres
-spherical
-sphery
-sphinx
-spice
-spiced
-spicery
-spices
-spider
-spiders
-spied
-spies
-spieth
-spightfully
-spigot
-spill
-spilling
-spills
-spilt
-spilth
-spin
-spinii
-spinners
-spinster
-spinsters
-spire
-spirit
-spirited
-spiritless
-spirits
-spiritual
-spiritualty
-spirt
-spit
-spital
-spite
-spited
-spiteful
-spites
-spits
-spitted
-spitting
-splay
-spleen
-spleenful
-spleens
-spleeny
-splendour
-splenitive
-splinter
-splinters
-split
-splits
-splitted
-splitting
-spoil
-spoils
-spok
-spoke
-spoken
-spokes
-spokesman
-sponge
-spongy
-spoon
-spoons
-sport
-sportful
-sporting
-sportive
-sports
-spot
-spotless
-spots
-spotted
-spousal
-spouse
-spout
-spouting
-spouts
-sprag
-sprang
-sprat
-sprawl
-spray
-sprays
-spread
-spreading
-spreads
-sprighted
-sprightful
-sprightly
-sprigs
-spring
-springe
-springes
-springeth
-springhalt
-springing
-springs
-springtime
-sprinkle
-sprinkles
-sprite
-sprited
-spritely
-sprites
-spriting
-sprout
-spruce
-sprung
-spun
-spur
-spurio
-spurn
-spurns
-spurr
-spurrer
-spurring
-spurs
-spy
-spying
-squabble
-squadron
-squadrons
-squand
-squar
-square
-squarer
-squares
-squash
-squeak
-squeaking
-squeal
-squealing
-squeezes
-squeezing
-squele
-squier
-squints
-squiny
-squire
-squires
-squirrel
-st
-stab
-stabb
-stabbed
-stabbing
-stable
-stableness
-stables
-stablish
-stablishment
-stabs
-stacks
-staff
-stafford
-staffords
-staffordshire
-stag
-stage
-stages
-stagger
-staggering
-staggers
-stags
-staid
-staider
-stain
-stained
-staines
-staineth
-staining
-stainless
-stains
-stair
-stairs
-stake
-stakes
-stale
-staled
-stalk
-stalking
-stalks
-stall
-stalling
-stalls
-stamford
-stammer
-stamp
-stamped
-stamps
-stanch
-stanchless
-stand
-standard
-standards
-stander
-standers
-standest
-standeth
-standing
-stands
-staniel
-stanley
-stanze
-stanzo
-stanzos
-staple
-staples
-star
-stare
-stared
-stares
-staring
-starings
-stark
-starkly
-starlight
-starling
-starr
-starry
-stars
-start
-started
-starting
-startingly
-startle
-startles
-starts
-starv
-starve
-starved
-starvelackey
-starveling
-starveth
-starving
-state
-statelier
-stately
-states
-statesman
-statesmen
-statilius
-station
-statist
-statists
-statue
-statues
-stature
-statures
-statute
-statutes
-stave
-staves
-stay
-stayed
-stayest
-staying
-stays
-stead
-steaded
-steadfast
-steadier
-steads
-steal
-stealer
-stealers
-stealing
-steals
-stealth
-stealthy
-steed
-steeds
-steel
-steeled
-steely
-steep
-steeped
-steeple
-steeples
-steeps
-steepy
-steer
-steerage
-steering
-steers
-stelled
-stem
-stemming
-stench
-step
-stepdame
-stephano
-stephen
-stepmothers
-stepp
-stepping
-steps
-sterile
-sterility
-sterling
-stern
-sternage
-sterner
-sternest
-sternness
-steterat
-stew
-steward
-stewards
-stewardship
-stewed
-stews
-stick
-sticking
-stickler
-sticks
-stiff
-stiffen
-stiffly
-stifle
-stifled
-stifles
-stigmatic
-stigmatical
-stile
-still
-stiller
-stillest
-stillness
-stilly
-sting
-stinging
-stingless
-stings
-stink
-stinking
-stinkingly
-stinks
-stint
-stinted
-stints
-stir
-stirr
-stirred
-stirrer
-stirrers
-stirreth
-stirring
-stirrup
-stirrups
-stirs
-stitchery
-stitches
-stithied
-stithy
-stoccadoes
-stoccata
-stock
-stockfish
-stocking
-stockings
-stockish
-stocks
-stog
-stogs
-stoics
-stokesly
-stol
-stole
-stolen
-stolest
-stomach
-stomachers
-stomaching
-stomachs
-ston
-stone
-stonecutter
-stones
-stonish
-stony
-stood
-stool
-stools
-stoop
-stooping
-stoops
-stop
-stope
-stopp
-stopped
-stopping
-stops
-stor
-store
-storehouse
-storehouses
-stores
-stories
-storm
-stormed
-storming
-storms
-stormy
-story
-stoup
-stoups
-stout
-stouter
-stoutly
-stoutness
-stover
-stow
-stowage
-stowed
-strachy
-stragglers
-straggling
-straight
-straightest
-straightway
-strain
-strained
-straining
-strains
-strait
-straited
-straiter
-straitly
-straitness
-straits
-strand
-strange
-strangely
-strangeness
-stranger
-strangers
-strangest
-strangle
-strangled
-strangler
-strangles
-strangling
-strappado
-straps
-stratagem
-stratagems
-stratford
-strato
-straw
-strawberries
-strawberry
-straws
-strawy
-stray
-straying
-strays
-streak
-streaks
-stream
-streamers
-streaming
-streams
-streching
-street
-streets
-strength
-strengthen
-strengthened
-strengthless
-strengths
-stretch
-stretched
-stretches
-stretching
-strew
-strewing
-strewings
-strewments
-stricken
-strict
-stricter
-strictest
-strictly
-stricture
-stride
-strides
-striding
-strife
-strifes
-strik
-strike
-strikers
-strikes
-strikest
-striking
-string
-stringless
-strings
-strip
-stripes
-stripling
-striplings
-stripp
-stripping
-striv
-strive
-strives
-striving
-strok
-stroke
-strokes
-strond
-stronds
-strong
-stronger
-strongest
-strongly
-strooke
-strossers
-strove
-strown
-stroy
-struck
-strucken
-struggle
-struggles
-struggling
-strumpet
-strumpeted
-strumpets
-strung
-strut
-struts
-strutted
-strutting
-stubble
-stubborn
-stubbornest
-stubbornly
-stubbornness
-stuck
-studded
-student
-students
-studied
-studies
-studious
-studiously
-studs
-study
-studying
-stuff
-stuffing
-stuffs
-stumble
-stumbled
-stumblest
-stumbling
-stump
-stumps
-stung
-stupefy
-stupid
-stupified
-stuprum
-sturdy
-sty
-styga
-stygian
-styl
-style
-styx
-su
-sub
-subcontracted
-subdu
-subdue
-subdued
-subduements
-subdues
-subduing
-subject
-subjected
-subjection
-subjects
-submerg
-submission
-submissive
-submit
-submits
-submitting
-suborn
-subornation
-suborned
-subscrib
-subscribe
-subscribed
-subscribes
-subscription
-subsequent
-subsidies
-subsidy
-subsist
-subsisting
-substance
-substances
-substantial
-substitute
-substituted
-substitutes
-substitution
-subtile
-subtilly
-subtle
-subtleties
-subtlety
-subtly
-subtractors
-suburbs
-subversion
-subverts
-succedant
-succeed
-succeeded
-succeeders
-succeeding
-succeeds
-success
-successantly
-successes
-successful
-successfully
-succession
-successive
-successively
-successor
-successors
-succour
-succours
-such
-suck
-sucker
-suckers
-sucking
-suckle
-sucks
-sudden
-suddenly
-sue
-sued
-suerly
-sues
-sueth
-suff
-suffer
-sufferance
-sufferances
-suffered
-suffering
-suffers
-suffic
-suffice
-sufficed
-suffices
-sufficeth
-sufficiency
-sufficient
-sufficiently
-sufficing
-sufficit
-suffigance
-suffocate
-suffocating
-suffocation
-suffolk
-suffrage
-suffrages
-sug
-sugar
-sugarsop
-suggest
-suggested
-suggesting
-suggestion
-suggestions
-suggests
-suis
-suit
-suitable
-suited
-suiting
-suitor
-suitors
-suits
-suivez
-sullen
-sullens
-sullied
-sullies
-sully
-sulph
-sulpherous
-sulphur
-sulphurous
-sultan
-sultry
-sum
-sumless
-summ
-summa
-summary
-summer
-summers
-summit
-summon
-summoners
-summons
-sumpter
-sumptuous
-sumptuously
-sums
-sun
-sunbeams
-sunburning
-sunburnt
-sund
-sunday
-sundays
-sunder
-sunders
-sundry
-sung
-sunk
-sunken
-sunny
-sunrising
-suns
-sunset
-sunshine
-sup
-super
-superficial
-superficially
-superfluity
-superfluous
-superfluously
-superflux
-superior
-supernal
-supernatural
-superpraise
-superscript
-superscription
-superserviceable
-superstition
-superstitious
-superstitiously
-supersubtle
-supervise
-supervisor
-supp
-supper
-suppers
-suppertime
-supping
-supplant
-supple
-suppler
-suppliance
-suppliant
-suppliants
-supplicant
-supplication
-supplications
-supplie
-supplied
-supplies
-suppliest
-supply
-supplyant
-supplying
-supplyment
-support
-supportable
-supportance
-supported
-supporter
-supporters
-supporting
-supportor
-suppos
-supposal
-suppose
-supposed
-supposes
-supposest
-supposing
-supposition
-suppress
-suppressed
-suppresseth
-supremacy
-supreme
-sups
-sur
-surance
-surcease
-surd
-sure
-surecard
-surely
-surer
-surest
-sureties
-surety
-surfeit
-surfeited
-surfeiter
-surfeiting
-surfeits
-surge
-surgeon
-surgeons
-surgere
-surgery
-surges
-surly
-surmis
-surmise
-surmised
-surmises
-surmount
-surmounted
-surmounts
-surnam
-surname
-surnamed
-surpasseth
-surpassing
-surplice
-surplus
-surpris
-surprise
-surprised
-surrender
-surrey
-surreys
-survey
-surveyest
-surveying
-surveyor
-surveyors
-surveys
-survive
-survives
-survivor
-susan
-suspect
-suspected
-suspecting
-suspects
-suspend
-suspense
-suspicion
-suspicions
-suspicious
-suspiration
-suspire
-sust
-sustain
-sustaining
-sutler
-sutton
-suum
-swabber
-swaddling
-swag
-swagg
-swagger
-swaggerer
-swaggerers
-swaggering
-swain
-swains
-swallow
-swallowed
-swallowing
-swallows
-swam
-swan
-swans
-sward
-sware
-swarm
-swarming
-swart
-swarth
-swarths
-swarthy
-swashers
-swashing
-swath
-swathing
-swathling
-sway
-swaying
-sways
-swear
-swearer
-swearers
-swearest
-swearing
-swearings
-swears
-sweat
-sweaten
-sweating
-sweats
-sweaty
-sweep
-sweepers
-sweeps
-sweet
-sweeten
-sweetens
-sweeter
-sweetest
-sweetheart
-sweeting
-sweetly
-sweetmeats
-sweetness
-sweets
-swell
-swelling
-swellings
-swells
-swelter
-sweno
-swept
-swerve
-swerver
-swerving
-swift
-swifter
-swiftest
-swiftly
-swiftness
-swill
-swills
-swim
-swimmer
-swimmers
-swimming
-swims
-swine
-swineherds
-swing
-swinge
-swinish
-swinstead
-switches
-swits
-switzers
-swol
-swoll
-swoln
-swoon
-swooned
-swooning
-swoons
-swoop
-swoopstake
-swor
-sword
-sworder
-swords
-swore
-sworn
-swounded
-swounds
-swum
-swung
-sy
-sycamore
-sycorax
-sylla
-syllable
-syllables
-syllogism
-symbols
-sympathise
-sympathiz
-sympathize
-sympathized
-sympathy
-synagogue
-synod
-synods
-syracuse
-syracusian
-syracusians
-syria
-syrups
-t
-ta
-taber
-table
-tabled
-tables
-tablet
-tabor
-taborer
-tabors
-tabourines
-taciturnity
-tack
-tackle
-tackled
-tackles
-tackling
-tacklings
-taddle
-tadpole
-taffeta
-taffety
-tag
-tagrag
-tah
-tail
-tailor
-tailors
-tails
-taint
-tainted
-tainting
-taints
-tainture
-tak
-take
-taken
-taker
-takes
-takest
-taketh
-taking
-tal
-talbot
-talbotites
-talbots
-tale
-talent
-talents
-taleporter
-tales
-talk
-talked
-talker
-talkers
-talkest
-talking
-talks
-tall
-taller
-tallest
-tallies
-tallow
-tally
-talons
-tam
-tambourines
-tame
-tamed
-tamely
-tameness
-tamer
-tames
-taming
-tamora
-tamworth
-tan
-tang
-tangle
-tangled
-tank
-tanlings
-tann
-tanned
-tanner
-tanquam
-tanta
-tantaene
-tap
-tape
-taper
-tapers
-tapestries
-tapestry
-taphouse
-tapp
-tapster
-tapsters
-tar
-tardied
-tardily
-tardiness
-tardy
-tarentum
-targe
-targes
-target
-targets
-tarpeian
-tarquin
-tarquins
-tarr
-tarre
-tarriance
-tarried
-tarries
-tarry
-tarrying
-tart
-tartar
-tartars
-tartly
-tartness
-task
-tasker
-tasking
-tasks
-tassel
-taste
-tasted
-tastes
-tasting
-tatt
-tatter
-tattered
-tatters
-tattle
-tattling
-tattlings
-taught
-taunt
-taunted
-taunting
-tauntingly
-taunts
-taurus
-tavern
-taverns
-tavy
-tawdry
-tawny
-tax
-taxation
-taxations
-taxes
-taxing
-tc
-te
-teach
-teacher
-teachers
-teaches
-teachest
-teacheth
-teaching
-team
-tear
-tearful
-tearing
-tears
-tearsheet
-teat
-tedious
-tediously
-tediousness
-teem
-teeming
-teems
-teen
-teeth
-teipsum
-telamon
-telamonius
-tell
-teller
-telling
-tells
-tellus
-temp
-temper
-temperality
-temperance
-temperate
-temperately
-tempers
-tempest
-tempests
-tempestuous
-temple
-temples
-temporal
-temporary
-temporiz
-temporize
-temporizer
-temps
-tempt
-temptation
-temptations
-tempted
-tempter
-tempters
-tempteth
-tempting
-tempts
-ten
-tenable
-tenant
-tenantius
-tenantless
-tenants
-tench
-tend
-tendance
-tended
-tender
-tendered
-tenderly
-tenderness
-tenders
-tending
-tends
-tenedos
-tenement
-tenements
-tenfold
-tennis
-tenour
-tenours
-tens
-tent
-tented
-tenth
-tenths
-tents
-tenure
-tenures
-tercel
-tereus
-term
-termagant
-termed
-terminations
-termless
-terms
-terra
-terrace
-terram
-terras
-terre
-terrene
-terrestrial
-terrible
-terribly
-territories
-territory
-terror
-terrors
-tertian
-tertio
-test
-testament
-tested
-tester
-testern
-testify
-testimonied
-testimonies
-testimony
-testiness
-testril
-testy
-tetchy
-tether
-tetter
-tevil
-tewksbury
-text
-tgv
-th
-thaes
-thames
-than
-thane
-thanes
-thank
-thanked
-thankful
-thankfully
-thankfulness
-thanking
-thankings
-thankless
-thanks
-thanksgiving
-thasos
-that
-thatch
-thaw
-thawing
-thaws
-the
-theatre
-theban
-thebes
-thee
-theft
-thefts
-thein
-their
-theirs
-theise
-them
-theme
-themes
-themselves
-then
-thence
-thenceforth
-theoric
-there
-thereabout
-thereabouts
-thereafter
-thereat
-thereby
-therefore
-therein
-thereof
-thereon
-thereto
-thereunto
-thereupon
-therewith
-therewithal
-thersites
-these
-theseus
-thessalian
-thessaly
-thetis
-thews
-they
-thick
-thicken
-thickens
-thicker
-thickest
-thicket
-thickskin
-thief
-thievery
-thieves
-thievish
-thigh
-thighs
-thimble
-thimbles
-thin
-thine
-thing
-things
-think
-thinkest
-thinking
-thinkings
-thinks
-thinkst
-thinly
-third
-thirdly
-thirds
-thirst
-thirsting
-thirsts
-thirsty
-thirteen
-thirties
-thirtieth
-thirty
-this
-thisby
-thisne
-thistle
-thistles
-thither
-thitherward
-thoas
-thomas
-thorn
-thorns
-thorny
-thorough
-thoroughly
-those
-thou
-though
-thought
-thoughtful
-thoughts
-thousand
-thousands
-thracian
-thraldom
-thrall
-thralled
-thralls
-thrash
-thrasonical
-thread
-threadbare
-threaden
-threading
-threat
-threaten
-threatening
-threatens
-threatest
-threats
-three
-threefold
-threepence
-threepile
-threes
-threescore
-thresher
-threshold
-threw
-thrice
-thrift
-thriftless
-thrifts
-thrifty
-thrill
-thrilling
-thrills
-thrive
-thrived
-thrivers
-thrives
-thriving
-throat
-throats
-throbbing
-throbs
-throca
-throe
-throes
-thromuldo
-thron
-throne
-throned
-thrones
-throng
-thronging
-throngs
-throstle
-throttle
-through
-throughfare
-throughfares
-throughly
-throughout
-throw
-thrower
-throwest
-throwing
-thrown
-throws
-thrum
-thrumm
-thrush
-thrust
-thrusteth
-thrusting
-thrusts
-thumb
-thumbs
-thump
-thund
-thunder
-thunderbolt
-thunderbolts
-thunderer
-thunders
-thunderstone
-thunderstroke
-thurio
-thursday
-thus
-thwack
-thwart
-thwarted
-thwarting
-thwartings
-thy
-thyme
-thymus
-thyreus
-thyself
-ti
-tib
-tiber
-tiberio
-tibey
-ticed
-tick
-tickl
-tickle
-tickled
-tickles
-tickling
-ticklish
-tiddle
-tide
-tides
-tidings
-tidy
-tie
-tied
-ties
-tiff
-tiger
-tigers
-tight
-tightly
-tike
-til
-tile
-till
-tillage
-tilly
-tilt
-tilter
-tilth
-tilting
-tilts
-tiltyard
-tim
-timandra
-timber
-time
-timeless
-timelier
-timely
-times
-timon
-timor
-timorous
-timorously
-tinct
-tincture
-tinctures
-tinder
-tingling
-tinker
-tinkers
-tinsel
-tiny
-tip
-tipp
-tippling
-tips
-tipsy
-tiptoe
-tir
-tire
-tired
-tires
-tirest
-tiring
-tirra
-tirrits
-tis
-tish
-tisick
-tissue
-titan
-titania
-tithe
-tithed
-tithing
-titinius
-title
-titled
-titleless
-titles
-tittle
-tittles
-titular
-titus
-tn
-to
-toad
-toads
-toadstool
-toast
-toasted
-toasting
-toasts
-toaze
-toby
-tock
-tod
-today
-todpole
-tods
-toe
-toes
-tofore
-toge
-toged
-together
-toil
-toiled
-toiling
-toils
-token
-tokens
-told
-toledo
-tolerable
-toll
-tolling
-tom
-tomb
-tombe
-tombed
-tombless
-tomboys
-tombs
-tomorrow
-tomyris
-ton
-tongs
-tongu
-tongue
-tongued
-tongueless
-tongues
-tonight
-too
-took
-tool
-tools
-tooth
-toothache
-toothpick
-toothpicker
-top
-topas
-topful
-topgallant
-topless
-topmast
-topp
-topping
-topple
-topples
-tops
-topsail
-topsy
-torch
-torchbearer
-torchbearers
-torcher
-torches
-torchlight
-tore
-torment
-tormenta
-tormente
-tormented
-tormenting
-tormentors
-torments
-torn
-torrent
-tortive
-tortoise
-tortur
-torture
-tortured
-torturer
-torturers
-tortures
-torturest
-torturing
-toryne
-toss
-tossed
-tosseth
-tossing
-tot
-total
-totally
-tott
-tottered
-totters
-tou
-touch
-touched
-touches
-toucheth
-touching
-touchstone
-tough
-tougher
-toughness
-touraine
-tournaments
-tours
-tous
-tout
-touze
-tow
-toward
-towardly
-towards
-tower
-towering
-towers
-town
-towns
-township
-townsman
-townsmen
-towton
-toy
-toys
-trace
-traces
-track
-tract
-tractable
-trade
-traded
-traders
-trades
-tradesman
-tradesmen
-trading
-tradition
-traditional
-traduc
-traduced
-traducement
-traffic
-traffickers
-traffics
-tragedian
-tragedians
-tragedies
-tragedy
-tragic
-tragical
-trail
-train
-trained
-training
-trains
-trait
-traitor
-traitorly
-traitorous
-traitorously
-traitors
-traitress
-traject
-trammel
-trample
-trampled
-trampling
-tranc
-trance
-tranio
-tranquil
-tranquillity
-transcendence
-transcends
-transferred
-transfigur
-transfix
-transform
-transformation
-transformations
-transformed
-transgress
-transgresses
-transgressing
-transgression
-translate
-translated
-translates
-translation
-transmigrates
-transmutation
-transparent
-transport
-transportance
-transported
-transporting
-transports
-transpose
-transshape
-trap
-trapp
-trappings
-traps
-trash
-travail
-travails
-travel
-traveler
-traveling
-travell
-travelled
-traveller
-travellers
-travellest
-travelling
-travels
-travers
-traverse
-tray
-treacherous
-treacherously
-treachers
-treachery
-tread
-treading
-treads
-treason
-treasonable
-treasonous
-treasons
-treasure
-treasurer
-treasures
-treasuries
-treasury
-treat
-treaties
-treatise
-treats
-treaty
-treble
-trebled
-trebles
-trebonius
-tree
-trees
-tremble
-trembled
-trembles
-tremblest
-trembling
-tremblingly
-tremor
-trempling
-trench
-trenchant
-trenched
-trencher
-trenchering
-trencherman
-trenchers
-trenches
-trenching
-trent
-tres
-trespass
-trespasses
-tressel
-tresses
-treys
-trial
-trials
-trib
-tribe
-tribes
-tribulation
-tribunal
-tribune
-tribunes
-tributaries
-tributary
-tribute
-tributes
-trice
-trick
-tricking
-trickling
-tricks
-tricksy
-trident
-tried
-trier
-trifle
-trifled
-trifler
-trifles
-trifling
-trigon
-trill
-trim
-trimly
-trimm
-trimmed
-trimming
-trims
-trinculo
-trinculos
-trinkets
-trip
-tripartite
-tripe
-triple
-triplex
-tripoli
-tripolis
-tripp
-tripping
-trippingly
-trips
-tristful
-triton
-triumph
-triumphant
-triumphantly
-triumpher
-triumphers
-triumphing
-triumphs
-triumvir
-triumvirate
-triumvirs
-triumviry
-trivial
-troat
-trod
-trodden
-troiant
-troien
-troilus
-troiluses
-trojan
-trojans
-troll
-tromperies
-trompet
-troop
-trooping
-troops
-trop
-trophies
-trophy
-tropically
-trot
-troth
-trothed
-troths
-trots
-trotting
-trouble
-troubled
-troubler
-troubles
-troublesome
-troublest
-troublous
-trough
-trout
-trouts
-trovato
-trow
-trowel
-trowest
-troy
-troyan
-troyans
-truant
-truce
-truckle
-trudge
-true
-trueborn
-truepenny
-truer
-truest
-truie
-trull
-trulls
-truly
-trump
-trumpery
-trumpet
-trumpeter
-trumpeters
-trumpets
-truncheon
-truncheoners
-trundle
-trunk
-trunks
-trust
-trusted
-truster
-trusters
-trusting
-trusts
-trusty
-truth
-truths
-try
-ts
-tu
-tuae
-tub
-tubal
-tubs
-tuck
-tucket
-tuesday
-tuft
-tufts
-tug
-tugg
-tugging
-tuition
-tullus
-tully
-tumble
-tumbled
-tumbler
-tumbling
-tumult
-tumultuous
-tun
-tune
-tuneable
-tuned
-tuners
-tunes
-tunis
-tuns
-tupping
-turban
-turbans
-turbulence
-turbulent
-turd
-turf
-turfy
-turk
-turkey
-turkeys
-turkish
-turks
-turlygod
-turmoil
-turmoiled
-turn
-turnbull
-turncoat
-turncoats
-turned
-turneth
-turning
-turnips
-turns
-turph
-turpitude
-turquoise
-turret
-turrets
-turtle
-turtles
-turvy
-tuscan
-tush
-tut
-tutor
-tutored
-tutors
-tutto
-twain
-twang
-twangling
-twas
-tway
-tweaks
-tween
-twelfth
-twelve
-twelvemonth
-twentieth
-twenty
-twere
-twice
-twig
-twiggen
-twigs
-twilight
-twill
-twilled
-twin
-twine
-twink
-twinkle
-twinkled
-twinkling
-twinn
-twins
-twire
-twist
-twisted
-twit
-twits
-twitting
-twixt
-two
-twofold
-twopence
-twopences
-twos
-twould
-tyb
-tybalt
-tybalts
-tyburn
-tying
-tyke
-tymbria
-type
-types
-typhon
-tyrannical
-tyrannically
-tyrannize
-tyrannous
-tyranny
-tyrant
-tyrants
-tyrian
-tyrrel
-u
-ubique
-udders
-udge
-uds
-uglier
-ugliest
-ugly
-ulcer
-ulcerous
-ulysses
-um
-umber
-umbra
-umbrage
-umfrevile
-umpire
-umpires
-un
-unable
-unaccommodated
-unaccompanied
-unaccustom
-unaching
-unacquainted
-unactive
-unadvis
-unadvised
-unadvisedly
-unagreeable
-unanel
-unanswer
-unappeas
-unapproved
-unapt
-unaptness
-unarm
-unarmed
-unarms
-unassail
-unassailable
-unattainted
-unattempted
-unattended
-unauspicious
-unauthorized
-unavoided
-unawares
-unback
-unbak
-unbanded
-unbar
-unbarb
-unbashful
-unbated
-unbatter
-unbecoming
-unbefitting
-unbegot
-unbegotten
-unbelieved
-unbend
-unbent
-unbewail
-unbid
-unbidden
-unbind
-unbinds
-unbitted
-unbless
-unblest
-unbloodied
-unblown
-unbodied
-unbolt
-unbolted
-unbonneted
-unbookish
-unborn
-unbosom
-unbound
-unbounded
-unbow
-unbowed
-unbrac
-unbraced
-unbraided
-unbreathed
-unbred
-unbreech
-unbridled
-unbroke
-unbruis
-unbruised
-unbuckle
-unbuckles
-unbuckling
-unbuild
-unburden
-unburdens
-unburied
-unburnt
-unburthen
-unbutton
-unbuttoning
-uncapable
-uncape
-uncase
-uncasing
-uncaught
-uncertain
-uncertainty
-unchain
-unchanging
-uncharge
-uncharged
-uncharitably
-unchary
-unchaste
-uncheck
-unchilded
-uncivil
-unclaim
-unclasp
-uncle
-unclean
-uncleanliness
-uncleanly
-uncleanness
-uncles
-unclew
-unclog
-uncoined
-uncolted
-uncomeliness
-uncomfortable
-uncompassionate
-uncomprehensive
-unconfinable
-unconfirm
-unconfirmed
-unconquer
-unconquered
-unconsidered
-unconstant
-unconstrain
-unconstrained
-uncontemn
-uncontroll
-uncorrected
-uncounted
-uncouple
-uncourteous
-uncouth
-uncover
-uncovered
-uncropped
-uncross
-uncrown
-unction
-unctuous
-uncuckolded
-uncurable
-uncurbable
-uncurbed
-uncurls
-uncurrent
-uncurse
-undaunted
-undeaf
-undeck
-undeeded
-under
-underbearing
-underborne
-undercrest
-underfoot
-undergo
-undergoes
-undergoing
-undergone
-underground
-underhand
-underlings
-undermine
-underminers
-underneath
-underprizing
-underprop
-understand
-understandeth
-understanding
-understandings
-understands
-understood
-underta
-undertake
-undertakeing
-undertaker
-undertakes
-undertaking
-undertakings
-undertook
-undervalu
-undervalued
-underwent
-underwrit
-underwrite
-undescried
-undeserved
-undeserver
-undeservers
-undeserving
-undetermin
-undid
-undinted
-undiscernible
-undiscover
-undishonoured
-undispos
-undistinguishable
-undistinguished
-undividable
-undivided
-undivulged
-undo
-undoes
-undoing
-undone
-undoubted
-undoubtedly
-undream
-undress
-undressed
-undrown
-unduteous
-undutiful
-une
-uneared
-unearned
-unearthly
-uneasines
-uneasy
-uneath
-uneducated
-uneffectual
-unelected
-unequal
-uneven
-unexamin
-unexecuted
-unexpected
-unexperienc
-unexperient
-unexpressive
-unfair
-unfaithful
-unfallible
-unfam
-unfashionable
-unfasten
-unfather
-unfathered
-unfed
-unfeed
-unfeeling
-unfeigned
-unfeignedly
-unfellowed
-unfelt
-unfenced
-unfilial
-unfill
-unfinish
-unfirm
-unfit
-unfitness
-unfix
-unfledg
-unfold
-unfolded
-unfoldeth
-unfolding
-unfolds
-unfool
-unforc
-unforced
-unforfeited
-unfortified
-unfortunate
-unfought
-unfrequented
-unfriended
-unfurnish
-ungain
-ungalled
-ungart
-ungarter
-ungenitur
-ungentle
-ungentleness
-ungently
-ungird
-ungodly
-ungor
-ungot
-ungotten
-ungovern
-ungracious
-ungrateful
-ungravely
-ungrown
-unguarded
-unguem
-unguided
-unhack
-unhair
-unhallow
-unhallowed
-unhand
-unhandled
-unhandsome
-unhang
-unhappied
-unhappily
-unhappiness
-unhappy
-unhardened
-unharm
-unhatch
-unheard
-unhearts
-unheedful
-unheedfully
-unheedy
-unhelpful
-unhidden
-unholy
-unhop
-unhopefullest
-unhorse
-unhospitable
-unhous
-unhoused
-unhurtful
-unicorn
-unicorns
-unimproved
-uninhabitable
-uninhabited
-unintelligent
-union
-unions
-unite
-united
-unity
-universal
-universe
-universities
-university
-unjointed
-unjust
-unjustice
-unjustly
-unkennel
-unkept
-unkind
-unkindest
-unkindly
-unkindness
-unking
-unkinglike
-unkiss
-unknit
-unknowing
-unknown
-unlace
-unlaid
-unlawful
-unlawfully
-unlearn
-unlearned
-unless
-unlesson
-unletter
-unlettered
-unlick
-unlike
-unlikely
-unlimited
-unlineal
-unlink
-unload
-unloaded
-unloading
-unloads
-unlock
-unlocks
-unlook
-unlooked
-unloos
-unloose
-unlov
-unloving
-unluckily
-unlucky
-unmade
-unmake
-unmanly
-unmann
-unmanner
-unmannerd
-unmannerly
-unmarried
-unmask
-unmasked
-unmasking
-unmasks
-unmast
-unmatch
-unmatchable
-unmatched
-unmeasurable
-unmeet
-unmellowed
-unmerciful
-unmeritable
-unmeriting
-unminded
-unmindfull
-unmingled
-unmitigable
-unmitigated
-unmix
-unmoan
-unmov
-unmoved
-unmoving
-unmuffles
-unmuffling
-unmusical
-unmuzzle
-unmuzzled
-unnatural
-unnaturally
-unnaturalness
-unnecessarily
-unnecessary
-unneighbourly
-unnerved
-unnoble
-unnoted
-unnumb
-unnumber
-unowed
-unpack
-unpaid
-unparagon
-unparallel
-unpartial
-unpath
-unpaved
-unpay
-unpeaceable
-unpeg
-unpeople
-unpeopled
-unperfect
-unperfectness
-unpick
-unpin
-unpink
-unpitied
-unpitifully
-unplagu
-unplausive
-unpleas
-unpleasant
-unpleasing
-unpolicied
-unpolish
-unpolished
-unpolluted
-unpossess
-unpossessing
-unpossible
-unpractis
-unpregnant
-unpremeditated
-unprepar
-unprepared
-unpress
-unprevailing
-unprevented
-unpriz
-unprizable
-unprofitable
-unprofited
-unproper
-unproperly
-unproportion
-unprovide
-unprovided
-unprovident
-unprovokes
-unprun
-unpruned
-unpublish
-unpurged
-unpurpos
-unqualitied
-unqueen
-unquestion
-unquestionable
-unquiet
-unquietly
-unquietness
-unraised
-unrak
-unread
-unready
-unreal
-unreasonable
-unreasonably
-unreclaimed
-unreconciled
-unreconciliable
-unrecounted
-unrecuring
-unregarded
-unregist
-unrelenting
-unremovable
-unremovably
-unreprievable
-unresolv
-unrespected
-unrespective
-unrest
-unrestor
-unrestrained
-unreveng
-unreverend
-unreverent
-unrevers
-unrewarded
-unrighteous
-unrightful
-unripe
-unripp
-unrivall
-unroll
-unroof
-unroosted
-unroot
-unrough
-unruly
-unsafe
-unsaluted
-unsanctified
-unsatisfied
-unsavoury
-unsay
-unscalable
-unscann
-unscarr
-unschool
-unscorch
-unscour
-unscratch
-unseal
-unseam
-unsearch
-unseason
-unseasonable
-unseasonably
-unseasoned
-unseconded
-unsecret
-unseduc
-unseeing
-unseeming
-unseemly
-unseen
-unseminar
-unseparable
-unserviceable
-unset
-unsettle
-unsettled
-unsever
-unsex
-unshak
-unshaked
-unshaken
-unshaped
-unshapes
-unsheath
-unsheathe
-unshorn
-unshout
-unshown
-unshrinking
-unshrubb
-unshunn
-unshunnable
-unsifted
-unsightly
-unsinew
-unsisting
-unskilful
-unskilfully
-unskillful
-unslipping
-unsmirched
-unsoil
-unsolicited
-unsorted
-unsought
-unsound
-unsounded
-unspeak
-unspeakable
-unspeaking
-unsphere
-unspoke
-unspoken
-unspotted
-unsquar
-unstable
-unstaid
-unstain
-unstained
-unstanched
-unstate
-unsteadfast
-unstooping
-unstringed
-unstuff
-unsubstantial
-unsuitable
-unsuiting
-unsullied
-unsunn
-unsur
-unsure
-unsuspected
-unsway
-unswayable
-unswayed
-unswear
-unswept
-unsworn
-untainted
-untalk
-untangle
-untangled
-untasted
-untaught
-untempering
-untender
-untent
-untented
-unthankful
-unthankfulness
-unthink
-unthought
-unthread
-unthrift
-unthrifts
-unthrifty
-untie
-untied
-until
-untimber
-untimely
-untir
-untirable
-untired
-untitled
-unto
-untold
-untouch
-untoward
-untowardly
-untraded
-untrain
-untrained
-untread
-untreasur
-untried
-untrimmed
-untrod
-untrodden
-untroubled
-untrue
-untrussing
-untruth
-untruths
-untucked
-untun
-untune
-untuneable
-untutor
-untutored
-untwine
-unurg
-unus
-unused
-unusual
-unvalued
-unvanquish
-unvarnish
-unveil
-unveiling
-unvenerable
-unvex
-unviolated
-unvirtuous
-unvisited
-unvulnerable
-unwares
-unwarily
-unwash
-unwatch
-unwearied
-unwed
-unwedgeable
-unweeded
-unweighed
-unweighing
-unwelcome
-unwept
-unwhipp
-unwholesome
-unwieldy
-unwilling
-unwillingly
-unwillingness
-unwind
-unwiped
-unwise
-unwisely
-unwish
-unwished
-unwitted
-unwittingly
-unwonted
-unwooed
-unworthier
-unworthiest
-unworthily
-unworthiness
-unworthy
-unwrung
-unyok
-unyoke
-up
-upbraid
-upbraided
-upbraidings
-upbraids
-uphoarded
-uphold
-upholdeth
-upholding
-upholds
-uplift
-uplifted
-upmost
-upon
-upper
-uprear
-upreared
-upright
-uprighteously
-uprightness
-uprise
-uprising
-uproar
-uproars
-uprous
-upshoot
-upshot
-upside
-upspring
-upstairs
-upstart
-upturned
-upward
-upwards
-urchin
-urchinfield
-urchins
-urg
-urge
-urged
-urgent
-urges
-urgest
-urging
-urinal
-urinals
-urine
-urn
-urns
-urs
-ursa
-ursley
-ursula
-urswick
-us
-usage
-usance
-usances
-use
-used
-useful
-useless
-user
-uses
-usest
-useth
-usher
-ushered
-ushering
-ushers
-using
-usual
-usually
-usurer
-usurers
-usuries
-usuring
-usurp
-usurpation
-usurped
-usurper
-usurpers
-usurping
-usurpingly
-usurps
-usury
-ut
-utensil
-utensils
-utility
-utmost
-utt
-utter
-utterance
-uttered
-uttereth
-uttering
-utterly
-uttermost
-utters
-uy
-v
-va
-vacancy
-vacant
-vacation
-vade
-vagabond
-vagabonds
-vagram
-vagrom
-vail
-vailed
-vailing
-vaillant
-vain
-vainer
-vainglory
-vainly
-vainness
-vais
-valanc
-valance
-vale
-valence
-valentine
-valentinus
-valentio
-valeria
-valerius
-vales
-valiant
-valiantly
-valiantness
-validity
-vallant
-valley
-valleys
-vally
-valor
-valorous
-valorously
-valour
-valu
-valuation
-value
-valued
-valueless
-values
-valuing
-vane
-vanish
-vanished
-vanishes
-vanishest
-vanishing
-vanities
-vanity
-vanquish
-vanquished
-vanquisher
-vanquishest
-vanquisheth
-vant
-vantage
-vantages
-vantbrace
-vapians
-vapor
-vaporous
-vapour
-vapours
-vara
-variable
-variance
-variation
-variations
-varied
-variest
-variety
-varld
-varlet
-varletry
-varlets
-varletto
-varnish
-varrius
-varro
-vary
-varying
-vassal
-vassalage
-vassals
-vast
-vastidity
-vasty
-vat
-vater
-vaudemont
-vaughan
-vault
-vaultages
-vaulted
-vaulting
-vaults
-vaulty
-vaumond
-vaunt
-vaunted
-vaunter
-vaunting
-vauntingly
-vaunts
-vauvado
-vaux
-vaward
-ve
-veal
-vede
-vehemence
-vehemency
-vehement
-vehor
-veil
-veiled
-veiling
-vein
-veins
-vell
-velure
-velutus
-velvet
-vendible
-venerable
-venereal
-venetia
-venetian
-venetians
-veneys
-venge
-vengeance
-vengeances
-vengeful
-veni
-venial
-venice
-venison
-venit
-venom
-venomous
-venomously
-vent
-ventages
-vented
-ventidius
-ventricle
-vents
-ventur
-venture
-ventured
-ventures
-venturing
-venturous
-venue
-venus
-venuto
-ver
-verb
-verba
-verbal
-verbatim
-verbosity
-verdict
-verdun
-verdure
-vere
-verefore
-verg
-verge
-vergers
-verges
-verier
-veriest
-verified
-verify
-verily
-veritable
-verite
-verities
-verity
-vermilion
-vermin
-vernon
-verona
-veronesa
-versal
-verse
-verses
-versing
-vert
-very
-vesper
-vessel
-vessels
-vestal
-vestments
-vesture
-vetch
-vetches
-veux
-vex
-vexation
-vexations
-vexed
-vexes
-vexest
-vexeth
-vexing
-vi
-via
-vial
-vials
-viand
-viands
-vic
-vicar
-vice
-vicegerent
-vicentio
-viceroy
-viceroys
-vices
-vici
-vicious
-viciousness
-vict
-victims
-victor
-victoress
-victories
-victorious
-victors
-victory
-victual
-victuall
-victuals
-videlicet
-video
-vides
-videsne
-vidi
-vie
-vied
-vienna
-view
-viewest
-vieweth
-viewing
-viewless
-views
-vigil
-vigilance
-vigilant
-vigitant
-vigour
-vii
-viii
-vile
-vilely
-vileness
-viler
-vilest
-vill
-village
-villager
-villagery
-villages
-villain
-villainies
-villainous
-villainously
-villains
-villainy
-villanies
-villanous
-villany
-villiago
-villian
-villianda
-villians
-vinaigre
-vincentio
-vincere
-vindicative
-vine
-vinegar
-vines
-vineyard
-vineyards
-vint
-vintner
-viol
-viola
-violate
-violated
-violates
-violation
-violator
-violence
-violent
-violenta
-violenteth
-violently
-violet
-violets
-viper
-viperous
-vipers
-vir
-virgilia
-virgin
-virginal
-virginalling
-virginity
-virginius
-virgins
-virgo
-virtue
-virtues
-virtuous
-virtuously
-visag
-visage
-visages
-visard
-viscount
-visible
-visibly
-vision
-visions
-visit
-visitation
-visitations
-visited
-visiting
-visitings
-visitor
-visitors
-visits
-visor
-vita
-vitae
-vital
-vitement
-vitruvio
-vitx
-viva
-vivant
-vive
-vixen
-viz
-vizaments
-vizard
-vizarded
-vizards
-vizor
-vlouting
-vocation
-vocativo
-vocatur
-voce
-voic
-voice
-voices
-void
-voided
-voiding
-voke
-volable
-volant
-volivorco
-volley
-volquessen
-volsce
-volsces
-volscian
-volscians
-volt
-voltemand
-volubility
-voluble
-volume
-volumes
-volumnia
-volumnius
-voluntaries
-voluntary
-voluptuously
-voluptuousness
-vomissement
-vomit
-vomits
-vor
-vore
-vortnight
-vot
-votaries
-votarist
-votarists
-votary
-votre
-vouch
-voucher
-vouchers
-vouches
-vouching
-vouchsaf
-vouchsafe
-vouchsafed
-vouchsafes
-vouchsafing
-voudrais
-vour
-vous
-voutsafe
-vow
-vowed
-vowel
-vowels
-vowing
-vows
-vox
-voyage
-voyages
-vraiment
-vulcan
-vulgar
-vulgarly
-vulgars
-vulgo
-vulnerable
-vulture
-vultures
-vurther
-w
-wad
-waddled
-wade
-waded
-wafer
-waft
-waftage
-wafting
-wafts
-wag
-wage
-wager
-wagers
-wages
-wagging
-waggish
-waggling
-waggon
-waggoner
-wagon
-wagoner
-wags
-wagtail
-wail
-wailful
-wailing
-wails
-wain
-wainropes
-wainscot
-waist
-wait
-waited
-waiter
-waiteth
-waiting
-waits
-wak
-wake
-waked
-wakefield
-waken
-wakened
-wakes
-wakest
-waking
-wales
-walk
-walked
-walking
-walks
-wall
-walled
-wallet
-wallets
-wallon
-walloon
-wallow
-walls
-walnut
-walter
-wan
-wand
-wander
-wanderer
-wanderers
-wandering
-wanders
-wands
-wane
-waned
-wanes
-waning
-wann
-want
-wanted
-wanteth
-wanting
-wanton
-wantonly
-wantonness
-wantons
-wants
-wappen
-war
-warble
-warbling
-ward
-warded
-warden
-warder
-warders
-wardrobe
-wardrop
-wards
-ware
-wares
-warily
-warkworth
-warlike
-warm
-warmed
-warmer
-warming
-warms
-warmth
-warn
-warned
-warning
-warnings
-warns
-warp
-warped
-warr
-warrant
-warranted
-warranteth
-warrantise
-warrantize
-warrants
-warranty
-warren
-warrener
-warring
-warrior
-warriors
-wars
-wart
-warwick
-warwickshire
-wary
-was
-wash
-washed
-washer
-washes
-washford
-washing
-wasp
-waspish
-wasps
-wassail
-wassails
-wast
-waste
-wasted
-wasteful
-wasters
-wastes
-wasting
-wat
-watch
-watched
-watchers
-watches
-watchful
-watching
-watchings
-watchman
-watchmen
-watchword
-water
-waterdrops
-watered
-waterfly
-waterford
-watering
-waterish
-waterpots
-waterrugs
-waters
-waterton
-watery
-wav
-wave
-waved
-waver
-waverer
-wavering
-waves
-waving
-waw
-wawl
-wax
-waxed
-waxen
-waxes
-waxing
-way
-waylaid
-waylay
-ways
-wayward
-waywarder
-waywardness
-we
-weak
-weaken
-weakens
-weaker
-weakest
-weakling
-weakly
-weakness
-weal
-wealsmen
-wealth
-wealthiest
-wealthily
-wealthy
-wealtlly
-wean
-weapon
-weapons
-wear
-wearer
-wearers
-wearied
-wearies
-weariest
-wearily
-weariness
-wearing
-wearisome
-wears
-weary
-weasel
-weather
-weathercock
-weathers
-weav
-weave
-weaver
-weavers
-weaves
-weaving
-web
-wed
-wedded
-wedding
-wedg
-wedged
-wedges
-wedlock
-wednesday
-weed
-weeded
-weeder
-weeding
-weeds
-weedy
-week
-weeke
-weekly
-weeks
-ween
-weening
-weep
-weeper
-weeping
-weepingly
-weepings
-weeps
-weet
-weigh
-weighed
-weighing
-weighs
-weight
-weightier
-weightless
-weights
-weighty
-weird
-welcom
-welcome
-welcomer
-welcomes
-welcomest
-welfare
-welkin
-well
-wells
-welsh
-welshman
-welshmen
-welshwomen
-wench
-wenches
-wenching
-wend
-went
-wept
-weraday
-were
-wert
-west
-western
-westminster
-westmoreland
-westward
-wet
-wether
-wetting
-wezand
-whale
-whales
-wharf
-wharfs
-what
-whate
-whatever
-whatsoe
-whatsoever
-whatsome
-whe
-wheat
-wheaten
-wheel
-wheeling
-wheels
-wheer
-wheeson
-wheezing
-whelk
-whelks
-whelm
-whelp
-whelped
-whelps
-when
-whenas
-whence
-whencesoever
-whene
-whenever
-whensoever
-where
-whereabout
-whereas
-whereat
-whereby
-wherefore
-wherein
-whereinto
-whereof
-whereon
-whereout
-whereso
-wheresoe
-wheresoever
-wheresome
-whereto
-whereuntil
-whereunto
-whereupon
-wherever
-wherewith
-wherewithal
-whet
-whether
-whetstone
-whetted
-whew
-whey
-which
-whiff
-whiffler
-while
-whiles
-whilst
-whin
-whine
-whined
-whinid
-whining
-whip
-whipp
-whippers
-whipping
-whips
-whipster
-whipstock
-whipt
-whirl
-whirled
-whirligig
-whirling
-whirlpool
-whirls
-whirlwind
-whirlwinds
-whisp
-whisper
-whispering
-whisperings
-whispers
-whist
-whistle
-whistles
-whistling
-whit
-white
-whitehall
-whitely
-whiteness
-whiter
-whites
-whitest
-whither
-whiting
-whitmore
-whitsters
-whitsun
-whittle
-whizzing
-who
-whoa
-whoe
-whoever
-whole
-wholesom
-wholesome
-wholly
-whom
-whoobub
-whoop
-whooping
-whor
-whore
-whoremaster
-whoremasterly
-whoremonger
-whores
-whoreson
-whoresons
-whoring
-whorish
-whose
-whoso
-whosoe
-whosoever
-why
-wi
-wick
-wicked
-wickednes
-wickedness
-wicket
-wicky
-wid
-wide
-widens
-wider
-widow
-widowed
-widower
-widowhood
-widows
-wield
-wife
-wight
-wights
-wild
-wildcats
-wilder
-wilderness
-wildest
-wildfire
-wildly
-wildness
-wilds
-wiles
-wilful
-wilfull
-wilfully
-wilfulnes
-wilfulness
-will
-willed
-willers
-willeth
-william
-williams
-willing
-willingly
-willingness
-willoughby
-willow
-wills
-wilt
-wiltshire
-wimpled
-win
-wince
-winch
-winchester
-wincot
-wind
-winded
-windgalls
-winding
-windlasses
-windmill
-window
-windows
-windpipe
-winds
-windsor
-windy
-wine
-wing
-winged
-wingfield
-wingham
-wings
-wink
-winking
-winks
-winner
-winners
-winning
-winnow
-winnowed
-winnows
-wins
-winter
-winterly
-winters
-wip
-wipe
-wiped
-wipes
-wiping
-wire
-wires
-wiry
-wisdom
-wisdoms
-wise
-wiselier
-wisely
-wiser
-wisest
-wish
-wished
-wisher
-wishers
-wishes
-wishest
-wisheth
-wishful
-wishing
-wishtly
-wisp
-wist
-wit
-witb
-witch
-witchcraft
-witches
-witching
-with
-withal
-withdraw
-withdrawing
-withdrawn
-withdrew
-wither
-withered
-withering
-withers
-withheld
-withhold
-withholds
-within
-withold
-without
-withstand
-withstanding
-withstood
-witless
-witness
-witnesses
-witnesseth
-witnessing
-wits
-witted
-wittenberg
-wittiest
-wittily
-witting
-wittingly
-wittol
-wittolly
-witty
-wiv
-wive
-wived
-wives
-wiving
-wizard
-wizards
-wo
-woe
-woeful
-woefull
-woefullest
-woes
-woful
-wolf
-wolfish
-wolsey
-wolves
-wolvish
-woman
-womanhood
-womanish
-womankind
-womanly
-womb
-wombs
-womby
-women
-won
-woncot
-wond
-wonder
-wondered
-wonderful
-wonderfully
-wondering
-wonders
-wondrous
-wondrously
-wont
-wonted
-woo
-wood
-woodbine
-woodcock
-woodcocks
-wooden
-woodland
-woodman
-woodmonger
-woods
-woodstock
-woodville
-wooed
-wooer
-wooers
-wooes
-woof
-wooing
-wooingly
-wool
-woollen
-woolly
-woolsack
-woolsey
-woolward
-woos
-wor
-worcester
-word
-words
-wore
-worins
-work
-workers
-working
-workings
-workman
-workmanly
-workmanship
-workmen
-works
-worky
-world
-worldlings
-worldly
-worlds
-worm
-worms
-wormwood
-wormy
-worn
-worried
-worries
-worry
-worrying
-worse
-worser
-worship
-worshipful
-worshipfully
-worshipp
-worshipper
-worshippers
-worshippest
-worships
-worst
-worsted
-wort
-worth
-worthied
-worthier
-worthies
-worthiest
-worthily
-worthiness
-worthless
-worths
-worthy
-worts
-wot
-wots
-wotting
-wouid
-would
-wouldest
-wouldst
-wound
-wounded
-wounding
-woundings
-woundless
-wounds
-wouns
-woven
-wow
-wrack
-wrackful
-wrangle
-wrangler
-wranglers
-wrangling
-wrap
-wrapp
-wraps
-wrapt
-wrath
-wrathful
-wrathfully
-wraths
-wreak
-wreakful
-wreaks
-wreath
-wreathed
-wreathen
-wreaths
-wreck
-wrecked
-wrecks
-wren
-wrench
-wrenching
-wrens
-wrest
-wrested
-wresting
-wrestle
-wrestled
-wrestler
-wrestling
-wretch
-wretchcd
-wretched
-wretchedness
-wretches
-wring
-wringer
-wringing
-wrings
-wrinkle
-wrinkled
-wrinkles
-wrist
-wrists
-writ
-write
-writer
-writers
-writes
-writhled
-writing
-writings
-writs
-written
-wrong
-wronged
-wronger
-wrongful
-wrongfully
-wronging
-wrongly
-wrongs
-wronk
-wrote
-wroth
-wrought
-wrung
-wry
-wrying
-wt
-wul
-wye
-x
-xanthippe
-xi
-xii
-xiii
-xiv
-xv
-y
-yard
-yards
-yare
-yarely
-yarn
-yaughan
-yaw
-yawn
-yawning
-ycleped
-ycliped
-ye
-yea
-yead
-year
-yearly
-yearn
-yearns
-years
-yeas
-yeast
-yedward
-yell
-yellow
-yellowed
-yellowing
-yellowness
-yellows
-yells
-yelping
-yeoman
-yeomen
-yerk
-yes
-yesterday
-yesterdays
-yesternight
-yesty
-yet
-yew
-yicld
-yield
-yielded
-yielder
-yielders
-yielding
-yields
-yok
-yoke
-yoked
-yokefellow
-yokes
-yoketh
-yon
-yond
-yonder
-yongrey
-yore
-yorick
-york
-yorkists
-yorks
-yorkshire
-you
-young
-younger
-youngest
-youngling
-younglings
-youngly
-younker
-your
-yours
-yourself
-yourselves
-youth
-youthful
-youths
-youtli
-zanies
-zany
-zeal
-zealous
-zeals
-zed
-zenelophon
-zenith
-zephyrs
-zir
-zo
-zodiac
-zodiacs
-zone
-zounds
-zwagger
diff --git a/extra/printf/authors.txt b/extra/printf/authors.txt
deleted file mode 100644 (file)
index e091bb8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-John Benediktsson
diff --git a/extra/printf/printf-docs.factor b/extra/printf/printf-docs.factor
deleted file mode 100644 (file)
index 3ca9c07..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-
-USING: help.syntax help.markup kernel prettyprint sequences strings ;
-
-IN: printf
-
-HELP: printf
-{ $values { "format-string" string } }
-{ $description "Writes the arguments (specified on the stack) formatted according to the format string." } 
-{ $examples 
-    { $example
-        "USING: printf ;"
-        "123 \"%05d\" printf"
-        "00123" }
-    { $example
-        "USING: printf ;"
-        "HEX: ff \"%04X\" printf"
-        "00FF" }
-    { $example
-        "USING: printf ;"
-        "1.23456789 \"%.3f\" printf"
-        "1.235" }
-    { $example 
-        "USING: printf ;"
-        "1234567890 \"%.5e\" printf"
-        "1.23457e+09" }
-    { $example
-        "USING: printf ;"
-        "12 \"%'#4d\" printf"
-        "##12" }
-    { $example
-        "USING: printf ;"
-        "1234 \"%+d\" printf"
-        "+1234" }
-} ;
-
-HELP: sprintf
-{ $values { "format-string" string } { "result" string } }
-{ $description "Returns the arguments (specified on the stack) formatted according to the format string as a result string." } 
-{ $see-also printf } ;
-
-ARTICLE: "printf" "Formatted printing"
-"The " { $vocab-link "printf" } " vocabulary is used for formatted printing.\n"
-{ $subsection printf }
-{ $subsection sprintf }
-"\n"
-"Several format specifications exist for handling arguments of different types, and specifying attributes for the result string, including such things as maximum width, padding, and decimals.\n"
-{ $table
-    { "%%"    "Single %" "" }
-    { "%P.Ds" "String format" "string" }
-    { "%P.DS" "String format uppercase" "string" }
-    { "%c"    "Character format" "char" } 
-    { "%C"    "Character format uppercase" "char" } 
-    { "%+Pd"   "Integer format"  "fixnum" }
-    { "%+P.De" "Scientific notation" "fixnum, float" }
-    { "%+P.DE" "Scientific notation" "fixnum, float" }
-    { "%+P.Df" "Fixed format" "fixnum, float" }
-    { "%+Px"   "Hexadecimal" "hex" }
-    { "%+PX"   "Hexadecimal uppercase" "hex" }
-}
-"\n"
-"A plus sign ('+') is used to optionally specify that the number should be formatted with a '+' preceeding it if positive.\n"
-"\n"
-"Padding ('P') is used to optionally specify the minimum width of the result string, the padding character, and the alignment.  By default, the padding character defaults to a space and the alignment defaults to right-aligned. For example:\n"
-{ $list
-    "\"%5s\" formats a string padding with spaces up to 5 characters wide."
-    "\"%08d\" formats an integer padding with zeros up to 3 characters wide."
-    "\"%'#5f\" formats a float padding with '#' up to 3 characters wide."
-    "\"%-10d\" formats an integer to 10 characters wide and left-aligns." 
-}
-"\n"
-"Digits ('D') is used to optionally specify the maximum digits in the result string. For example:\n"
-{ $list 
-    "\"%.3s\" formats a string to truncate at 3 characters (from the left)."
-    "\"%.10f\" formats a float to pad-right with zeros up to 10 digits beyond the decimal point."
-    "\"%.5E\" formats a float into scientific notation with zeros up to 5 digits beyond the decimal point, but before the exponent."
-} ;
-
-ABOUT: "printf"
-
-
diff --git a/extra/printf/printf-tests.factor b/extra/printf/printf-tests.factor
deleted file mode 100644 (file)
index 2123784..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-! Copyright (C) 2008 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: kernel printf tools.test ;
-
-[ "%s" printf ] must-infer 
-
-[ "%s" sprintf ] must-infer
-
-[ t ] [ "" "" sprintf = ] unit-test
-
-[ t ] [ "asdf" "asdf" sprintf = ] unit-test
-
-[ t ] [ "10" 10 "%d" sprintf = ] unit-test
-
-[ t ] [ "+10" 10 "%+d" sprintf = ] unit-test
-
-[ t ] [ "-10" -10 "%d" sprintf = ] unit-test
-
-[ t ] [ "  -10" -10 "%5d" sprintf = ] unit-test
-
-[ t ] [ "-0010" -10 "%05d" sprintf = ] unit-test
-
-[ t ] [ "+0010" 10 "%+05d" sprintf = ] unit-test
-
-[ t ] [ "123.456000" 123.456 "%f" sprintf = ] unit-test
-
-[ t ] [ "2.44" 2.436 "%.2f" sprintf = ] unit-test
-
-[ t ] [ "123.10" 123.1 "%01.2f" sprintf = ] unit-test
-
-[ t ] [ "1.2346" 1.23456789 "%.4f" sprintf = ] unit-test
-
-[ t ] [ "  1.23" 1.23456789 "%6.2f" sprintf = ] unit-test
-
-[ t ] [ "1.234000e+08" 123400000 "%e" sprintf = ] unit-test
-
-[ t ] [ "-1.234000e+08" -123400000 "%e" sprintf = ] unit-test
-
-[ t ] [ "1.234567e+08" 123456700 "%e" sprintf = ] unit-test
-
-[ t ] [ "3.625e+08" 362525200 "%.3e" sprintf = ] unit-test
-
-[ t ] [ "2.500000e-03" 0.0025 "%e" sprintf = ] unit-test
-
-[ t ] [ "2.500000E-03" 0.0025 "%E" sprintf = ] unit-test
-
-[ t ] [ "   1.0E+01" 10 "%10.1E" sprintf = ] unit-test
-
-[ t ] [ "  -1.0E+01" -10 "%10.1E" sprintf = ] unit-test
-
-[ t ] [ "  -1.0E+01" -10 "%+10.1E" sprintf = ] unit-test
-
-[ t ] [ "  +1.0E+01" 10 "%+10.1E" sprintf = ] unit-test
-
-[ t ] [ "-001.0E+01" -10 "%+010.1E" sprintf = ] unit-test
-
-[ t ] [ "+001.0E+01" 10 "%+010.1E" sprintf = ] unit-test
-
-[ t ] [ "ff" HEX: ff "%x" sprintf = ] unit-test
-
-[ t ] [ "FF" HEX: ff "%X" sprintf = ] unit-test
-
-[ t ] [ "0f" HEX: f "%02x" sprintf = ] unit-test
-
-[ t ] [ "0F" HEX: f "%02X" sprintf = ] unit-test
-
-[ t ] [ "2008-09-10" 
-        2008 9 10 "%04d-%02d-%02d" sprintf = ] unit-test
-
-[ t ] [ "Hello, World!" 
-        "Hello, World!" "%s" sprintf = ] unit-test
-
-[ t ] [ "printf test" 
-        "printf test" sprintf = ] unit-test
-
-[ t ] [ "char a = 'a'"
-        CHAR: a "char %c = 'a'" sprintf = ] unit-test
-
-[ t ] [ "00" HEX: 0 "%02x" sprintf = ] unit-test
-
-[ t ] [ "ff" HEX: ff "%02x" sprintf = ] unit-test
-
-[ t ] [ "0 message(s)"
-        0 "message" "%d %s(s)" sprintf = ] unit-test
-
-[ t ] [ "0 message(s) with %"
-        0 "message" "%d %s(s) with %%" sprintf = ] unit-test
-
-[ t ] [ "justif: \"left      \""
-        "left" "justif: \"%-10s\"" sprintf = ] unit-test
-
-[ t ] [ "justif: \"     right\""
-        "right" "justif: \"%10s\"" sprintf = ] unit-test
-
-[ t ] [ " 3: 0003 zero padded" 
-        3 " 3: %04d zero padded" sprintf = ] unit-test
-
-[ t ] [ " 3: 3    left justif" 
-        3 " 3: %-4d left justif" sprintf = ] unit-test
-
-[ t ] [ " 3:    3 right justif" 
-        3 " 3: %4d right justif" sprintf = ] unit-test
-
-[ t ] [ " -3: -003 zero padded"
-        -3 " -3: %04d zero padded" sprintf = ] unit-test
-
-[ t ] [ " -3: -3   left justif"
-        -3 " -3: %-4d left justif" sprintf = ] unit-test
-
-[ t ] [ " -3:   -3 right justif"
-        -3 " -3: %4d right justif" sprintf = ] unit-test
-
-[ t ] [ "There are 10 monkeys in the kitchen" 
-        10 "kitchen" "There are %d monkeys in the %s" sprintf = ] unit-test
-
-[ f ] [ "%d" 10 "%d" sprintf = ] unit-test
-
-[ t ] [ "[monkey]" "monkey" "[%s]" sprintf = ] unit-test
-
-[ t ] [ "[    monkey]" "monkey" "[%10s]" sprintf = ] unit-test
-
-[ t ] [ "[monkey    ]" "monkey" "[%-10s]" sprintf = ] unit-test
-
-[ t ] [ "[0000monkey]" "monkey" "[%010s]" sprintf = ] unit-test
-
-[ t ] [ "[####monkey]" "monkey" "[%'#10s]" sprintf = ] unit-test
-
-[ t ] [ "[many monke]" "many monkeys" "[%10.10s]" sprintf = ] unit-test
-
-
-
diff --git a/extra/printf/printf.factor b/extra/printf/printf.factor
deleted file mode 100644 (file)
index ac02efb..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-! Copyright (C) 2008 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: io io.encodings.ascii io.files io.streams.string combinators
-kernel sequences splitting strings math math.functions math.parser 
-macros fry peg.ebnf ascii unicode.case arrays quotations vectors ;
-
-IN: printf
-
-<PRIVATE
-
-: compose-all ( seq -- quot )
-    [ ] [ compose ] reduce ;
-
-: fix-sign ( string -- string )
-    dup CHAR: 0 swap index 0 = 
-      [ dup 0 swap [ [ CHAR: 0 = not ] keep digit? and ] find-from
-         [ dup 1- rot dup [ nth ] dip swap
-            {
-               { CHAR: - [ [ 1- ] dip remove-nth "-" prepend ] }
-               { CHAR: + [ [ 1- ] dip remove-nth "+" prepend ] }
-               [ drop swap drop ] 
-            } case 
-         ] [ drop ] if
-      ] when ;
-
-: >digits ( string -- digits ) 
-    [ 0 ] [ string>number ] if-empty ;
-
-: pad-digits ( string digits -- string' )
-    [ "." split1 ] dip [ CHAR: 0 pad-right ] [ head-slice ] bi "." glue ;
-
-: max-digits ( n digits -- n' )
-    10 swap ^ [ * round ] keep / ;
-
-: max-width ( string length -- string' ) 
-    short head ;
-
-: >exp ( x -- exp base )
-    [ 
-        abs 0 swap
-        [ dup [ 10.0 >= ] [ 1.0 < ] bi or ]
-        [ dup 10.0 >=
-          [ 10.0 / [ 1+ ] dip ]
-          [ 10.0 * [ 1- ] dip ] if
-        ] [ ] while 
-     ] keep 0 < [ neg ] when ;
-
-: exp>string ( exp base digits -- string )
-    [ max-digits ] keep -rot
-    [
-        [ 0 < "-" "+" ? ]
-        [ abs number>string 2 CHAR: 0 pad-left ] bi 
-        "e" -rot 3append
-    ]
-    [ number>string ] bi*
-    rot pad-digits prepend ;
-
-EBNF: parse-format-string
-
-zero      = "0"                  => [[ CHAR: 0 ]]
-char      = "'" (.)              => [[ second ]]
-
-pad-char  = (zero|char)?         => [[ CHAR: \s or ]]
-pad-align = ("-")?               => [[ \ pad-right \ pad-left ? ]] 
-pad-width = ([0-9])*             => [[ >digits ]]
-pad       = pad-align pad-char pad-width => [[ reverse >quotation dup first 0 = [ drop [ ] ] when ]]
-
-sign      = ("+")?               => [[ [ dup CHAR: - swap index [ "+" prepend ] unless ] [ ] ? ]]
-
-width_    = "." ([0-9])*         => [[ second >digits '[ _ max-width ] ]]
-width     = (width_)?            => [[ [ ] or ]] 
-
-digits_   = "." ([0-9])*         => [[ second >digits ]]
-digits    = (digits_)?           => [[ 6 or ]]
-
-fmt-%     = "%"                  => [[ [ "%" ] ]] 
-fmt-c     = "c"                  => [[ [ 1string ] ]]
-fmt-C     = "C"                  => [[ [ 1string >upper ] ]]
-fmt-s     = "s"                  => [[ [ ] ]]
-fmt-S     = "S"                  => [[ [ >upper ] ]]
-fmt-d     = "d"                  => [[ [ >fixnum number>string ] ]]
-fmt-e     = digits "e"           => [[ first '[ >exp _ exp>string ] ]]
-fmt-E     = digits "E"           => [[ first '[ >exp _ exp>string >upper ] ]]
-fmt-f     = digits "f"           => [[ first dup '[ >float _ max-digits number>string _ pad-digits ] ]] 
-fmt-x     = "x"                  => [[ [ >hex ] ]]
-fmt-X     = "X"                  => [[ [ >hex >upper ] ]]
-unknown   = (.)*                 => [[ "Unknown directive" throw ]]
-
-strings_  = fmt-c|fmt-C|fmt-s|fmt-S
-strings   = pad width strings_   => [[ reverse compose-all ]]
-
-numbers_  = fmt-d|fmt-e|fmt-E|fmt-f|fmt-x|fmt-X
-numbers   = sign pad numbers_    => [[ unclip-last prefix compose-all [ fix-sign ] append ]]
-
-formats   = "%" (strings|numbers|fmt-%|unknown) => [[ second '[ _ dip ] ]]
-
-plain-text = (!("%").)+          => [[ >string '[ _ swap ] ]]
-
-text      = (formats|plain-text)* => [[ reverse [ [ [ push ] keep ] append ] map ]]
-
-;EBNF
-
-PRIVATE>
-
-MACRO: printf ( format-string -- )
-    parse-format-string [ length ] keep compose-all '[ _ <vector> @ reverse [ write ] each ] ;
-
-: sprintf ( format-string -- result )
-    [ printf ] with-string-writer ; inline
-
-
diff --git a/extra/printf/summary.txt b/extra/printf/summary.txt
deleted file mode 100644 (file)
index da1aa31..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Format data according to a specified format string, and writes (or returns) the result string.  
diff --git a/extra/processing/gadget/gadget.factor b/extra/processing/gadget/gadget.factor
deleted file mode 100644 (file)
index 0b3bb6d..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-
-USING: kernel namespaces combinators
-       ui.gestures accessors ui.gadgets.frame-buffer ;
-
-IN: processing.gadget
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-TUPLE: processing-gadget < frame-buffer button-down button-up key-down key-up ;
-
-: <processing-gadget> ( -- gadget ) processing-gadget new-frame-buffer ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: mouse-pressed-value
-SYMBOL: key-pressed-value
-
-SYMBOL: button-value
-SYMBOL: key-value
-
-: key-pressed?   ( -- ? ) key-pressed-value   get ;
-: mouse-pressed? ( -- ? ) mouse-pressed-value get ;
-
-: key    ( -- key ) key-value    get ;
-: button ( -- val ) button-value get ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-M: processing-gadget handle-gesture ( gesture gadget -- ? )
-   swap
-   {
-     {
-       [ dup key-down? ]
-       [
-         sym>> key-value set
-         key-pressed-value on
-         key-down>> dup [ call ] [ drop ] if
-         t
-       ]
-     }
-     {
-       [ dup key-up?   ]
-       [
-         key-pressed-value off
-         drop
-         key-up>> dup [ call ] [ drop ] if
-         t
-       ] }
-     {
-       [ dup button-down? ]
-       [
-         #>> button-value set
-         mouse-pressed-value on
-         button-down>> dup [ call ] [ drop ] if
-         t
-       ]
-     }
-     {
-       [ dup button-up? ]
-       [
-         mouse-pressed-value off
-         drop
-         button-up>> dup [ call ] [ drop ] if
-         t
-       ]
-     }
-     { [ t ] [ 2drop t ] }
-   }
-   cond ;
diff --git a/extra/processing/processing.factor b/extra/processing/processing.factor
deleted file mode 100644 (file)
index f351c98..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-
-USING: kernel namespaces threads combinators sequences arrays
-       math math.functions math.ranges random
-       opengl.gl opengl.glu vars multi-methods generalizations shuffle
-       ui
-       ui.gestures
-       ui.gadgets
-       combinators
-       combinators.lib
-       combinators.cleave
-       rewrite-closures bake bake.fry accessors newfx
-       processing.gadget math.geometry.rect
-       processing.shapes
-       colors ;
-       
-IN: processing
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: 2random ( a b -- num ) 2dup swap - 100 / <range> random ;
-
-: 1random ( b -- num ) 0 swap 2random ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: chance ( fraction -- ? ) 0 1 2random > ;
-
-: percent-chance ( percent -- ? ) 100 / chance ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-! : at-fraction ( seq fraction -- val ) over length 1- * nth-at ;
-
-: at-fraction ( seq fraction -- val ) over length 1- * at ;
-
-: at-fraction-of ( fraction seq -- val ) swap at-fraction ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-GENERIC: canonical-color-value ( obj -- color )
-
-METHOD: canonical-color-value { number } dup dup 1 rgba boa ;
-
-METHOD: canonical-color-value { array }
-   dup length
-   {
-     { 2 [ first2 >r dup dup r> rgba boa ] }
-     { 3 [ first3 1             rgba boa ] }
-     { 4 [ first4               rgba boa ] }
-   }
-   case ;
-
-! METHOD: canonical-color-value { rgba }
-!   { [ red>> ] [ green>> ] [ blue>> ] [ alpha>> ] } cleave 4array ;
-
-METHOD: canonical-color-value { color } ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: fill   ( value -- ) canonical-color-value >fill-color   ;
-: stroke ( value -- ) canonical-color-value >stroke-color ;
-
-! : no-fill   ( -- ) 0 fill-color>   set-fourth ;
-! : no-stroke ( -- ) 0 stroke-color> set-fourth ;
-
-: no-fill   ( -- ) fill-color>   0 >>alpha drop ;
-: no-stroke ( -- ) stroke-color> 0 >>alpha drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: stroke-weight ( w -- ) glLineWidth ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-! : quad-vertices ( x1 y1 x2 y2 x3 y3 x4 y4 -- )
-!   GL_POLYGON glBegin
-!     glVertex2d
-!     glVertex2d
-!     glVertex2d
-!     glVertex2d
-!   glEnd ;
-
-! : quad ( x1 y1 x2 y2 x3 y3 x4 y4 -- )
-
-!   8 ndup
-
-!   GL_FRONT_AND_BACK GL_FILL glPolygonMode
-!   fill-color> set-color
-
-!   quad-vertices
-  
-!   GL_FRONT_AND_BACK GL_LINE glPolygonMode
-!   stroke-color> set-color
-
-!   quad-vertices ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-! : ellipse-disk ( x y width height -- )
-!   glPushMatrix
-!     >r >r
-!     0 glTranslated
-!     r> r> 1 glScaled
-!     gluNewQuadric
-!       dup 0 0.5 20 1 gluDisk
-!     gluDeleteQuadric
-!   glPopMatrix ;
-
-! : ellipse-center ( x y width height -- )
-
-!   4dup
-
-!   GL_FRONT_AND_BACK GL_FILL glPolygonMode
-!   stroke-color> set-color
-
-!   ellipse-disk
-
-!   GL_FRONT_AND_BACK GL_FILL glPolygonMode
-!   fill-color> set-color
-
-!   [ 2 - ] bi@ ! [ stroke-width 1+ - ] bi@
-
-!   ellipse-disk ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-! SYMBOL: CENTER
-! SYMBOL: RADIUS
-! SYMBOL: CORNER
-! SYMBOL: CORNERS
-
-! SYMBOL: ellipse-mode-value
-
-! : ellipse-mode ( val -- ) ellipse-mode-value set ;
-
-! : ellipse-radius ( x y hori vert -- ) [ 2 * ] bi@ ellipse-center ;
-
-! : ellipse-corner ( x y width height -- )
-!   [ drop nip     2 / + ] 4keep
-!   [ nip rot drop 2 / + ] 4keep
-!   [ >r >r 2drop r> r>  ] 4keep
-!   4drop
-!   ellipse-center ;
-
-! : ellipse-corners ( x1 y1 x2 y2 -- )
-!   [ drop nip     + 2 /    ] 4keep
-!   [ nip rot drop + 2 /    ] 4keep
-!   [ drop nip     - abs 1+ ] 4keep
-!   [ nip rot drop - abs 1+ ] 4keep
-!   4drop
-!   ellipse-center ;
-
-! : ellipse ( a b c d -- )
-!   ellipse-mode-value get
-!     {
-!       { CENTER  [ ellipse-center ] }
-!       { RADIUS  [ ellipse-radius ] }
-!       { CORNER  [ ellipse-corner ] }
-!       { CORNERS [ ellipse-corners ] }
-!     }
-!   case ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-GENERIC: background ( value -- )
-
-METHOD: background { number }
-   dup dup 1 glClearColor
-   GL_COLOR_BUFFER_BIT glClear ;
-
-METHOD: background { array }
-   dup length
-   {
-     { 2 [ first2 >r dup dup r> glClearColor GL_COLOR_BUFFER_BIT glClear ] }
-     { 3 [ first3 1             glClearColor GL_COLOR_BUFFER_BIT glClear ] }
-     { 4 [ first4               glClearColor GL_COLOR_BUFFER_BIT glClear ] }
-   }
-   case ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: translate ( x y -- ) 0 glTranslated ;
-
-: rotate ( angle -- ) 0 0 1 glRotated ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: mouse ( -- point ) hand-loc get ;
-
-: mouse-x ( -- x ) mouse first  ;
-: mouse-y ( -- y ) mouse second ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-VAR: frame-rate-value
-
-: frame-rate ( fps -- ) 1000 swap / >frame-rate-value ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-! VAR: slate
-
-VAR: loop-flag
-
-: defaults ( -- )
-  0.8    background
-  ! CENTER ellipse-mode
-  60 frame-rate ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: size-val
-
-: size ( seq -- ) size-val set ;
-
-: size* ( width height -- ) 2array size-val set ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: setup-action
-SYMBOL: draw-action
-
-! : setup ( quot -- ) closed-quot setup-action set ;
-! : draw  ( quot -- ) closed-quot draw-action  set ;
-
-: setup ( quot -- ) setup-action set ;
-: draw  ( quot -- ) draw-action  set ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: key-down-action
-SYMBOL: key-up-action
-
-: key-down ( quot -- ) closed-quot key-down-action set ;
-: key-up   ( quot -- ) closed-quot key-up-action   set ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: button-down-action
-SYMBOL: button-up-action
-
-: button-down ( quot -- ) closed-quot button-down-action set ;
-: button-up   ( quot -- ) closed-quot button-up-action   set ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: start-processing-thread ( -- )
-  loop-flag get not
-    [
-      loop-flag on
-      [
-        [ loop-flag get ]
-        processing-gadget get frame-rate-value> '[ , relayout-1 , sleep ]
-        [ ]
-        while
-      ]
-      in-thread
-    ]
-  when ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: get-size ( -- size ) processing-gadget get rect-dim ;
-
-: width  ( -- width  ) get-size first ;
-: height ( -- height ) get-size second ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: setup-called
-
-: setup-called? ( -- ? ) setup-called get ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: run ( -- )
-
-  loop-flag off
-
-  500 sleep
-
-  <processing-gadget>
-    size-val get >>pdim
-    dup "Processing" open-window
-
-    500 sleep
-
-    defaults
-
-    setup-called off
-
-    [
-      setup-called? not
-        [
-          setup-action get call
-          setup-called on
-        ]
-        [
-          draw-action get call
-        ]
-      if
-    ]
-      closed-quot >>action
-    
-    key-down-action get >>key-down
-    key-up-action   get >>key-up
-
-    button-down-action get >>button-down
-    button-up-action   get >>button-up
-    
-  processing-gadget set
-
-  start-processing-thread ;
\ No newline at end of file
index 82d6a31c6691c744a3ccaa83f6c844d5cd088f13..297fb69de377aa61b9c7b306cad24778802567a6 100644 (file)
@@ -33,8 +33,8 @@ TUPLE: end { ways integer } ;
 
 C: <block> block
 C: <end> end
-: <failure> 0 <end> ; inline
-: <success> 1 <end> ; inline
+: <failure> ( -- end ) 0 <end> ; inline
+: <success> ( -- end ) 1 <end> ; inline
 
 : failure? ( t -- ? ) ways>> 0 = ; inline
 
index 35d9c65b538c1cc65de645555fbce855630f95e7..1a57a91e5eca093e617558b16ede89e1e6b2a95d 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: arrays kernel make math math.functions math.matrices math.miller-rabin
     math.order math.parser math.primes.factors math.ranges math.ratios
-    sequences sequences.lib sorting strings unicode.case ;
+    sequences sorting strings unicode.case ;
 IN: project-euler.common
 
 ! A collection of words used by more than one Project Euler solution
@@ -42,7 +42,7 @@ IN: project-euler.common
     [ over rest rot first2 max rot + ] map nip ;
 
 : (sum-divisors) ( n -- sum )
-    dup sqrt >fixnum [1,b] [
+    dup sqrt >integer [1,b] [
         [ 2dup mod 0 = [ 2dup / + , ] [ drop ] if ] each
         dup perfect-square? [ sqrt >fixnum neg , ] [ drop ] if
     ] { } make sum ;
@@ -56,7 +56,7 @@ PRIVATE>
     >lower [ CHAR: a - 1+ ] sigma ;
 
 : cartesian-product ( seq1 seq2 -- seq1xseq2 )
-    swap [ swap [ 2array ] map-with ] map-with concat ;
+    swap [ swap [ 2array ] with map ] with map concat ;
 
 : log10 ( m -- n )
     log 10 log / ;
index 027e8fe50f20cf050f66a27f49162cee15c44508..f9fa0f4f1824d1f2e0146f508ce908544c9b0d46 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (c) 2007, 2008 Aaron Schaefer, Samuel Tardieu.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: definitions io io.files kernel math math.parser
+USING: definitions io io.files io.pathnames kernel math math.parser
     prettyprint project-euler.ave-time sequences vocabs vocabs.loader
     project-euler.001 project-euler.002 project-euler.003 project-euler.004
     project-euler.005 project-euler.006 project-euler.007 project-euler.008
index ce3bc311be3d0e06cbc449cfa77bd6f437fe42c8..47c85a6c012dab9edf5df323dd25a7fcdb5a2fa3 100644 (file)
@@ -1,6 +1,6 @@
 
 USING: kernel namespaces arrays quotations sequences assocs combinators
-       mirrors math math.vectors random macros bake bake.fry ;
+       mirrors math math.vectors random macros fry ;
 
 IN: random-weighted
 
@@ -17,4 +17,4 @@ dup [ second ] map swap [ first ] map random-weighted swap nth ;
 
 MACRO: call-random-weighted ( exp -- )
   [ keys ] [ values <enum> >alist ] bi
-  '[ , random-weighted , case ] ;
+  '[ _ random-weighted _ case ] ;
index 8e9f0e25522e75de0015666e018c22ea04793ed5..dc764fd040b6894a3121b1b425479345dc9f36e7 100755 (executable)
@@ -1,6 +1,5 @@
 USING: kernel math sequences namespaces
-math.miller-rabin combinators.lib
-math.functions accessors random ;
+math.miller-rabin math.functions accessors random ;
 IN: random.blum-blum-shub
 
 ! Blum Blum Shub, n = pq, x_i+1 = x_i ^ 2 mod n
@@ -9,8 +8,12 @@ TUPLE: blum-blum-shub x n ;
 
 <PRIVATE
 
+: generate-bbs-prime ( numbits -- p )
+    dup random-prime dup 4 mod 3 =
+    [ nip ] [ drop generate-bbs-prime ] if ;
+
 : generate-bbs-primes ( numbits -- p q )
-    [ [ random-prime ] curry [ 4 mod 3 = ] generate ] dup bi ;
+    [ generate-bbs-prime ] [ generate-bbs-prime ] bi ;
 
 : next-bbs-bit ( bbs -- bit )
     dup [ x>> 2 ] [ n>> ] bi ^mod [ >>x drop ] [ 1 bitand ] bi ;
diff --git a/extra/raptor/authors.txt b/extra/raptor/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/extra/raptor/config.factor b/extra/raptor/config.factor
deleted file mode 100644 (file)
index 29e26d4..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-
-USING: namespaces threads
-       unix.process unix.linux.if unix.linux.ifreq unix.linux.route
-       raptor.cron ;
-
-IN: raptor
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! Networking
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: configure-lo ( -- )
-  "lo" "127.0.0.1"      set-if-addr
-  "lo" { IFF_UP } flags set-if-flags ;
-
-: configure-eth1 ( -- )
-  "eth1" "192.168.1.10"                 set-if-addr
-  "eth1" { IFF_UP IFF_MULTICAST } flags set-if-flags ;
-
-: configure-route ( -- )
-  "0.0.0.0" "192.168.1.1" "0.0.0.0" { RTF_UP RTF_GATEWAY } flags route ;
-
-[
-  configure-lo
-  configure-eth1
-  configure-route
-] networking-hook set-global
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! Filesystems
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-"/dev/hda1"     root-device     set-global
-
-{ "/dev/hda5" } swap-devices   set-global
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! boot-hook
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-[
-                                    start-wait-loop
-
-  ! rcS.d
-
-  "mountvirtfs"                     start-service
-
-  ! "hostname.sh"                          start-service
-  "narodnik"                        set-hostname
-
-  "keymap.sh"                      start-service
-  "linux-restricted-modules-common" start-service
-  "udev"                            start-service
-  "mountdevsubfs"                  start-service
-  "module-init-tools"              start-service
-  "procps.sh"                      start-service
-
-  !  "checkroot.sh"                start-service
-
-                                   activate-swap
-                                   mount-root
-
-  "mtab"                           start-service
-  "checkfs.sh"                             start-service
-  "mountall.sh"                            start-service
-
-                                   start-networking
-!   "loopback" start-service
-!   "networking" start-service
-
-  "hwclock.sh"                     start-service
-  "displayconfig-hwprobe.py"       start-service
-  "screen"                         start-service
-  "x11-common"                     start-service
-  "bootmisc.sh"                            start-service
-  "urandom"                        start-service
-
-  ! rc2.d
-
-  "vbesave"                        start-service
-  "acpid"                          start-service
-  "powernowd.early"                start-service
-  "sysklogd"                       start-service
-  "klogd"                          start-service
-  "dbus"                           start-service
-  "apmd"                           start-service
-  "hotkey-setup"                   start-service
-  "laptop-mode"                            start-service
-  "makedev"                        start-service
-  "nvidia-kernel"                  start-service
-  "postfix"                        start-service
-  "powernowd"                      start-service
-  "ntp-server"                     start-service
-  "binfmt-support"                 start-service
-  "acpi-support"                   start-service
-  "rc.local"                       start-service
-  "rmnologin"                      start-service
-
-                                   schedule-cron-jobs
-
-  [ [ "/dev/tty2" tty-listener ] forever ] in-thread
-  [ [ "/dev/tty3" tty-listener ] forever ] in-thread
-  [ [ "/dev/tty4" tty-listener ] forever ] in-thread
-  [ [ "/dev/tty5" getty        ] forever ] in-thread
-  [ [ "/dev/tty6" getty        ] forever ] in-thread
-
-] boot-hook set-global
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! reboot-hook
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-[
-  "acpi-support"                   stop-service
-  "apmd"                           stop-service
-  "dbus"                           stop-service
-  "hotkey-setup"                   stop-service
-  "laptop-mode"                    stop-service
-  "makedev"                        stop-service
-  "nvidia-kernel"                  stop-service
-  "powernowd"                      stop-service
-  "acpid"                          stop-service
-  "hwclock.sh"                             stop-service
-  "alsa-utils"                             stop-service
-  "klogd"                          stop-service
-  "binfmt-support"                 stop-service
-  "sysklogd"                        stop-service
-  "linux-restricted-modules-common" stop-service
-  "sendsigs"                       stop-service
-  "urandom"                        stop-service
-  "umountnfs.sh"                   stop-service
-  "networking"                             stop-service
-  "umountfs"                       stop-service
-  "umountroot"                             stop-service
-  "reboot"                         stop-service
-] reboot-hook set-global
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! shutdown-hook
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-[
-  "acpi-support"                   stop-service
-  "apmd"                           stop-service
-  "dbus"                           stop-service
-  "hotkey-setup"                   stop-service
-  "laptop-mode"                    stop-service
-  "makedev"                        stop-service
-  "nvidia-kernel"                  stop-service
-  "postfix"                        stop-service
-  "powernowd"                      stop-service
-  "acpid"                          stop-service
-  "hwclock.sh"                             stop-service
-  "alsa-utils"                             stop-service
-  "klogd"                          stop-service
-  "binfmt-support"                 stop-service
-  "sysklogd"                       stop-service
-  "linux-restricted-modules-common" stop-service
-  "sendsigs"                       stop-service
-  "urandom"                        stop-service
-  "umountnfs.sh"                   stop-service
-  "umountfs"                       stop-service
-  "umountroot"                             stop-service
-  "halt"                           stop-service
-] shutdown-hook set-global
\ No newline at end of file
diff --git a/extra/raptor/cron/authors.txt b/extra/raptor/cron/authors.txt
deleted file mode 100755 (executable)
index 6cfd5da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Eduardo Cavazos
diff --git a/extra/raptor/cron/cron.factor b/extra/raptor/cron/cron.factor
deleted file mode 100755 (executable)
index d818fb4..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-
-USING: kernel namespaces threads sequences calendar
-       combinators.lib debugger ;
-
-IN: raptor.cron
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-TUPLE: when minute hour day-of-month month day-of-week ;
-
-C: <when> when
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: slot-match? ( now-slot when-slot -- ? ) dup f = [ 2drop t ] [ member? ] if ;
-
-: minute-match? ( now when -- ? )
-  [ timestamp-minute ] [ when-minute ] bi* slot-match? ;
-
-: hour-match? ( now when -- ? )
-  [ timestamp-hour ] [ when-hour ] bi* slot-match? ;
-
-: day-of-month-match? ( now when -- ? )
-  [ timestamp-day ] [ when-day-of-month ] bi* slot-match? ;
-
-: month-match? ( now when -- ? )
-  [ timestamp-month ] [ when-month ] bi* slot-match? ;
-
-: day-of-week-match? ( now when -- ? )
-  [ day-of-week ] [ when-day-of-week ] bi* slot-match? ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: when=now? ( when -- ? )
-  now swap
-  { [ minute-match? ]
-    [ hour-match? ]
-    [ day-of-month-match? ]
-    [ month-match? ]
-    [ day-of-week-match? ] }
-  <--&& ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: recurring-job ( when quot -- )
-  [ swap when=now? [ try ] [ drop ] if 60000 sleep ] [ recurring-job ] 2bi ;
-
-: schedule ( when quot -- ) [ recurring-job ] 2curry in-thread ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: cron-jobs-hourly
-SYMBOL: cron-jobs-daily
-SYMBOL: cron-jobs-weekly
-SYMBOL: cron-jobs-monthly
-
-: schedule-cron-jobs ( -- )
-  { 17 } f f f f         <when> [ cron-jobs-hourly  get call ] schedule
-  { 25 } { 6 } f f f     <when> [ cron-jobs-daily   get call ] schedule
-  { 47 } { 6 } f f { 7 } <when> [ cron-jobs-weekly  get call ] schedule
-  { 52 } { 6 } { 1 } f f <when> [ cron-jobs-monthly get call ] schedule ;
-
diff --git a/extra/raptor/cron/tags.txt b/extra/raptor/cron/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
diff --git a/extra/raptor/cronjobs.factor b/extra/raptor/cronjobs.factor
deleted file mode 100644 (file)
index 436fb85..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-USING: kernel namespaces threads arrays sequences
-       raptor raptor.cron ;
-
-IN: raptor
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-[
-    "/etc/cron.daily/apt"             fork-exec-arg
-    "/etc/cron.daily/aptitude"       fork-exec-arg
-    "/etc/cron.daily/bsdmainutils"    fork-exec-arg
-    "/etc/cron.daily/find.notslocate" fork-exec-arg
-    "/etc/cron.daily/logrotate"              fork-exec-arg
-    "/etc/cron.daily/man-db"         fork-exec-arg
-    "/etc/cron.daily/ntp-server"      fork-exec-arg
-    "/etc/cron.daily/slocate"        fork-exec-arg
-    "/etc/cron.daily/standard"       fork-exec-arg
-    "/etc/cron.daily/sysklogd"       fork-exec-arg
-    "/etc/cron.daily/tetex-bin"              fork-exec-arg
-] cron-jobs-daily set-global
-    
-[
-  "/etc/cron.weekly/cvs"                fork-exec-arg
-  "/etc/cron.weekly/man-db"            fork-exec-arg
-  "/etc/cron.weekly/ntp-server"                fork-exec-arg
-  "/etc/cron.weekly/popularity-contest" fork-exec-arg
-  "/etc/cron.weekly/sysklogd"          fork-exec-arg
-] cron-jobs-weekly set-global
-
-[
-  "/etc/cron.monthly/scrollkeeper" fork-exec-arg
-  "/etc/cron.monthly/standard"     fork-exec-arg
-] cron-jobs-monthly set-global
\ No newline at end of file
diff --git a/extra/raptor/raptor.factor b/extra/raptor/raptor.factor
deleted file mode 100755 (executable)
index c0605fe..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-
-USING: kernel parser namespaces threads arrays sequences unix unix.process
-       bake ;
-
-IN: raptor
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SYMBOL: boot-hook
-SYMBOL: reboot-hook
-SYMBOL: shutdown-hook
-SYMBOL: networking-hook
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: reload-raptor-config ( -- )
-  "/etc/raptor/config.factor" run-file
-  "/etc/raptor/cronjobs.factor" run-file ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: fork-exec-wait ( pathname args -- )
-  fork dup 0 = [ drop exec drop ] [ 2nip wait-for-pid drop ] if ;
-
-: fork-exec-args-wait ( args -- ) [ first ] [ ] bi fork-exec-wait ;
-
-: fork-exec-arg ( arg -- ) 1array [ fork-exec-args-wait ] curry in-thread ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: forever ( quot -- ) [ call ] [ forever ] bi ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: start-service ( name -- ) "/etc/init.d/" " start" surround system drop ;
-: stop-service  ( name -- ) "/etc/init.d/" " stop"  surround system drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: getty ( tty -- ) `{ "/sbin/getty" "38400" , } fork-exec-args-wait ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-USING: io io.files io.streams.lines io.streams.plain io.streams.duplex
-       listener io.encodings.utf8 ;
-
-: tty-listener ( tty -- )
-  dup utf8 <file-reader> [
-    swap utf8 <file-writer> [
-      <duplex-stream> [
-        listener
-      ] with-stream
-    ] with-disposal
-  ] with-disposal ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-USING: unix.linux.swap unix.linux.fs ;
-
-SYMBOL: root-device
-SYMBOL: swap-devices
-
-: activate-swap ( -- ) swap-devices get [ 0 swapon drop ] each ;
-
-: mount-root ( -- ) root-device get "/" "ext3" MS_REMOUNT f mount drop ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: start-networking ( -- ) networking-hook  get call ;
-
-: set-hostname ( name -- ) `{ "/bin/hostname" , } fork-exec-args-wait ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: boot     ( -- ) boot-hook     get call ;
-: reboot   ( -- ) reboot-hook   get call ;
-: shutdown ( -- ) shutdown-hook get call ;
-
-MAIN: boot
-
diff --git a/extra/raptor/readme b/extra/raptor/readme
deleted file mode 100644 (file)
index dfb6890..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-
-Raptor Linux
-
-*** Introduction ***
-
-Raptor Linux is a mod of Ubuntu 6.06 (Dapper Drake)
-
-This is unlikely to work on another version of Ubuntu, much less
-another Linux distribution.
-
-*** Features ***
-
-  * /sbin/init is replaced with Factor
-  * Virtual terminals managed by Factor
-  * Listeners run on virtual terminals
-  * Native support for static ip networking
-  * Crontab replacement
-
-*** Install ***
-
-  # mkdir -v /etc/raptor
-
-  # cp -v /scratch/factor/extra/raptor/{config,cronjobs}.factor /etc/raptor
-
-  ( scratchpad ) USE: raptor
-  ( scratchpad ) reload-raptor-config
-  ( scratchpad ) save
-
-  # mv -v /sbin/{init,init.orig}
-
-  # cp -v /scratch/factor/factor /sbin/init
-
-  # cp -v /scratch/factor/factor.image /sbin/init.image
-
-*** Filesystems ***
-
-  # emacs /etc/raptor/config.factor
-
-Edit the root-device and swap-devices variables.
-
-*** Static IP networking ***
-
-If you use a static IP in your network then Factor can take care of
-networking.
-
-  # emacs /etc/raptor/config.factor
-
-  (change the settings accordingly)
-
-The udev system has a hook to bring up ethernet interfaces when they
-are detected. Let's remove this hook since we'll be bringing up the
-interface. Actually, we'll move it, not delete it.
-
-  # mv -v /etc/udev/rules.d/85-ifupdown.rules /root
-
-*** DHCP networking ***
-
-If you're using dhcp then we'll fall back on what Ubuntu offers. In
-your config.factor change the line :
-
-     start-networking
-
-to
-
-       "loopback"   start-service
-       "networking" start-service
-
-Add these to your reboot-hook and shutdown-hook :
-
-       "loopback"   stop-service
-       "networking" stop-service
-
-*** Editing the hooks ***
-
-The items in boot-hook correspond to the things in '/etc/rcS.d' and
-'/etc/rc2.d'. Feel free to add and remove items from that hook. For
-example, I removed the printer services. I also removed other things
-that I didn't feel were necessary on my system.
-
-Look for the line with the call to 'set-hostname' and edit it appropriately.
-
-*** Grub ***
-
-Edit your '/boot/grub/menu.lst'. Basically, copy and paste your
-current good entry. My default entry is this:
-
-title           Ubuntu, kernel 2.6.15-28-686
-root            (hd0,0)
-kernel          /boot/vmlinuz-2.6.15-28-686 root=/dev/hda1 ro quiet splash
-initrd          /boot/initrd.img-2.6.15-28-686
-savedefault
-boot
-
-I pasted a copy above it and edited it to look like this:
-
-title           Raptor, kernel 2.6.15-28-686
-root            (hd0,0)
-kernel          /boot/vmlinuz-2.6.15-28-686 root=/dev/hda1 ro quiet -run=ubuntu.dapper.boot
-initrd          /boot/initrd.img-2.6.15-28-686
-savedefault
-boot
-
-* Note that I removed the 'splash' kernel option
-
-* Note the '-run=ubuntu.dapper.boot' option. Unfortunately, this isn't
-  working yet...
-
-*** Boot ***
-
-Reboot or turn on your computer. Eventually, hopefully, you'll be at a
-Factor prompt. Boot your system:
-
-  ( scratchpad ) boot
-
-You'll probably be prompted to select a vocab. Select 'raptor'.
-
-*** Now what ***
-
-The virtual consoles are allocated like so:
-
-  1 - Main listener console
-  2 - listener
-  3 - listener
-  4 - listener
-  5 - getty
-  6 - getty
-
-So you're next step might be to alt-f5, login, and run startx.
-
-*** Join the fun ***
-
-Take a loot at what happens during run levels S and 2. Implement a
-Factor version of something. Let me know about it.
-
diff --git a/extra/raptor/tags.txt b/extra/raptor/tags.txt
deleted file mode 100644 (file)
index 6bf6830..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unportable
index 6a547ead24a3a1c9569c663794c45c65f7dc5ee6..1ce7f9c726cf4b5d426d0a5868ca6302bef444d2 100755 (executable)
@@ -3,7 +3,7 @@
 USING: accessors assocs math kernel shuffle generalizations\r
 words quotations arrays combinators sequences math.vectors\r
 io.styles prettyprint vocabs sorting io generic\r
-math.statistics math.order combinators.lib locals.types\r
+math.statistics math.order locals.types\r
 locals.definitions ;\r
 IN: reports.noise\r
 \r
@@ -21,19 +21,14 @@ IN: reports.noise
         { 2over 4 }\r
         { 2slip 2 }\r
         { 2swap 3 }\r
-        { 2with 2 }\r
-        { 2with* 3 }\r
         { 3curry 2 }\r
         { 3drop 1 }\r
         { 3dup 2 }\r
         { 3keep 3 }\r
         { 3nip 4 }\r
         { 3slip 3 }\r
-        { 3with 3 }\r
-        { 3with* 4 }\r
         { 4drop 2 }\r
         { 4dup 3 }\r
-        { 4slip 4 }\r
         { compose 1/2 }\r
         { curry 1/3 }\r
         { dip 1 }\r
@@ -74,9 +69,6 @@ IN: reports.noise
         { tuck 2 }\r
         { tuckd 4 }\r
         { with 1/2 }\r
-        { with* 2 }\r
-        { r> 1 }\r
-        { >r 1 }\r
 \r
         { bi 1/2 }\r
         { tri 1 }\r
@@ -113,18 +105,18 @@ M: array noise [ noise ] map vsum ;
     #! For very short words, noise doesn't count so much\r
     #! (so dup foo swap bar isn't penalized as badly).\r
     noise first2 {\r
-        { [ over 4 <= ] [ >r drop 0 r> ] }\r
-        { [ over 15 >= ] [ >r 2 * r> ] }\r
+        { [ over 4 <= ] [ [ drop 0 ] dip ] }\r
+        { [ over 15 >= ] [ [ 2 * ] dip ] }\r
         [ ]\r
     } cond\r
     {\r
         ! short words are easier to read\r
-        { [ dup 10 <= ] [ >r 2 / r> ] }\r
-        { [ dup 5 <= ] [ >r 3 / r> ] }\r
+        { [ dup 10 <= ] [ [ 2 / ] dip ] }\r
+        { [ dup 5 <= ] [ [ 3 / ] dip ] }\r
         ! long words are penalized even more\r
-        { [ dup 25 >= ] [ >r 2 * r> 20 max ] }\r
-        { [ dup 20 >= ] [ >r 5/3 * r> ] }\r
-        { [ dup 15 >= ] [ >r 3/2 * r> ] }\r
+        { [ dup 25 >= ] [ [ 2 * ] dip 20 max ] }\r
+        { [ dup 20 >= ] [ [ 5/3 * ] dip ] }\r
+        { [ dup 15 >= ] [ [ 3/2 * ] dip ] }\r
         [ ]\r
     } cond noise-factor ;\r
 \r
index 6d11c9d41c7ee4df3dbb18b60cf891b21df37c99..41e3d36c61e8e904011848c0e4ab68dadc64ac78 100644 (file)
@@ -1,6 +1,5 @@
 
-USING: kernel parser math quotations namespaces sequences macros
-bake bake.fry ;
+USING: kernel parser math quotations namespaces sequences macros fry ;
 
 IN: rewrite-closures
 
@@ -12,12 +11,12 @@ MACRO: set-parameters ( seq -- quot ) [set-parameters] ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: parametric-quot ( parameters quot -- quot ) '[ , set-parameters , call ] ;
+: parametric-quot ( parameters quot -- quot ) '[ _ set-parameters _ call ] ;
 
-: scoped-quot ( quot -- quot ) '[ , with-scope ] ;
+: scoped-quot ( quot -- quot ) '[ _ with-scope ] ;
 
 : closed-quot ( quot -- quot )
-  namestack swap '[ namestack [ , set-namestack @ ] dip set-namestack ] ;
+  namestack swap '[ namestack [ _ set-namestack @ ] dip set-namestack ] ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
diff --git a/extra/roman/authors.txt b/extra/roman/authors.txt
deleted file mode 100644 (file)
index 7c1b2f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
diff --git a/extra/roman/roman-docs.factor b/extra/roman/roman-docs.factor
deleted file mode 100644 (file)
index 4a8197f..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-! Copyright (C) 2008 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: help.markup help.syntax kernel math ;
-IN: roman
-
-HELP: >roman
-{ $values { "n" "an integer" } { "str" "a string" } }
-{ $description "Converts a number to its lower-case Roman Numeral equivalent." }
-{ $notes "The range for this word is 1-3999, inclusive." }
-{ $examples 
-    { $example "USING: io roman ;"
-               "56 >roman print"
-               "lvi"
-    }
-} ;
-
-HELP: >ROMAN
-{ $values { "n" "an integer" } { "str" "a string" } }
-{ $description "Converts a number to its upper-case Roman numeral equivalent." }
-{ $notes "The range for this word is 1-3999, inclusive." }
-{ $examples 
-    { $example "USING: io roman ;"
-               "56 >ROMAN print"
-               "LVI"
-    }
-} ;
-
-HELP: roman>
-{ $values { "str" "a string" } { "n" "an integer" } }
-{ $description "Converts a Roman numeral to an integer." }
-{ $notes "The range for this word is i-mmmcmxcix, inclusive." }
-{ $examples 
-    { $example "USING: prettyprint roman ;"
-               "\"lvi\" roman> ."
-               "56"
-    }
-} ;
-
-{ >roman >ROMAN roman> } related-words
-
-HELP: roman+
-{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } }
-{ $description "Adds two Roman numerals." }
-{ $examples 
-    { $example "USING: io roman ;"
-               "\"v\" \"v\" roman+ print"
-               "x"
-    }
-} ;
-
-HELP: roman-
-{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } }
-{ $description "Subtracts two Roman numerals." }
-{ $examples 
-    { $example "USING: io roman ;"
-               "\"x\" \"v\" roman- print"
-               "v"
-    }
-} ;
-
-{ roman+ roman- } related-words
-
-HELP: roman*
-{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } }
-{ $description "Multiplies two Roman numerals." }
-{ $examples 
-    { $example "USING: io roman ;"
-        "\"ii\" \"iii\" roman* print"
-        "vi"
-    }
-} ;
-
-HELP: roman/i
-{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } }
-{ $description "Computes the integer division of two Roman numerals." }
-{ $examples 
-    { $example "USING: io roman ;"
-        "\"v\" \"iv\" roman/i print"
-        "i"
-    }
-} ;
-
-HELP: roman/mod
-{ $values { "str1" "a string" } { "str2" "a string" } { "str3" "a string" } { "str4" "a string" } }
-{ $description "Computes the quotient and remainder of two Roman numerals." }
-{ $examples 
-    { $example "USING: kernel io roman ;"
-        "\"v\" \"iv\" roman/mod [ print ] bi@"
-        "i\ni"
-    }
-} ;
-
-{ roman* roman/i roman/mod } related-words
-
-HELP: ROMAN:
-{ $description "A parsing word that reads the next token and converts it to an integer." }
-{ $examples 
-    { $example "USING: prettyprint roman ;"
-               "ROMAN: v ."
-               "5"
-    }
-} ;
-
-ARTICLE: "roman" "Roman numerals"
-"The " { $vocab-link "roman" } " vocabulary can convert numbers to and from the Roman numeral system and can perform arithmetic given Roman numerals as input." $nl
-"A parsing word for literal Roman numerals:"
-{ $subsection POSTPONE: ROMAN: }
-"Converting to Roman numerals:"
-{ $subsection >roman }
-{ $subsection >ROMAN }
-"Converting Roman numerals to integers:"
-{ $subsection roman> }
-"Roman numeral arithmetic:"
-{ $subsection roman+ }
-{ $subsection roman- }
-{ $subsection roman* }
-{ $subsection roman/i }
-{ $subsection roman/mod } ;
-
-ABOUT: "roman"
diff --git a/extra/roman/roman-tests.factor b/extra/roman/roman-tests.factor
deleted file mode 100644 (file)
index 82084e0..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-USING: arrays kernel math roman roman.private sequences tools.test ;
-
-[ "i" ] [ 1 >roman ] unit-test
-[ "ii" ] [ 2 >roman ] unit-test
-[ "iii" ] [ 3 >roman ] unit-test
-[ "iv" ] [ 4 >roman ] unit-test
-[ "v" ] [ 5 >roman ] unit-test
-[ "vi" ] [ 6 >roman ] unit-test
-[ "vii" ] [ 7 >roman ] unit-test
-[ "viii" ] [ 8 >roman ] unit-test
-[ "ix" ] [ 9 >roman ] unit-test
-[ "x" ] [ 10 >roman ] unit-test
-[ "mdclxvi" ] [ 1666 >roman ] unit-test
-[ "mmmcdxliv" ] [ 3444 >roman ] unit-test
-[ "mmmcmxcix" ] [ 3999 >roman ] unit-test
-[ "MMMCMXCIX" ] [ 3999 >ROMAN ] unit-test
-[ 3999 ] [ 3999 >ROMAN roman> ] unit-test
-[ 1 ] [ 1 >roman roman> ] unit-test
-[ 2 ] [ 2 >roman roman> ] unit-test
-[ 3 ] [ 3 >roman roman> ] unit-test
-[ 4 ] [ 4 >roman roman> ] unit-test
-[ 5 ] [ 5 >roman roman> ] unit-test
-[ 6 ] [ 6 >roman roman> ] unit-test
-[ 7 ] [ 7 >roman roman> ] unit-test
-[ 8 ] [ 8 >roman roman> ] unit-test
-[ 9 ] [ 9 >roman roman> ] unit-test
-[ 10 ] [ 10 >roman roman> ] unit-test
-[ 1666 ] [ 1666 >roman roman> ] unit-test
-[ 3444 ] [ 3444 >roman roman> ] unit-test
-[ 3999 ] [ 3999 >roman roman> ] unit-test
-[ 0 >roman ] must-fail
-[ 4000 >roman ] must-fail
-[ "vi" ] [ "iii" "iii"  roman+ ] unit-test
-[ "viii" ] [ "x" "ii"  roman- ] unit-test
-[ "ix" ] [ "iii" "iii"  roman* ] unit-test
-[ "i" ] [ "iii" "ii" roman/i ] unit-test
-[ "i" "ii" ] [ "v" "iii"  roman/mod ] unit-test
-[ "iii" "iii"  roman- ] must-fail
-
-[ 30 ] [ ROMAN: xxx ] unit-test
diff --git a/extra/roman/roman.factor b/extra/roman/roman.factor
deleted file mode 100644 (file)
index 5ffdf67..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-! Copyright (C) 2007 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: arrays assocs kernel math math.order math.vectors
-namespaces make quotations sequences sequences.lib
-sequences.private strings unicode.case lexer parser ;
-IN: roman
-
-<PRIVATE
-
-: roman-digits ( -- seq )
-    { "m" "cm" "d" "cd" "c" "xc" "l" "xl" "x" "ix" "v" "iv" "i" } ;
-
-: roman-values ( -- seq )
-    { 1000 900 500 400 100 90 50 40 10 9 5 4 1 } ;
-
-ERROR: roman-range-error n ;
-
-: roman-range-check ( n -- )
-    dup 1 3999 between? [ drop ] [ roman-range-error ] if ;
-
-: roman<= ( ch1 ch2 -- ? )
-    [ 1string roman-digits index ] bi@ >= ;
-
-: roman>n ( ch -- n )
-    1string roman-digits index roman-values nth ;
-
-: (>roman) ( n -- )
-    roman-values roman-digits [
-        >r /mod swap r> <repetition> concat %
-    ] 2each drop ;
-
-: (roman>) ( seq -- n )
-    dup [ roman>n ] map swap all-eq? [
-        sum
-    ] [
-        first2 swap -
-    ] if ;
-
-PRIVATE>
-
-: >roman ( n -- str )
-    dup roman-range-check [
-        (>roman)
-    ] "" make ;
-
-: >ROMAN ( n -- str ) >roman >upper ;
-
-: roman> ( str -- n )
-    >lower [ roman<= ] monotonic-split [
-        (roman>)
-    ] map sum ;
-
-<PRIVATE
-
-: 2roman> ( str1 str2 -- m n )
-    [ roman> ] bi@ ;
-
-: binary-roman-op ( str1 str2 quot -- str3 )
-    >r 2roman> r> call >roman ; inline
-
-PRIVATE>
-
-: roman+ ( str1 str2 -- str3 )
-    [ + ] binary-roman-op ;
-
-: roman- ( str1 str2 -- str3 )
-    [ - ] binary-roman-op ;
-
-: roman* ( str1 str2 -- str3 )
-    [ * ] binary-roman-op ;
-
-: roman/i ( str1 str2 -- str3 )
-    [ /i ] binary-roman-op ;
-
-: roman/mod ( str1 str2 -- str3 str4 )
-    [ /mod ] binary-roman-op >r >roman r> ;
-
-: ROMAN: scan roman> parsed ; parsing
diff --git a/extra/roman/summary.txt b/extra/roman/summary.txt
deleted file mode 100644 (file)
index f6d018c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Roman numerals library
diff --git a/extra/roman/tags.txt b/extra/roman/tags.txt
deleted file mode 100644 (file)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
index 643f8852d936ef03333452371a5c561222eec92c..26f73d49386d28b406086e1dc7d0be90da9b8e1a 100644 (file)
@@ -7,6 +7,4 @@ VAR: self
 
 : with-self ( quot obj -- ) [ >self call ] with-scope ;
 
-: save-self ( quot -- ) self> >r self> clone >self call r> >self ;
-
-! : save-self ( quot -- ) [ self> clone >self call ] with-scope ;
\ No newline at end of file
+: save-self ( quot -- ) self> [ self> clone >self call ] dip >self ;
diff --git a/extra/sequences/complex-components/authors.txt b/extra/sequences/complex-components/authors.txt
deleted file mode 100644 (file)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/sequences/complex-components/complex-components-docs.factor b/extra/sequences/complex-components/complex-components-docs.factor
deleted file mode 100644 (file)
index 386735a..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-USING: help.markup help.syntax math multiline
-sequences sequences.complex-components ;
-IN: sequences.complex-components
-
-ARTICLE: "sequences.complex-components" "Complex component virtual sequences"
-"The " { $link complex-components } " class wraps a sequence of " { $link complex } " number values, presenting a sequence of " { $link real } " values made by interleaving the real and imaginary parts of the complex values in the original sequence."
-{ $subsection complex-components }
-{ $subsection <complex-components> } ;
-
-ABOUT: "sequences.complex-components"
-
-HELP: complex-components
-{ $class-description "Sequence wrapper class that transforms a sequence of " { $link complex } " number values into a sequence of " { $link real } " values, interleaving the real and imaginary parts of the complex values in the original sequence." }
-{ $examples { $example <"
-USING: prettyprint sequences arrays sequences.complex-components ;
-{ C{ 1.0 -1.0 } -2.0 C{ 3.0 1.0 } } <complex-components> >array .
-"> "{ 1.0 -1.0 -2.0 0 3.0 1.0 }" } } ;
-
-HELP: <complex-components>
-{ $values { "sequence" sequence } { "complex-components" complex-components } }
-{ $description "Wraps " { $snippet "sequence" } " in a " { $link complex-components } " wrapper." }
-{ $examples
-{ $example <"
-USING: prettyprint sequences arrays
-sequences.complex-components ;
-{ C{ 1.0 -1.0 } -2.0 C{ 3.0 1.0 } } <complex-components> third .
-"> "-2.0" }
-{ $example <"
-USING: prettyprint sequences arrays
-sequences.complex-components ;
-{ C{ 1.0 -1.0 } -2.0 C{ 3.0 1.0 } } <complex-components> fourth .
-"> "0" }
-} ;
-
-{ complex-components <complex-components> } related-words
diff --git a/extra/sequences/complex-components/complex-components-tests.factor b/extra/sequences/complex-components/complex-components-tests.factor
deleted file mode 100644 (file)
index f0c8e92..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-USING: sequences.complex-components
-kernel sequences tools.test arrays accessors ;
-IN: sequences.complex-components.tests
-
-: test-array ( -- x )
-    { C{ 1.0 2.0 } 3.0 C{ 5.0 6.0 } } <complex-components> ;
-
-[ 6 ] [ test-array length ] unit-test
-
-[ 1.0 ] [ test-array first  ] unit-test
-[ 2.0 ] [ test-array second ] unit-test
-[ 3.0 ] [ test-array third  ] unit-test
-[ 0   ] [ test-array fourth ] unit-test
-
-[ { 1.0 2.0 3.0 0 5.0 6.0 } ] [ test-array >array ] unit-test
-
diff --git a/extra/sequences/complex-components/complex-components.factor b/extra/sequences/complex-components/complex-components.factor
deleted file mode 100644 (file)
index ae80897..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-USING: accessors kernel math math.functions combinators
-sequences sequences.private ;
-IN: sequences.complex-components
-
-TUPLE: complex-components seq ;
-INSTANCE: complex-components sequence
-
-: <complex-components> ( sequence -- complex-components )
-    complex-components boa ; inline
-
-<PRIVATE
-
-: complex-components@ ( n seq -- remainder n' seq' )
-    [ [ 1 bitand ] [ -1 shift ] bi ] [ seq>> ] bi* ; inline
-: complex-component ( remainder complex -- component )
-    swap {
-        { 0 [ real-part ] }
-        { 1 [ imaginary-part ] }
-    } case ;
-
-PRIVATE>
-
-M: complex-components length
-    seq>> length 1 shift ;
-M: complex-components nth-unsafe
-    complex-components@ nth-unsafe complex-component ;
-M: complex-components set-nth-unsafe
-    immutable ;
diff --git a/extra/sequences/complex-components/summary.txt b/extra/sequences/complex-components/summary.txt
deleted file mode 100644 (file)
index af00158..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Virtual sequence wrapper to convert complex values into real value pairs
diff --git a/extra/sequences/complex-components/tags.txt b/extra/sequences/complex-components/tags.txt
deleted file mode 100644 (file)
index 64cdcd9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-sequences
-math
diff --git a/extra/sequences/complex/authors.txt b/extra/sequences/complex/authors.txt
deleted file mode 100644 (file)
index f13c9c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Joe Groff
diff --git a/extra/sequences/complex/complex-docs.factor b/extra/sequences/complex/complex-docs.factor
deleted file mode 100644 (file)
index 65dd520..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-USING: help.markup help.syntax math multiline
-sequences sequences.complex ;
-IN: sequences.complex
-
-ARTICLE: "sequences.complex" "Complex virtual sequences"
-"The " { $link complex-sequence } " class wraps a sequence of " { $link real } " number values, presenting a sequence of " { $link complex } " values made by treating the underlying sequence as pairs of alternating real and imaginary values."
-{ $subsection complex-sequence }
-{ $subsection <complex-sequence> } ;
-
-ABOUT: "sequences.complex"
-
-HELP: complex-sequence
-{ $class-description "Sequence wrapper class that transforms a sequence of " { $link real } " number values into a sequence of " { $link complex } " values, treating the underlying sequence as pairs of alternating real and imaginary values."  }
-{ $examples { $example <"
-USING: prettyprint
-specialized-arrays.double sequences.complex
-sequences arrays ;
-double-array{ 1.0 -1.0 -2.0 2.0 3.0 0.0 } <complex-sequence> >array .
-"> "{ C{ 1.0 -1.0 } C{ -2.0 2.0 } C{ 3.0 0.0 } }" } } ;
-
-HELP: <complex-sequence>
-{ $values { "sequence" sequence } { "complex-sequence" complex-sequence } }
-{ $description "Wraps " { $snippet "sequence" } " in a " { $link complex-sequence } "." }
-{ $examples { $example <"
-USING: prettyprint
-specialized-arrays.double sequences.complex
-sequences arrays ;
-double-array{ 1.0 -1.0 -2.0 2.0 3.0 0.0 } <complex-sequence> second .
-"> "C{ -2.0 2.0 }" } } ;
-
-{ complex-sequence <complex-sequence> } related-words
diff --git a/extra/sequences/complex/complex-tests.factor b/extra/sequences/complex/complex-tests.factor
deleted file mode 100644 (file)
index 5861bc8..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-USING: specialized-arrays.float sequences.complex
-kernel sequences tools.test arrays accessors ;
-IN: sequences.complex.tests
-
-: test-array ( -- x )
-    float-array{ 1.0 2.0 3.0 4.0 } clone <complex-sequence> ;
-: odd-length-test-array ( -- x )
-    float-array{ 1.0 2.0 3.0 4.0 5.0 } clone <complex-sequence> ;
-
-[ 2 ] [ test-array length ] unit-test
-[ 2 ] [ odd-length-test-array length ] unit-test
-
-[ C{ 1.0 2.0 } ] [ test-array first ] unit-test
-[ C{ 3.0 4.0 } ] [ test-array second ] unit-test
-
-[ { C{ 1.0 2.0 } C{ 3.0 4.0 } } ]
-[ test-array >array ] unit-test
-
-[ float-array{ 1.0 2.0 5.0 6.0 } ]
-[ test-array [ C{ 5.0 6.0 } 1 rot set-nth ] [ seq>> ] bi ]
-unit-test
-
-[ float-array{ 7.0 0.0 3.0 4.0 } ]
-[ test-array [ 7.0 0 rot set-nth ] [ seq>> ] bi ]
-unit-test
-
diff --git a/extra/sequences/complex/complex.factor b/extra/sequences/complex/complex.factor
deleted file mode 100644 (file)
index 93f9727..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-USING: accessors kernel math math.functions
-sequences sequences.private ;
-IN: sequences.complex
-
-TUPLE: complex-sequence seq ;
-INSTANCE: complex-sequence sequence
-
-: <complex-sequence> ( sequence -- complex-sequence )
-    complex-sequence boa ; inline
-
-<PRIVATE
-
-: complex@ ( n seq -- n' seq' )
-    [ 1 shift ] [ seq>> ] bi* ; inline
-
-PRIVATE>
-
-M: complex-sequence length
-    seq>> length -1 shift ;
-M: complex-sequence nth-unsafe
-    complex@ [ nth-unsafe ] [ [ 1+ ] dip nth-unsafe ] 2bi rect> ;
-M: complex-sequence set-nth-unsafe
-    complex@
-    [ [ real-part      ] [    ] [ ] tri* set-nth-unsafe ]
-    [ [ imaginary-part ] [ 1+ ] [ ] tri* set-nth-unsafe ] 3bi ;
diff --git a/extra/sequences/complex/summary.txt b/extra/sequences/complex/summary.txt
deleted file mode 100644 (file)
index d94c4ba..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Virtual sequence wrapper to convert real pairs into complex values
diff --git a/extra/sequences/complex/tags.txt b/extra/sequences/complex/tags.txt
deleted file mode 100644 (file)
index 64cdcd9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-sequences
-math
diff --git a/extra/sequences/lib/authors.txt b/extra/sequences/lib/authors.txt
deleted file mode 100644 (file)
index 07c1c4a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Eduardo Cavazos
-Doug Coleman
diff --git a/extra/sequences/lib/lib-docs.factor b/extra/sequences/lib/lib-docs.factor
deleted file mode 100755 (executable)
index e279230..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-USING: help.syntax help.markup kernel prettyprint sequences\r
-quotations math ;\r
-IN: sequences.lib\r
-\r
-HELP: map-withn\r
-{ $values { "seq" sequence } { "quot" quotation } { "n" number } { "newseq" sequence } }\r
-{ $description "A generalisation of " { $link map } ". The first " { $snippet "n" } " items after the quotation will be "\r
-"passed to the quotation given to map-withn for each element in the sequence."\r
-} \r
-{ $examples\r
-  { $example "USING: math sequences.lib prettyprint ;" "1 2 3 4 { 6 7 8 9 10 } [ + + + + ] 4 map-withn .s" "{ 16 17 18 19 20 }" }\r
-}\r
-{ $see-also each-withn } ;\r
-\r
-HELP: each-withn\r
-{ $values { "seq" sequence } { "quot" quotation } { "n" number } }\r
-{ $description "A generalisation of " { $link each } ". The first " { $snippet "n" } " items after the quotation will be "\r
-"passed to the quotation given to each-withn for each element in the sequence."\r
-} \r
-{ $see-also map-withn } ;\r
-\r
-HELP: randomize\r
-{ $values { "seq" sequence } { "seq'" sequence } }\r
-{ $description "Shuffle the elements in the sequence randomly, returning the new sequence." } ;\r
-\r
-HELP: enumerate\r
-{ $values { "seq" sequence } { "seq'" sequence } }\r
-{ $description "Returns a new sequence where each element is an array of { index, value }" } ;\r
-\r
diff --git a/extra/sequences/lib/lib-tests.factor b/extra/sequences/lib/lib-tests.factor
deleted file mode 100755 (executable)
index 509d9b1..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-USING: arrays kernel sequences sequences.lib math math.functions math.ranges
-    tools.test strings ;
-IN: sequences.lib.tests
-
-[ 1 2 { 3 4 } [ + + drop ] 2 each-withn  ] must-infer
-{ 13 } [ 1 2 { 3 4 } [ + + ] 2 each-withn + ] unit-test
-
-[ 1 2 { 3 4 } [ + + ] 2 map-withn ] must-infer
-{ { 6 7 } } [ 1 2 { 3 4 } [ + + ] 2 map-withn ] unit-test
-{ { 16 17 18 19 20 } } [ 1 2 3 4 { 6 7 8 9 10 } [ + + + + ] 4 map-withn ] unit-test
-[ { 910 911 912 } ] [ 10 900 3 [ + + ] map-with2 ] unit-test
-
-[ 10 ] [ { 1 2 3 4 } [ + ] reduce* ] unit-test
-[ 24 ] [ { 1 2 3 4 } [ * ] reduce* ] unit-test
-
-[ -4 ] [ 1 -4 [ abs ] higher ] unit-test
-[ 1 ] [ 1 -4 [ abs ] lower ] unit-test
-
-[ { 1 2 3 4 } ] [ { { 1 2 3 4 } { 1 2 3 } } longest ] unit-test
-[ { 1 2 3 4 } ] [ { { 1 2 3 } { 1 2 3 4 } } longest ] unit-test
-
-[ { 1 2 3 } ] [ { { 1 2 3 4 } { 1 2 3 } } shortest ] unit-test
-[ { 1 2 3 } ] [ { { 1 2 3 } { 1 2 3 4 } } shortest ] unit-test
-
-[ 3 ] [ 1 3 bigger ] unit-test
-[ 1 ] [ 1 3 smaller ] unit-test
-
-[ "abd" ] [ "abc" "abd" bigger ] unit-test
-[ "abc" ] [ "abc" "abd" smaller ] unit-test
-
-[ "abe" ] [ { "abc" "abd" "abe" } biggest ] unit-test
-[ "abc" ] [ { "abc" "abd" "abe" } smallest ] unit-test
-
-[ 1 3 ] [ { 1 2 3 } minmax ] unit-test
-[ -11 -9 ] [ { -11 -10 -9 } minmax ] unit-test
-[ -1/0. 1/0. ] [ { -1/0. 1/0. -11 -10 -9 } minmax ] unit-test
-
-[ { { 1 } { -1 5 } { 2 4 } } ]
-[ { 1 -1 5 2 4 } [ < ] monotonic-split [ >array ] map ] unit-test
-[ { { 1 1 1 1 } { 2 2 } { 3 } { 4 } { 5 } { 6 6 6 } } ]
-[ { 1 1 1 1 2 2 3 4 5 6 6 6 } [ = ] monotonic-split [ >array ] map ] unit-test
-
-[ { 1 9 25 } ] [ { 1 3 5 6 } [ sq ] [ even? ] map-until ] unit-test
-[ { 2 4 } ] [ { 2 4 1 3 } [ even? ] take-while ] unit-test
-
-[ { { 0 0 } { 1 0 } { 0 1 } { 1 1 } } ] [ 2 2 exact-strings ] unit-test
-[ t ] [ "ab" 4 strings [ >string ] map "abab" swap member? ] unit-test
-[ { { } { 1 } { 2 } { 1 2 } } ] [ { 1 2 } power-set ] unit-test
-
-[ 1 2 { 3 4 } [ + + ] 2 map-withn ] must-infer
-{ { 6 7 } } [ 1 2 { 3 4 } [ + + ] 2 map-withn ] unit-test
-{ { 16 17 18 19 20 } } [ 1 2 3 4 { 6 7 8 9 10 } [ + + + + ] 4 map-withn ] unit-test
-[ 1 2 { 3 4 } [ + + drop ] 2 each-withn  ] must-infer
-{ 13 } [ 1 2 { 3 4 } [ + + ] 2 each-withn + ] unit-test
-[ { 910 911 912 } ] [ 10 900 3 [ + + ] map-with2 ] unit-test
-
-[ { { 0 1 } { 1 2 } { 2 3 } } ] [ { 1 2 3 } enumerate ] unit-test
-
diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor
deleted file mode 100755 (executable)
index 72944c0..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-! Copyright (C) 2007 Slava Pestov, Chris Double, Doug Coleman,
-!                    Eduardo Cavazos, Daniel Ehrenberg.
-! See http://factorcode.org/license.txt for BSD license.
-USING: combinators.lib kernel sequences math namespaces make
-assocs random sequences.private shuffle math.functions arrays
-math.parser math.private sorting strings ascii macros assocs.lib
-quotations hashtables math.order locals generalizations
-math.ranges random fry ;
-IN: sequences.lib
-
-: each-withn ( seq quot n -- ) nwith each ; inline
-
-: each-with ( seq quot -- ) with each ; inline
-
-: each-with2 ( obj obj list quot -- ) 2 each-withn ; inline
-
-: map-withn ( seq quot n -- newseq ) nwith map ; inline
-
-: map-with ( seq quot -- ) with map ; inline
-
-: map-with2 ( obj obj list quot -- newseq ) 2 map-withn ; inline
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: each-percent ( seq quot -- )
-  [
-    dup length
-    dup [ / ] curry
-    [ 1+ ] prepose
-  ] dip compose
-  2each ;                       inline
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: reduce* ( seq quot -- result ) [ ] swap map-reduce ; inline
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: higher ( a b quot -- c ) [ compare +gt+ eq? ] curry most ; inline
-
-: lower  ( a b quot -- c ) [ compare +lt+ eq? ] curry most ; inline
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: longer  ( a b -- c ) [ length ] higher ;
-
-: shorter ( a b -- c ) [ length ] lower ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: longest ( seq -- item ) [ longer ] reduce* ;
-
-: shortest ( seq -- item ) [ shorter ] reduce* ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: bigger ( a b -- c ) [ ] higher ;
-
-: smaller ( a b -- c ) [ ] lower ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: biggest ( seq -- item ) [ bigger ] reduce* ;
-
-: smallest ( seq -- item ) [ smaller ] reduce* ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: minmax ( seq -- min max )
-    #! find the min and max of a seq in one pass
-    1/0. -1/0. rot [ tuck max [ min ] dip ] each ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: ,, ( obj -- ) building get peek push ;
-: v, ( -- ) V{ } clone , ;
-: ,v ( -- ) building get dup peek empty? [ dup pop* ] when drop ;
-
-: (monotonic-split) ( seq quot -- newseq )
-    [
-        [ dup unclip suffix ] dip
-        v, [ pick ,, call [ v, ] unless ] curry 2each ,v
-    ] { } make ;
-
-: monotonic-split ( seq quot -- newseq )
-    over empty? [ 2drop { } ] [ (monotonic-split) ] if ;
-
-ERROR: element-not-found ;
-: split-around ( seq quot -- before elem after )
-    dupd find over [ element-not-found ] unless
-    [ cut rest ] dip swap ; inline
-
-: map-until ( seq quot pred -- newseq )
-    '[ [ @ dup @ [ drop t ] [ , f ] if ] find 2drop ] { } make ;
-
-: take-while ( seq quot -- newseq )
-    [ not ] compose
-    [ find drop [ head-slice ] when* ] curry
-    [ dup ] prepose keep like ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-<PRIVATE
-: translate-string ( n alphabet out-len -- seq )
-    [ drop /mod ] with map nip  ;
-
-: map-alphabet ( alphabet seq[seq] -- seq[seq] )
-    [ [ swap nth ] with map ] with map ;
-
-: exact-number-strings ( n out-len -- seqs )
-    [ ^ ] 2keep [ translate-string ] 2curry map ;
-
-: number-strings ( n max-length -- seqs )
-    1+ [ exact-number-strings ] with map concat ;
-PRIVATE>
-
-: exact-strings ( alphabet length -- seqs )
-    [ dup length ] dip exact-number-strings map-alphabet ;
-
-: strings ( alphabet length -- seqs )
-    [ dup length ] dip number-strings map-alphabet ;
-
-: switches ( seq1 seq -- subseq )
-    ! seq1 is a sequence of ones and zeroes
-    [ [ length ] keep [ nth 1 = ] curry filter ] dip
-    [ nth ] curry { } map-as ;
-
-: power-set ( seq -- subsets )
-    2 over length exact-number-strings swap [ switches ] curry map ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-<PRIVATE
-: (attempt-each-integer) ( i n quot -- result )
-    [
-        iterate-step roll
-        [ 3nip ] [ iterate-next (attempt-each-integer) ] if*
-    ] [ 3drop f ] if-iterate? ; inline recursive
-PRIVATE>
-
-: attempt-each ( seq quot -- result )
-    (each) iterate-prep (attempt-each-integer) ; inline
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: randomize ( seq -- seq' )
-    dup length 1 (a,b] [ dup random pick exchange ] each ;
-
-: enumerate ( seq -- seq' ) <enum> >alist ;
diff --git a/extra/sequences/lib/summary.txt b/extra/sequences/lib/summary.txt
deleted file mode 100644 (file)
index e389b41..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Non-core sequence words
diff --git a/extra/sequences/lib/tags.txt b/extra/sequences/lib/tags.txt
deleted file mode 100644 (file)
index 42d711b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-collections
index 829555cfb12be571a25011d19eca63996c24b311..d64da6efe6ce6f5b1fd25ac982aff5e07dd4b2b3 100644 (file)
@@ -16,7 +16,7 @@ C: <merged> merged
     dupd <2merged> swap like ;
 
 : 3merge ( seq1 seq2 seq3 -- seq )
-    pick >r <3merged> r> like ;
+    pick [ <3merged> ] dip like ;
 
 M: merged length seqs>> [ length ] map sum ;
 
index ae9b94ba0efaec56ec02b95f0370943cb1990dc8..d6c98ea203ab4b23e451bd6a43f6dc295b8f2c65 100644 (file)
@@ -1,10 +1,8 @@
-
 USING: kernel parser words continuations namespaces debugger
-       sequences combinators splitting prettyprint
-       system io io.files io.launcher io.encodings.utf8 io.pipes sequences.deep
-       accessors multi-methods newfx shell.parser
-       combinators.short-circuit eval environment ;
-
+sequences combinators splitting prettyprint system io io.files
+io.pathnames io.launcher io.directories io.encodings.utf8 io.pipes
+sequences.deep accessors multi-methods newfx shell.parser
+combinators.short-circuit eval environment ;
 IN: shell
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/extra/slides/lib.factor b/extra/slides/lib.factor
deleted file mode 100755 (executable)
index f9708b3..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-USING: arrays assocs kernel vectors sequences namespaces
-       random math.parser math fry ;
-
-IN: assocs.lib
-
-: set-assoc-stack ( value key seq -- )
-    dupd [ key? ] with find-last nip set-at ;
-
-: at-default ( key assoc -- value/key )
-    dupd at [ nip ] when* ;
-
-: replace-at ( assoc value key -- assoc )
-    >r >r dup r> 1vector r> rot set-at ;
-
-: peek-at* ( assoc key -- obj ? )
-    swap at* dup [ >r peek r> ] when ;
-
-: peek-at ( assoc key -- obj )
-    peek-at* drop ;
-
-: >multi-assoc ( assoc -- new-assoc )
-    [ 1vector ] assoc-map ;
-
-: multi-assoc-each ( assoc quot -- )
-    [ with each ] curry assoc-each ; inline
-
-: insert ( value variable -- ) namespace push-at ;
-
-: generate-key ( assoc -- str )
-    >r 32 random-bits >hex r>
-    2dup key? [ nip generate-key ] [ drop ] if ;
-
-: set-at-unique ( value assoc -- key )
-    dup generate-key [ swap set-at ] keep ;
-
-: histogram ( assoc quot -- assoc' )
-    H{ } clone [
-        swap [ change-at ] 2curry assoc-each
-    ] keep ; inline
-
-: inc-at ( key assoc -- )
-    [ 0 or 1 + ] change-at ;
-
-: ?at ( obj assoc -- value/obj ? )
-    dupd at* [ [ nip ] [ drop ] if ] keep ;
-
-: if-at ( obj assoc quot1 quot2 -- )
-    [ ?at ] 2dip if ; inline
-
-: when-at ( obj assoc quot -- ) [ ] if-at ; inline
-
-: unless-at ( obj assoc quot -- ) [ ] swap if-at ; inline
index dc8bdd4576ce004a25881aadf93994ea4d16a802..0ce946dc49e409e84c96cb2a8b3b71aa1238f0aa 100755 (executable)
@@ -88,7 +88,7 @@ TUPLE: slides < book ;
 : prev-page ( book -- ) -1 change-page ;
 
 : (strip-tease) ( data n -- data )
-    >r first3 r> head 3array ;
+    [ first3 ] dip head 3array ;
 
 : strip-tease ( data -- seq )
     dup third length 1- [
diff --git a/extra/soundex/author.txt b/extra/soundex/author.txt
deleted file mode 100644 (file)
index 1901f27..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Slava Pestov
diff --git a/extra/soundex/soundex-tests.factor b/extra/soundex/soundex-tests.factor
deleted file mode 100644 (file)
index f4bd18e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-IN: soundex.tests
-USING: soundex tools.test ;
-
-[ "S162" ] [ "supercalifrag" soundex ] unit-test
-[ "M000" ] [ "M" soundex ] unit-test
diff --git a/extra/soundex/soundex.factor b/extra/soundex/soundex.factor
deleted file mode 100644 (file)
index 416ec4a..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: sequences grouping assocs kernel ascii unicode.case tr ;
-IN: soundex
-
-TR: soundex-tr
-    ch>upper
-    "AEHIOUWYBFPVCGJKQSXZDTLMNR"
-    "00000000111122222222334556" ;
-
-: remove-duplicates ( seq -- seq' )
-    #! Remove _consecutive_ duplicates (unlike prune which removes
-    #! all duplicates).
-    [ 2 <clumps> [ = not ] assoc-filter values ] [ first ] bi prefix ;
-
-: first>upper ( seq -- seq' ) 1 head >upper ;
-: trim-first ( seq -- seq' ) dup first [ = ] curry trim-left ;
-: remove-zeroes ( seq -- seq' ) CHAR: 0 swap remove ;
-: remove-non-alpha ( seq -- seq' ) [ alpha? ] filter ;
-: pad-4 ( first seq -- seq' ) "000" 3append 4 head ;
-
-: soundex ( string -- soundex )
-    remove-non-alpha [ f ] [
-        [ first>upper ]
-        [
-            soundex-tr
-            [ "" ] [ trim-first ] if-empty
-            [ "" ] [ remove-duplicates ] if-empty
-            remove-zeroes
-        ] bi
-        pad-4
-    ] if-empty ;
diff --git a/extra/soundex/summary.txt b/extra/soundex/summary.txt
deleted file mode 100644 (file)
index 95a271d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Soundex is a phonetic algorithm for indexing names by sound
index 543c26ae1442c17ffeca3bc05d17a7d723f8d597..f08e08c78763e67039a5c458a2ceefd64064f00a 100755 (executable)
@@ -154,8 +154,7 @@ M: spheres-gadget distance-step ( gadget -- dz )
 
 : (make-reflection-framebuffer) ( depthbuffer -- framebuffer )
     gen-framebuffer dup [
-        swap >r
-        GL_FRAMEBUFFER_EXT GL_DEPTH_ATTACHMENT_EXT GL_RENDERBUFFER_EXT r>
+        swap [ GL_FRAMEBUFFER_EXT GL_DEPTH_ATTACHMENT_EXT GL_RENDERBUFFER_EXT ] dip
         glFramebufferRenderbufferEXT
     ] with-framebuffer ;
 
@@ -244,10 +243,10 @@ M: spheres-gadget pref-dim* ( gadget -- dim )
     [ drop dup [ -+ ] bi@ ] 2keep ;
 
 : (reflection-face) ( gadget face -- )
-    swap reflection-texture>> >r >r
-    GL_FRAMEBUFFER_EXT
-    GL_COLOR_ATTACHMENT0_EXT
-    r> r> 0 glFramebufferTexture2DEXT
+    swap reflection-texture>> [
+        GL_FRAMEBUFFER_EXT
+        GL_COLOR_ATTACHMENT0_EXT
+    ] 2dip 0 glFramebufferTexture2DEXT
     check-framebuffer ;
 
 : (draw-reflection-texture) ( gadget -- )
index 37e12a6993eb67a8d96d3368c8ef2d2a6fcefb1c..18c37209274eb401792926b5fe5f7ea394390d51 100755 (executable)
@@ -21,14 +21,14 @@ M: missing-state error.
     ! quot is ( state string -- output-string )
     [ missing-state ] <array> dup
     [
-        [ >r dup [ data>> ] [ place>> ] bi r> ] %
+        [ [ dup [ data>> ] [ place>> ] bi ] dip ] %
         [ swapd bounds-check dispatch ] curry ,
         [ each pick (>>place) swap (>>date) ] %
     ] [ ] make [ over make ] curry ;
 
 : define-machine ( word state-class -- )
     execute make-machine
-    >r over r> define
+    [ over ] dip define
     "state-table" set-word-prop ;
 
 : MACHINE:
diff --git a/extra/strings/lib/lib-tests.factor b/extra/strings/lib/lib-tests.factor
deleted file mode 100644 (file)
index 6e0ce05..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-USING: kernel sequences strings.lib tools.test ;
-IN: temporary
-
-[ "abcdefghijklmnopqrstuvwxyz" ] [ lower-alpha-chars "" like ] unit-test
-[ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ] [ upper-alpha-chars "" like ] unit-test
-[ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ] [ alpha-chars "" like ] unit-test
-[ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ] [ alphanumeric-chars "" like ] unit-test
-[ t ] [ 100 [ random-alphanumeric-char ] replicate alphanumeric-chars [ member? ] curry all? ] unit-test
diff --git a/extra/strings/lib/lib.factor b/extra/strings/lib/lib.factor
deleted file mode 100644 (file)
index 6ecca05..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-USING: math math.ranges arrays sequences kernel random splitting
-strings unicode.case ;
-IN: strings.lib
-
-: >Upper ( str -- str )
-    dup empty? [ unclip ch>upper prefix ] unless ;
-
-: >Upper-dashes ( str -- str )
-    "-" split [ >Upper ] map "-" join ;
-
-: lower-alpha-chars ( -- seq )
-    CHAR: a CHAR: z [a,b] ;
-
-: upper-alpha-chars ( -- seq )
-    CHAR: A CHAR: Z [a,b] ;
-
-: numeric-chars ( -- seq )
-    CHAR: 0 CHAR: 9 [a,b] ;
-
-: alpha-chars ( -- seq )
-    lower-alpha-chars upper-alpha-chars append ;
-
-: alphanumeric-chars ( -- seq )
-    alpha-chars numeric-chars append ;
-
-: random-alpha-char ( -- ch )
-    alpha-chars random ;
-
-: random-alphanumeric-char ( -- ch )
-    alphanumeric-chars random ;
-
-: random-alphanumeric-string ( length -- str )
-    [ random-alphanumeric-char ] "" replicate-as ;
index 93b1804e36dc8856e032ef93231ad632103208ee..c02242e1705731bb91c48a5554998329a2afb299 100644 (file)
@@ -6,7 +6,7 @@ IN: sudoku
 SYMBOL: solutions
 SYMBOL: board
 
-: pair+ ( a b c d -- a+b c+d ) swapd + >r + r> ;
+: pair+ ( a b c d -- a+b c+d ) swapd [ + ] 2bi@ ;
 
 : row ( n -- row ) board get nth ;
 : board> ( m n -- x ) row nth ;
@@ -19,13 +19,13 @@ SYMBOL: board
 
 : box-contains? ( n x y -- ? )
     [ 3 /i 3 * ] bi@
-    9 [ >r 3dup r> cell-contains? ] contains?
-    >r 3drop r> ;
+    9 [ [ 3dup ] dip cell-contains? ] contains?
+    [ 3drop ] dip ;
 
 DEFER: search
 
 : assume ( n x y -- )
-    [ >board ] 2keep [ >r 1+ r> search ] 2keep f>board ;
+    [ >board ] 2keep [ [ 1+ ] dip search ] 2keep f>board ;
 
 : attempt ( n x y -- )
     {
@@ -59,9 +59,9 @@ DEFER: search
 
 : search ( x y -- )
     {
-        { [ over 9 = ] [ >r drop 0 r> 1+ search ] }
+        { [ over 9 = ] [ [ drop 0 ] dip 1+ search ] }
         { [ over 0 = over 9 = and ] [ 2drop solution. ] }
-        { [ 2dup board> ] [ >r 1+ r> search ] }
+        { [ 2dup board> ] [ [ 1+ ] dip search ] }
         [ solve ]
     } cond ;
 
index d7f53fb9fb83d0e7554e26efe9998e877a26bc75..d9c39ca6cf751325890dd6466674fec5ba1702f6 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: unix alien alien.c-types kernel math sequences strings
-io.unix.backend splitting ;
+io.backend.unix splitting ;
 IN: system-info.linux
 
 : (uname) ( buf -- int )
index a06c01b950425c7555c411bfa8d728935f49bba9..b51fd52995ae448b066274b5b3565273e424571a 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.strings alien.syntax
 byte-arrays kernel namespaces sequences unix
-system-info.backend system io.unix.backend io.encodings.utf8 ;
+system-info.backend system io.encodings.utf8 ;
 IN: system-info.macosx
 
 ! See /usr/include/sys/sysctl.h for constants
index e3c14854d3b29aa861679fd1533858766645ab0d..5720c09ed9b42917b4f8c1c413a8056098f82d8e 100755 (executable)
@@ -1,7 +1,8 @@
-USING: combinators io io.files io.streams.string kernel math
-math.parser continuations namespaces pack prettyprint sequences
-strings system tools.hexdump io.encodings.binary summary accessors
-io.backend symbols byte-arrays ;
+USING: combinators io io.files io.files.links io.directories
+io.pathnames io.streams.string kernel math math.parser
+continuations namespaces pack prettyprint sequences strings
+system tools.hexdump io.encodings.binary summary accessors
+io.backend byte-arrays ;
 IN: tar
 
 : zero-checksum 256 ; inline
index b71b831ca6068ba922cf25670c883f2020cf422e..4b6d516369f82fd325803d161e32d65716092a2d 100644 (file)
@@ -56,4 +56,4 @@ M: federal withholding* ( salary w4 tax-table entity -- x )
     ] if ;
 
 : net ( salary w4 collector -- x )
-    >r dupd r> total-withholding - ;
+    [ dupd ] dip total-withholding - ;
index c1e85b75b4e1ee1f963d02608135bb8b86cc49db..251f60e6d7ddedab514ee9815b1da9cc37f6cecd 100644 (file)
@@ -1,17 +1,17 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs.lib math math.order money ;
+USING: accessors math math.order money kernel assocs ;
 IN: taxes.usa.fica
 
 : fica-tax-rate ( -- x ) DECIMAL: .062 ; inline
 
-ERROR: fica-base-unknown year ;
+ERROR: fica-base-unknown ;
 
 : fica-base-rate ( year -- x )
     H{
         { 2008 102000 }
         { 2007  97500 }
-    } [ fica-base-unknown ] unless-at ;
+    } at [ fica-base-unknown ] unless* ;
 
 : fica-tax ( salary w4 -- x )
     year>> fica-base-rate min fica-tax-rate * ;
index 30622c9e383e852d8f674dadc0bdb7c111e262c0..ef5ffcc3447c48822931394ac41006132d363b52 100644 (file)
@@ -88,7 +88,7 @@ TUPLE: tetris
 : tetris-move ( tetris move -- ? )
     #! moves the piece if possible, returns whether the piece was moved
     2dup can-move? [
-        >r current-piece r> move-piece drop t
+        [ current-piece ] dip move-piece drop t
     ] [
         2drop f
     ] if ;
index a9b00ffb7cd19343da7adf0659e28052e37c8a1b..e7c01742d5cf31ec29d9ff252346e7f097aed359 100644 (file)
@@ -20,7 +20,7 @@ IN: tetris.gl
 
 ! TODO: move implementation specific stuff into tetris-board
 : (draw-row) ( x y row -- )
-    >r over r> nth dup
+    [ over ] dip nth dup
     [ gl-color 2array draw-block ] [ 3drop ] if ;
 
 : draw-row ( y row -- )
index b200c4d7354a2184509c01984ffac95c9f41eac4..5c819f6e697ea74d78b2f63b31cfaf2db29f9d6f 100644 (file)
@@ -25,6 +25,7 @@ M: tetris-gadget draw-gadget* ( gadget -- )
     [ <new-tetris> ] change-tetris ;
 
 tetris-gadget H{
+    { T{ button-down f f 1 }     [ request-focus ] }
     { T{ key-down f f "UP" }     [ tetris>> rotate-right ] }
     { T{ key-down f f "d" }      [ tetris>> rotate-left ] }
     { T{ key-down f f "f" }      [ tetris>> rotate-right ] }
diff --git a/extra/time/authors.txt b/extra/time/authors.txt
deleted file mode 100644 (file)
index e091bb8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-John Benediktsson
diff --git a/extra/time/time-docs.factor b/extra/time/time-docs.factor
deleted file mode 100644 (file)
index 8fbc59e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-USING: help.syntax help.markup kernel prettyprint sequences strings ;
-
-IN: time
-
-HELP: strftime
-{ $values { "format-string" string } }
-{ $description "Writes the timestamp (specified on the stack) formatted according to the format string." } 
-;
-
-ARTICLE: "strftime" "Formatted timestamps"
-"The " { $vocab-link "time" } " vocabulary is used for formatted timestamps.\n"
-{ $subsection strftime }
-"\n"
-"Several format specifications exist for handling arguments of different types, and specifying attributes for the result string, including such things as maximum width, padding, and decimals.\n"
-{ $table
-    { "%a"     "Abbreviated weekday name." }
-    { "%A"     "Full weekday name." }
-    { "%b"     "Abbreviated month name." }
-    { "%B"     "Full month name." }
-    { "%c"     "Date and time representation." }
-    { "%d"     "Day of the month as a decimal number [01,31]." }
-    { "%H"     "Hour (24-hour clock) as a decimal number [00,23]." }
-    { "%I"     "Hour (12-hour clock) as a decimal number [01,12]." }
-    { "%j"     "Day of the year as a decimal number [001,366]." }
-    { "%m"     "Month as a decimal number [01,12]." }
-    { "%M"     "Minute as a decimal number [00,59]." }
-    { "%p"     "Either AM or PM." }
-    { "%S"     "Second as a decimal number [00,59]." }
-    { "%U"     "Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]." }
-    { "%w"     "Weekday as a decimal number [0(Sunday),6]." }
-    { "%W"     "Week number of the year (Monday as the first day of the week) as a decimal number [00,53]." }
-    { "%x"     "Date representation." }
-    { "%X"     "Time representation." }
-    { "%y"     "Year without century as a decimal number [00,99]." }
-    { "%Y"     "Year with century as a decimal number." }
-    { "%Z"     "Time zone name (no characters if no time zone exists)." }
-    { "%%"     "A literal '%' character." }
-} ;
-
-ABOUT: "strftime"
-
-
diff --git a/extra/time/time-tests.factor b/extra/time/time-tests.factor
deleted file mode 100644 (file)
index 0b0602b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-! Copyright (C) 2008 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: kernel time tools.test calendar ;
-
-IN: time.tests
-
-[ "%H:%M:%S" strftime ] must-infer 
-
-: testtime ( -- timestamp )
-    2008 10 9 12 3 15 instant <timestamp> ;
-
-[ t ] [ "12:03:15" testtime "%H:%M:%S" strftime = ] unit-test
-[ t ] [ "12:03:15" testtime "%X" strftime = ] unit-test
-
-[ t ] [ "10/09/2008" testtime "%m/%d/%Y" strftime = ] unit-test
-[ t ] [ "10/09/2008" testtime "%x" strftime = ] unit-test
-
-[ t ] [ "Thu" testtime "%a" strftime = ] unit-test
-[ t ] [ "Thursday" testtime "%A" strftime = ] unit-test
-
-[ t ] [ "Oct" testtime "%b" strftime = ] unit-test
-[ t ] [ "October" testtime "%B" strftime = ] unit-test
-
diff --git a/extra/time/time.factor b/extra/time/time.factor
deleted file mode 100644 (file)
index be19fb0..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-! Copyright (C) 2008 John Benediktsson
-! See http://factorcode.org/license.txt for BSD license
-
-USING: accessors arrays calendar io kernel fry macros math
-math.functions math.parser peg.ebnf sequences strings vectors ;
-
-IN: time
-
-: >timestring ( timestamp -- string ) 
-    [ hour>> ] keep [ minute>> ] keep second>> 3array
-    [ number>string 2 CHAR: 0 pad-left ] map ":" join ; inline
-
-: >datestring ( timestamp -- string )
-    [ month>> ] keep [ day>> ] keep year>> 3array
-    [ number>string 2 CHAR: 0 pad-left ] map "/" join ; inline
-
-: (week-of-year) ( timestamp day -- n )
-    [ dup clone 1 >>month 1 >>day day-of-week dup ] dip > [ 7 swap - ] when
-    [ day-of-year ] dip 2dup < [ 0 2nip ] [ - 7 / 1+ >fixnum ] if ;
-
-: week-of-year-sunday ( timestamp -- n ) 0 (week-of-year) ; inline
-
-: week-of-year-monday ( timestamp -- n ) 1 (week-of-year) ; inline
-
-
-<PRIVATE
-
-EBNF: parse-format-string
-
-fmt-%     = "%"                  => [[ [ "%" ] ]]
-fmt-a     = "a"                  => [[ [ dup day-of-week day-abbreviation3 ] ]]
-fmt-A     = "A"                  => [[ [ dup day-of-week day-name ] ]] 
-fmt-b     = "b"                  => [[ [ dup month>> month-abbreviation ] ]]
-fmt-B     = "B"                  => [[ [ dup month>> month-name ] ]] 
-fmt-c     = "c"                  => [[ [ "Not yet implemented" throw ] ]]
-fmt-d     = "d"                  => [[ [ dup day>> number>string 2 CHAR: 0 pad-left ] ]] 
-fmt-H     = "H"                  => [[ [ dup hour>> number>string 2 CHAR: 0 pad-left ] ]]
-fmt-I     = "I"                  => [[ [ dup hour>> 12 > [ 12 - ] when number>string 2 CHAR: 0 pad-left ] ]] 
-fmt-j     = "j"                  => [[ [ dup day-of-year number>string ] ]] 
-fmt-m     = "m"                  => [[ [ dup month>> number>string 2 CHAR: 0 pad-left ] ]] 
-fmt-M     = "M"                  => [[ [ dup minute>> number>string 2 CHAR: 0 pad-left ] ]] 
-fmt-p     = "p"                  => [[ [ dup hour>> 12 < [ "AM" ] [ "PM" ] ? ] ]] 
-fmt-S     = "S"                  => [[ [ dup second>> round number>string 2 CHAR: 0 pad-left ] ]] 
-fmt-U     = "U"                  => [[ [ dup week-of-year-sunday ] ]] 
-fmt-w     = "w"                  => [[ [ dup day-of-week number>string ] ]] 
-fmt-W     = "W"                  => [[ [ dup week-of-year-monday ] ]] 
-fmt-x     = "x"                  => [[ [ dup >datestring ] ]] 
-fmt-X     = "X"                  => [[ [ dup >timestring ] ]] 
-fmt-y     = "y"                  => [[ [ dup year>> 100 mod number>string ] ]] 
-fmt-Y     = "Y"                  => [[ [ dup year>> number>string ] ]] 
-fmt-Z     = "Z"                  => [[ [ "Not yet implemented" throw ] ]] 
-unknown   = (.)*                 => [[ "Unknown directive" throw ]]
-
-formats_  = fmt-%|fmt-a|fmt-A|fmt-b|fmt-B|fmt-c|fmt-d|fmt-H|fmt-I|
-            fmt-j|fmt-m|fmt-M|fmt-p|fmt-S|fmt-U|fmt-w|fmt-W|fmt-x|
-            fmt-X|fmt-y|fmt-Y|fmt-Z|unknown
-
-formats   = "%" (formats_)       => [[ second '[ _ dip ] ]]
-
-plain-text = (!("%").)+          => [[ >string '[ _ swap ] ]]
-
-text      = (formats|plain-text)* => [[ reverse [ [ [ push ] keep ] append ] map ]]
-
-;EBNF
-
-PRIVATE>
-
-MACRO: strftime ( format-string -- )
-    parse-format-string [ length ] keep [ ] join 
-    '[ _ <vector> @ reverse concat nip ] ;
-
-
index cea5ece9f71b905dfa0e2eed45883da3f615a1f3..15b8a6828bd5b4b496886ab7cc9000d8d84aa636 100644 (file)
@@ -1,5 +1,5 @@
 
-USING: kernel accessors locals namespaces sequences sequences.lib threads
+USING: kernel accessors locals namespaces sequences threads
        math math.order math.vectors
        calendar
        colors opengl ui ui.gadgets ui.gestures ui.render
@@ -65,6 +65,16 @@ M: <trails-gadget> pref-dim* ( <trails-gadget> -- dim ) drop { 500 500 } ;
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
+: each-percent ( seq quot -- )
+  [
+    dup length
+    dup [ / ] curry
+    [ 1+ ] prepose
+  ] dip compose
+  2each ;                       inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
 M:: <trails-gadget> draw-gadget* ( GADGET -- )
   origin get
   [
diff --git a/extra/ui/gadgets/frame-buffer/frame-buffer.factor b/extra/ui/gadgets/frame-buffer/frame-buffer.factor
deleted file mode 100644 (file)
index 2d58037..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-
-USING: kernel alien.c-types combinators sequences splitting grouping
-       opengl.gl ui.gadgets ui.render
-       math math.vectors accessors math.geometry.rect ;
-
-IN: ui.gadgets.frame-buffer
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-TUPLE: frame-buffer < gadget action pdim last-dim graft ungraft pixels ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: init-frame-buffer-pixels ( frame-buffer -- frame-buffer )
-  dup
-    rect-dim product "uint[4]" <c-array>
-  >>pixels ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: new-frame-buffer ( class -- gadget )
-  new-gadget
-    [ ]         >>action
-    { 100 100 } >>pdim
-    [ ]         >>graft
-    [ ]         >>ungraft ;
-
-: <frame-buffer> ( -- frame-buffer ) frame-buffer new-frame-buffer ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: draw-pixels ( fb -- fb )
-  dup >r
-  dup >r
-  rect-dim first2 GL_RGBA GL_UNSIGNED_INT r> pixels>> glDrawPixels
-  r> ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: read-pixels ( fb -- fb )
-  dup >r
-  dup >r
-      >r
-  0 0 r> rect-dim first2 GL_RGBA GL_UNSIGNED_INT r> pixels>> glReadPixels
-  r> ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-M: frame-buffer pref-dim* pdim>> ;
-M: frame-buffer graft*    graft>>   call ;
-M: frame-buffer ungraft*  ungraft>> call ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-: copy-row ( old new -- )
-  2dup min-length swap >r head-slice 0 r> copy ;
-
-! : copy-pixels ( old-pixels old-width new-pixels new-width -- )
-!   [ group ] 2bi@
-!   [ copy-row ] 2each ;
-
-! : copy-pixels ( old-pixels old-width new-pixels new-width -- )
-!   [ 16 * group ] 2bi@
-!   [ copy-row ] 2each ;
-
-: copy-pixels ( old-pixels old-width new-pixels new-width -- )
-  [ 16 * <sliced-groups> ] 2bi@
-  [ copy-row ] 2each ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-M: frame-buffer layout* ( fb -- )
-   {
-     {
-       [ dup last-dim>> f = ]
-       [
-         init-frame-buffer-pixels
-         dup
-           rect-dim >>last-dim
-         drop
-       ]
-     }
-     {
-       [ dup [ rect-dim ] [ last-dim>> ] bi = not ]
-       [
-         dup [ pixels>> ] [ last-dim>> first ] bi
-
-         rot init-frame-buffer-pixels
-         dup rect-dim >>last-dim
-
-         [ pixels>> ] [ rect-dim first ] bi
-
-         copy-pixels
-       ]
-     }
-     { [ t ] [ drop ] }
-   }
-   cond ;
-   
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-M: frame-buffer draw-gadget* ( fb -- )
-
-   dup rect-dim { 0 1 } v* first2 glRasterPos2i
-
-   draw-pixels
-
-   dup action>> call
-
-   glFlush
-
-   read-pixels
-
-   drop ;
-
index 02005fcd1f6c4143f2dc928a0c817204d48383ac..b8e3f45a16eca370ff3ed7c63f1689c5dcd0252f 100755 (executable)
@@ -81,7 +81,7 @@ M: dimensions-not-equal summary drop "Dimensions do not match" ;
 
 : d= ( d d -- ? ) comparison-op number= ;
 
-: d~ ( d d delta -- ? ) >r comparison-op r> ~ ;
+: d~ ( d d delta -- ? ) [ comparison-op ] dip ~ ;
 
 : d-min ( d d -- d ) [ d< ] most ;
 
index 0c7b442ffade93987ed3d68976b58bebbb2cf51d..77280031890b996f7afc9c4060904570d5591b18 100644 (file)
@@ -1,6 +1,5 @@
-
-USING: namespaces debugger io.files bootstrap.image update.util ;
-
+USING: namespaces debugger io.files io.directories
+bootstrap.image update.util ;
 IN: update.backup
 
 : backup-boot-image ( -- )
index 9546379223d5e0f07269d38f2262875d4155c77f..98d264d2272ec3cb215a20f4e2ec7652db4016c6 100644 (file)
@@ -1,7 +1,5 @@
-
-USING: kernel namespaces system io.files bootstrap.image http.client
-       update update.backup update.util ;
-
+USING: kernel namespaces system io.files io.pathnames io.directories
+bootstrap.image http.client update update.backup update.util ;
 IN: update.latest
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
index c6a5671345c95b8d0c3d63e9438cc955d6afff4f..ba09cc3f3d48c4d215e993ab53fc6f246ad56ce8 100644 (file)
@@ -1,10 +1,5 @@
-
-USING: kernel system sequences io.files io.launcher bootstrap.image
-       http.client
-       update.util ;
-
-       ! builder.util builder.release.branch ;
-
+USING: kernel system sequences io.files io.directories
+io.pathnames io.launcher bootstrap.image http.client update.util ;
 IN: update
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
index c5e059c51958a13100b5e8deec95d12996c2328b..deb3e15845789020d6781c3bb4b2cb264d76fdda 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: io.files io.encodings.ascii sequences generalizations
-math.parser combinators kernel memoize csv symbols summary
+math.parser combinators kernel memoize csv summary
 words accessors math.order binary-search ;
 IN: usa-cities
 
index 7316cd6a6db468474311a854bcf82a73817bdeac..c12367ba5ea35a82952aea6e68f9e3173d5c25b7 100644 (file)
@@ -2,7 +2,8 @@
 
 ! Thanks to Mackenzie Straight for the idea
 
-USING: accessors kernel parser lexer words namespaces sequences quotations ;
+USING: accessors kernel parser lexer words words.symbol
+namespaces sequences quotations ;
 
 IN: vars
 
index 131b569a92ea1cc83055684c6766db8d14f320c8..35d8bb52ff63fd3c625ea55b53d12c751305e374 100644 (file)
@@ -80,19 +80,19 @@ IN: vpri-talk
     { $slide "Object system"
         "New operation, existing types:"
         { $code
-            "GENERIC: perimiter ( shape -- n )"
+            "GENERIC: perimeter ( shape -- n )"
             ""
-            "M: rectangle perimiter"
+            "M: rectangle perimeter"
             "    [ width>> ] [ height>> ] bi + 2 * ;"
             ""
-            "M: circle perimiter"
+            "M: circle perimeter"
             "    radius>> 2 * pi * ;"
         }
     }
     { $slide "Object system"
         "We can compute perimiters now."
-        { $code "100 20 <rectangle> perimiter ." }
-        { $code "3 <circle> perimiter ." }
+        { $code "100 20 <rectangle> perimeter ." }
+        { $code "3 <circle> perimeter ." }
     }
     { $slide "Object system"
         "New type, extending existing operations:"
@@ -110,7 +110,7 @@ IN: vpri-talk
         { $code
             ": hypotenuse ( x y -- z ) [ sq ] bi@ + sqrt ;"
             ""
-            "M: triangle perimiter"
+            "M: triangle perimeter"
             "    [ base>> ] [ height>> ] bi"
             "    [ + ] [ hypotenuse ] 2bi + ;"
         }
@@ -151,10 +151,10 @@ IN: vpri-talk
         "Libraries can define new parsing words"
     }
     { $slide "Example: float arrays"
-        { $vocab-link "float-arrays" }
+        { $vocab-link "specialized-arrays.float" }
         "Avoids boxing and unboxing overhead"
         "Implemented with library code"
-        { $code "F{ 3.14 7.6 10.3 }" }
+        { $code "float-array{ 3.14 7.6 10.3 }" }
     }
     { $slide "Example: memoization"
         { "Memoization with " { $link POSTPONE: MEMO: } }
index 96401b6afd65e73a0f9d3db54fbc6d68ef60e2bb..1c17e3214f17536f3345fa906943d8c7ab1324e0 100644 (file)
@@ -2,7 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel accessors http.server.dispatchers
 http.server.static furnace.actions furnace.redirection urls
-validators locals io.files html.forms html.components help.html ;
+validators locals io.files io.directories html.forms
+html.components help.html ;
 IN: webapps.help
 
 TUPLE: help-webapp < dispatcher ;
index c19355071959cf90e593a79cf4589279f3dc4e32..bd9843bdc94aa766f191f92a045ccb59f2abd0b6 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: calendar kernel http.server.dispatchers prettyprint
-sequences printf furnace.actions html.forms accessors
+sequences formatting furnace.actions html.forms accessors
 furnace.redirection ;
 IN: webapps.irc-log
 
index 01e068d35151c9e74c5b3015eab518ec630c992f..38a30979993818d006bc92b0c61509a19eb818f0 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2007, 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
 USING: namespaces assocs sorting sequences kernel accessors
-hashtables sequences.lib db.types db.tuples db combinators
+hashtables db.types db.tuples db combinators
 calendar calendar.format math.parser math.order syndication urls
 xml.writer xmode.catalog validators
 html.forms
index 6c097d7faaeec2314d08b090cc65131d41c280f3..52d64f0f9e1cc9268e5680da163e6fe19f791eb4 100755 (executable)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel accessors sequences sorting math math.order
 calendar alarms logging concurrency.combinators namespaces
-sequences.lib db.types db.tuples db fry locals hashtables
+db.types db.tuples db fry locals hashtables
 syndication urls xml.writer validators
 html.forms
 html.components
index f2c0600ed5a31bf53e03ed44d85067963c39942f..07fbbe059601e05cfabaa93b75c21781f6ff7262 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors kernel hashtables calendar random assocs
 namespaces make splitting sequences sorting math.order present
-io.files io.encodings.ascii
+io.files io.directories io.encodings.ascii
 syndication farkup
 html.components html.forms
 http.server
index 8c0b1beb8323303e4eb387f4608a7d17d628e804..322212c4fc7170edf9036ae8860f75d6d82d5dfa 100644 (file)
@@ -1,14 +1,15 @@
 USING: tools.deploy.config ;
 H{
+    { deploy-io 1 }
+    { deploy-threads? f }
+    { deploy-word-defs? f }
     { deploy-ui? f }
     { deploy-compiler? t }
+    { deploy-word-props? f }
+    { "stop-after-last-window?" t }
+    { deploy-unicode? f }
     { deploy-c-types? f }
+    { deploy-math? f }
     { deploy-reflection 1 }
     { deploy-name "WebKit demo" }
-    { deploy-io 1 }
-    { deploy-math? f }
-    { deploy-word-props? f }
-    { "stop-after-last-window?" t }
-    { deploy-word-defs? f }
-    { deploy-threads? f }
 }
index d7fdfa2460f60027c5e2b9b859f70adfb2f2453d..302967969f150328dd95ec98537a0a71c9d98acf 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (c) 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors kernel sequences assocs io.files io.sockets
-io.sockets.secure io.servers.connection
+USING: accessors kernel sequences assocs io.files io.pathnames
+io.sockets io.sockets.secure io.servers.connection
 namespaces db db.tuples db.sqlite smtp urls
 logging.insomniac
 html.templates.chloe
index 803f0c2a66de1d53146d76cd35f7ffa65e00ef92..7abdc149dd8ed71bf5077c4927739e7f457cb830 100644 (file)
@@ -30,7 +30,7 @@ SYMBOL: *calling*
   *calling* get-global at ; inline
     
 : timed-call ( quot word -- )
-  [ calling ] [ >r benchmark r> register-time ] [ finished ] tri ; inline
+  [ calling ] [ [ benchmark ] dip register-time ] [ finished ] tri ; inline
 
 : time-unless-recursing ( quot word -- )
   dup called-recursively? not
@@ -71,9 +71,10 @@ SYMBOL: *calling*
 
 : wordtimer-call ( quot -- )
   reset-word-timer 
-  benchmark >r
-  correct-for-timing-overhead
-  "total time:" write r> pprint nl
+  benchmark [
+      correct-for-timing-overhead
+      "total time:" write
+  ] dip pprint nl
   print-word-timings nl ;
 
 : profile-vocab ( vocab quot -- )
@@ -81,9 +82,10 @@ SYMBOL: *calling*
   over [ reset-vocab ] [ add-timers ] bi
   reset-word-timer
   "executing quotation..." print flush
-  benchmark >r
-  "resetting annotations..." print flush
-  reset-vocab
-  correct-for-timing-overhead
-  "total time:" write r> pprint
+  benchmark [
+      "resetting annotations..." print flush
+      reset-vocab
+      correct-for-timing-overhead
+      "total time:" write
+  ] dip pprint
   print-word-timings ;
index 18f6fa1e94e271c3867ca7fab38183f5b6b8fa58..cc938a60ff65861ccaab7fd08e65f87ce9d794ab 100644 (file)
@@ -47,29 +47,48 @@ M-x customize-group fuel will show you how many.
 Quick key reference
 -------------------
 
-(Chords ending in a single letter <x> accept also C-<x> (e.g. C-cC-z is
-the same as C-cz)).
+(Triple chords ending in a single letter <x> accept also C-<x> (e.g.
+C-cC-eC-r is the same as C-cC-er)).
 
-* In factor files:
+* In factor source files:
 
  - C-cz : switch to listener
  - C-co : cycle between code, tests and docs factor files
 
- - M-. : edit word at point in Emacs (also in listener)
+ - M-. : edit word at point in Emacs
+ - M-TAB : complete word at point
+ - C-cC-ev : edit vocabulary (M-x fuel-edit-vocabulary)
+ - C-cC-ew : edit word (M-x fuel-edit-word)
 
  - C-cr, C-cC-er : eval region
  - C-M-r, C-cC-ee : eval region, extending it to definition boundaries
  - C-M-x, C-cC-ex : eval definition around point
- - C-ck, C-cC-ek : compile file
+ - C-ck, C-cC-ek : run file
 
  - C-cC-da : toggle autodoc mode
  - C-cC-dd : help for word at point
  - C-cC-ds : short help word at point
 
+* In the listener:
+
+ - TAB : complete word at point
+ - M-. : edit word at point in Emacs
+ - C-ca : toggle autodoc mode
+ - C-cv : edit vocabulary
+ - C-ch : help for word at point
+ - C-ck : run file
+
 * In the debugger (it pops up upon eval/compilation errors):
 
  - g : go to error
  - <digit> : invoke nth restart
+ - w/e/l : invoke :warnings, :errors, :linkage
  - q : bury buffer
 
+* In the Help browser:
+
+ - RET : help for word at point
+ - f/b : next/previous page
+ - SPC/S-SPC : scroll up/down
+ - q: bury buffer
 
index b3952074f5376fe7b7efed2428a3e63336f185ae..8cf578f0904820f0c8795410620dd67499a48700 100644 (file)
@@ -84,8 +84,7 @@ code in the buffer."
   (set (make-local-variable 'beginning-of-defun-function)
        'fuel-syntax--beginning-of-defun)
   (set (make-local-variable 'end-of-defun-function) 'fuel-syntax--end-of-defun)
-  (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil)
-  (fuel-syntax--enable-usings))
+  (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil))
 
 \f
 ;;; Indentation:
@@ -112,13 +111,16 @@ code in the buffer."
   (save-excursion
     (beginning-of-line)
     (when (> (fuel-syntax--brackets-depth) 0)
-      (let ((op (fuel-syntax--brackets-start))
-            (cl (fuel-syntax--brackets-end))
-            (ln (line-number-at-pos)))
+      (let* ((op (fuel-syntax--brackets-start))
+             (cl (fuel-syntax--brackets-end))
+             (ln (line-number-at-pos))
+             (iop (fuel-syntax--indentation-at op)))
         (when (> ln (line-number-at-pos op))
-          (if (and (> cl 0) (= ln (line-number-at-pos cl)))
-              (fuel-syntax--indentation-at op)
-            (fuel-syntax--increased-indentation (fuel-syntax--indentation-at op))))))))
+          (if (and (> cl 0)
+                   (= (- cl (point)) (current-indentation))
+                   (= ln (line-number-at-pos cl)))
+              iop
+            (fuel-syntax--increased-indentation iop)))))))
 
 (defun factor-mode--indent-definition ()
   (save-excursion
index a62d16cb32615d9caf9a46c8ac5e0ba445cd11e3..f60c5f241d826622ec2f57e477e646208aaee66f 100644 (file)
                                 " ")
                      len))
 
+(defsubst empty-string-p (str) (equal str ""))
+
+(defun fuel--respecting-message (format &rest format-args)
+  "Display TEXT as a message, without hiding any minibuffer contents."
+  (let ((text (format " [%s]" (apply #'format format format-args))))
+    (if (minibuffer-window-active-p (minibuffer-window))
+        (minibuffer-message text)
+      (message "%s" text))))
+
 (provide 'fuel-base)
 ;;; fuel-base.el ends here
diff --git a/misc/fuel/fuel-completion.el b/misc/fuel/fuel-completion.el
new file mode 100644 (file)
index 0000000..8d2d779
--- /dev/null
@@ -0,0 +1,193 @@
+;;; fuel-completion.el -- completion utilities
+
+;; Copyright (C) 2008 Jose Antonio Ortega Ruiz
+;; See http://factorcode.org/license.txt for BSD license.
+
+;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
+;; Keywords: languages, fuel, factor
+;; Start date: Sun Dec 14, 2008 21:17
+
+;;; Comentary:
+
+;; Code completion utilities.
+
+;;; Code:
+
+(require 'fuel-base)
+(require 'fuel-syntax)
+(require 'fuel-eval)
+(require 'fuel-log)
+
+\f
+;;; Vocabs dictionary:
+
+(defvar fuel-completion--vocabs nil)
+
+(defun fuel-completion--vocabs (&optional reload)
+  (when (or reload (not fuel-completion--vocabs))
+    (fuel--respecting-message "Retrieving vocabs list")
+    (let ((fuel-log--inhibit-p t))
+      (setq fuel-completion--vocabs
+            (fuel-eval--retort-result
+             (fuel-eval--send/wait '(:fuel* (fuel-get-vocabs) "fuel" (:array)))))))
+  fuel-completion--vocabs)
+
+(defun fuel-completion--words (prefix vocabs)
+  (let ((vs (if vocabs (cons :array vocabs) 'f))
+        (us (or vocabs 't)))
+    (fuel-eval--retort-result
+     (fuel-eval--send/wait `(:fuel* (,prefix ,vs fuel-get-words) t ,us)))))
+
+\f
+;;; Completions window handling, heavily inspired in slime's:
+
+(defvar fuel-completion--comp-buffer "*Completions*")
+
+(make-variable-buffer-local
+ (defvar fuel-completion--window-cfg nil
+   "Window configuration before we show the *Completions* buffer.
+This is buffer local in the buffer where the completion is
+performed."))
+
+(make-variable-buffer-local
+ (defvar fuel-completion--completions-window nil
+   "The window displaying *Completions* after saving window configuration.
+If this window is no longer active or displaying the completions
+buffer then we can ignore `fuel-completion--window-cfg'."))
+
+(defun fuel-completion--maybe-save-window-configuration ()
+  "Maybe save the current window configuration.
+Return true if the configuration was saved."
+  (unless (or fuel-completion--window-cfg
+              (get-buffer-window fuel-completion--comp-buffer))
+    (setq fuel-completion--window-cfg
+          (current-window-configuration))
+    t))
+
+(defun fuel-completion--delay-restoration ()
+  (add-hook 'pre-command-hook
+            'fuel-completion--maybe-restore-window-configuration
+            nil t))
+
+(defun fuel-completion--forget-window-configuration ()
+  (setq fuel-completion--window-cfg nil)
+  (setq fuel-completion--completions-window nil))
+
+(defun fuel-completion--restore-window-configuration ()
+  "Restore the window config if available."
+  (remove-hook 'pre-command-hook
+               'fuel-completion--maybe-restore-window-configuration)
+  (when (and fuel-completion--window-cfg
+             (fuel-completion--window-active-p))
+    (save-excursion
+      (set-window-configuration fuel-completion--window-cfg))
+    (setq fuel-completion--window-cfg nil)
+    (when (buffer-live-p fuel-completion--comp-buffer)
+      (kill-buffer fuel-completion--comp-buffer))))
+
+(defun fuel-completion--maybe-restore-window-configuration ()
+  "Restore the window configuration, if the following command
+terminates a current completion."
+  (remove-hook 'pre-command-hook
+               'fuel-completion--maybe-restore-window-configuration)
+  (condition-case err
+      (cond ((find last-command-char "()\"'`,# \r\n:")
+             (fuel-completion--restore-window-configuration))
+            ((not (fuel-completion--window-active-p))
+             (fuel-completion--forget-window-configuration))
+            (t (fuel-completion--delay-restoration)))
+    (error
+     ;; Because this is called on the pre-command-hook, we mustn't let
+     ;; errors propagate.
+     (message "Error in fuel-completion--restore-window-configuration: %S" err))))
+
+(defun fuel-completion--window-active-p ()
+  "Is the completion window currently active?"
+  (and (window-live-p fuel-completion--completions-window)
+       (equal (buffer-name (window-buffer fuel-completion--completions-window))
+              fuel-completion--comp-buffer)))
+
+(defun fuel-completion--display-comp-list (completions base)
+  (let ((savedp (fuel-completion--maybe-save-window-configuration)))
+    (with-output-to-temp-buffer fuel-completion--comp-buffer
+      (display-completion-list completions base)
+      (let ((offset (- (point) 1 (length base))))
+        (with-current-buffer standard-output
+          (setq completion-base-size offset)
+          (set-syntax-table fuel-syntax--syntax-table))))
+    (when savedp
+      (setq fuel-completion--completions-window
+            (get-buffer-window fuel-completion--comp-buffer)))))
+
+(defun fuel-completion--display-or-scroll (completions base)
+  (cond ((and (eq last-command this-command) (fuel-completion--window-active-p))
+         (fuel-completion--scroll-completions))
+        (t (fuel-completion--display-comp-list completions base)))
+  (fuel-completion--delay-restoration))
+
+(defun fuel-completion--scroll-completions ()
+  (let ((window fuel-completion--completions-window))
+    (with-current-buffer (window-buffer window)
+      (if (pos-visible-in-window-p (point-max) window)
+          (set-window-start window (point-min))
+        (save-selected-window
+          (select-window window)
+          (scroll-up))))))
+
+\f
+;;; Completion functionality:
+
+(defun fuel-completion--word-list (prefix)
+  (let* ((fuel-log--inhibit-p t)
+         (cv (fuel-syntax--current-vocab))
+         (vs (and cv `("syntax" ,cv ,@(fuel-syntax--usings)))))
+    (fuel-completion--words prefix vs)))
+
+(defsubst fuel-completion--all-words-list (prefix)
+  (fuel-completion--words prefix nil))
+
+(defvar fuel-completion--word-list-func
+  (completion-table-dynamic 'fuel-completion--word-list))
+
+(defvar fuel-completion--all-words-list-func
+  (completion-table-dynamic 'fuel-completion--all-words-list))
+
+(defun fuel-completion--complete (prefix)
+  (let* ((words (fuel-completion--word-list prefix))
+         (completions (all-completions prefix words))
+         (partial (try-completion prefix words))
+         (partial (if (eq partial t) prefix partial)))
+    (cons completions partial)))
+
+(defsubst fuel-completion--read-word (prompt &optional default history all)
+  (completing-read prompt
+                   (if all fuel-completion--all-words-list-func
+                     fuel-completion--word-list-func)
+                   nil nil nil
+                   history
+                   (or default (fuel-syntax-symbol-at-point))))
+
+(defun fuel-completion--complete-symbol ()
+  "Complete the symbol at point.
+Perform completion similar to Emacs' complete-symbol."
+  (interactive)
+  (let* ((end (point))
+         (beg (fuel-syntax--symbol-start))
+         (prefix (buffer-substring-no-properties beg end))
+         (result (fuel-completion--complete prefix))
+         (completions (car result))
+         (partial (cdr result)))
+    (cond ((null completions)
+           (fuel--respecting-message "Can't find completion for %S" prefix)
+           (fuel-completion--restore-window-configuration))
+          (t (insert-and-inherit (substring partial (length prefix)))
+             (cond ((= (length completions) 1)
+                    (fuel--respecting-message "Sole completion")
+                    (fuel-completion--restore-window-configuration))
+                   (t (fuel--respecting-message "Complete but not unique")
+                      (fuel-completion--display-or-scroll completions
+                                                          partial)))))))
+
+\f
+(provide 'fuel-completion)
+;;; fuel-completion.el ends here
diff --git a/misc/fuel/fuel-connection.el b/misc/fuel/fuel-connection.el
new file mode 100644 (file)
index 0000000..da621b3
--- /dev/null
@@ -0,0 +1,246 @@
+;;; fuel-connection.el -- asynchronous comms with the fuel listener
+
+;; Copyright (C) 2008 Jose Antonio Ortega Ruiz
+;; See http://factorcode.org/license.txt for BSD license.
+
+;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
+;; Keywords: languages, fuel, factor
+;; Start date: Thu Dec 11, 2008 03:10
+
+;;; Comentary:
+
+;; Handling communications via a comint buffer running a factor
+;; listener.
+
+;;; Code:
+
+(require 'fuel-log)
+(require 'fuel-base)
+
+(require 'comint)
+(require 'advice)
+
+\f
+;;; Default connection:
+
+(make-variable-buffer-local
+ (defvar fuel-con--connection nil))
+
+(defun fuel-con--get-connection (buffer/proc)
+  (if (processp buffer/proc)
+      (fuel-con--get-connection (process-buffer buffer/proc))
+    (with-current-buffer buffer/proc
+      (or fuel-con--connection
+          (setq fuel-con--connection
+                (fuel-con--setup-connection buffer/proc))))))
+
+\f
+;;; Request and connection datatypes:
+
+(defun fuel-con--connection-queue-request (c r)
+  (let ((reqs (assoc :requests c)))
+    (setcdr reqs (append (cdr reqs) (list r)))))
+
+(defun fuel-con--make-request (str cont &optional sender-buffer)
+  (list :fuel-connection-request
+        (cons :id (random))
+        (cons :string str)
+        (cons :continuation cont)
+        (cons :buffer (or sender-buffer (current-buffer)))
+        (cons :output "")))
+
+(defsubst fuel-con--request-p (req)
+  (and (listp req) (eq (car req) :fuel-connection-request)))
+
+(defsubst fuel-con--request-id (req)
+  (cdr (assoc :id req)))
+
+(defsubst fuel-con--request-string (req)
+  (cdr (assoc :string req)))
+
+(defsubst fuel-con--request-continuation (req)
+  (cdr (assoc :continuation req)))
+
+(defsubst fuel-con--request-buffer (req)
+  (cdr (assoc :buffer req)))
+
+(defun fuel-con--request-output (req &optional suffix)
+  (let ((cell (assoc :output req)))
+    (when suffix (setcdr cell (concat (cdr cell) suffix)))
+    (cdr cell)))
+
+(defsubst fuel-con--request-deactivate (req)
+  (setcdr (assoc :continuation req) nil))
+
+(defsubst fuel-con--request-deactivated-p (req)
+  (null (cdr (assoc :continuation req))))
+
+(defsubst fuel-con--make-connection (buffer)
+  (list :fuel-connection
+        (cons :requests (list))
+        (cons :current nil)
+        (cons :completed (make-hash-table :weakness 'value))
+        (cons :buffer buffer)
+        (cons :timer nil)))
+
+(defsubst fuel-con--connection-p (c)
+  (and (listp c) (eq (car c) :fuel-connection)))
+
+(defsubst fuel-con--connection-requests (c)
+  (cdr (assoc :requests c)))
+
+(defsubst fuel-con--connection-current-request (c)
+  (cdr (assoc :current c)))
+
+(defun fuel-con--connection-clean-current-request (c)
+  (let* ((cell (assoc :current c))
+         (req (cdr cell)))
+    (when req
+      (puthash (fuel-con--request-id req) req (cdr (assoc :completed c)))
+      (setcdr cell nil))))
+
+(defsubst fuel-con--connection-completed-p (c id)
+  (gethash id (cdr (assoc :completed c))))
+
+(defsubst fuel-con--connection-buffer (c)
+  (cdr (assoc :buffer c)))
+
+(defun fuel-con--connection-pop-request (c)
+  (let ((reqs (assoc :requests c))
+        (current (assoc :current c)))
+    (setcdr current (prog1 (cadr reqs) (setcdr reqs (cddr reqs))))
+    (if (and (cdr current)
+             (fuel-con--request-deactivated-p (cdr current)))
+        (fuel-con--connection-pop-request c)
+      (cdr current))))
+
+(defun fuel-con--connection-start-timer (c)
+  (let ((cell (assoc :timer c)))
+    (when (cdr cell) (cancel-timer (cdr cell)))
+    (setcdr cell (run-at-time t 0.5 'fuel-con--process-next c))))
+
+(defun fuel-con--connection-cancel-timer (c)
+  (let ((cell (assoc :timer c)))
+    (when (cdr cell) (cancel-timer (cdr cell)))))
+
+\f
+;;; Connection setup:
+
+(defun fuel-con--cleanup-connection (c)
+  (fuel-con--connection-cancel-timer c))
+
+(defun fuel-con--setup-connection (buffer)
+  (set-buffer buffer)
+  (fuel-con--cleanup-connection fuel-con--connection)
+  (let ((conn (fuel-con--make-connection buffer)))
+    (fuel-con--setup-comint)
+    (prog1
+        (setq fuel-con--connection conn)
+      (fuel-con--connection-start-timer conn))))
+
+(defconst fuel-con--prompt-regex "( .+ ) ")
+(defconst fuel-con--eot-marker "EOT:")
+(defconst fuel-con--init-stanza (format "USE: fuel %S write" fuel-con--eot-marker))
+
+(defconst fuel-con--comint-finished-regex
+  (format "%s%s" fuel-con--eot-marker fuel-con--prompt-regex))
+
+(defun fuel-con--setup-comint ()
+  (comint-redirect-cleanup)
+  (add-hook 'comint-redirect-filter-functions
+            'fuel-con--comint-redirect-filter t t)
+  (add-hook 'comint-redirect-hook
+            'fuel-con--comint-redirect-hook nil t))
+
+(defadvice comint-redirect-setup (after fuel-con--advice activate)
+  (setq comint-redirect-finished-regexp fuel-con--comint-finished-regex))
+
+\f
+;;; Requests handling:
+
+(defun fuel-con--process-next (con)
+  (when (not (fuel-con--connection-current-request con))
+    (let* ((buffer (fuel-con--connection-buffer con))
+           (req (fuel-con--connection-pop-request con))
+           (str (and req (fuel-con--request-string req))))
+      (if (not (buffer-live-p buffer))
+          (fuel-con--connection-cancel-timer con)
+        (when (and buffer req str)
+          (set-buffer buffer)
+          (fuel-log--info "<%s>: %s" (fuel-con--request-id req) str)
+          (comint-redirect-send-command (format "%s" str)
+                                        (fuel-log--buffer) nil t))))))
+
+(defun fuel-con--process-completed-request (req)
+  (let ((str (fuel-con--request-output req))
+        (cont (fuel-con--request-continuation req))
+        (id (fuel-con--request-id req))
+        (rstr (fuel-con--request-string req))
+        (buffer (fuel-con--request-buffer req)))
+    (if (not cont)
+        (fuel-log--warn "<%s> Droping result for request %S (%s)"
+                            id rstr str)
+      (condition-case cerr
+          (with-current-buffer (or buffer (current-buffer))
+            (funcall cont str)
+            (fuel-log--info "<%s>: processed\n\t%s" id str))
+        (error (fuel-log--error "<%s>: continuation failed %S \n\t%s"
+                                id rstr cerr))))))
+
+(defvar fuel-con--debug-comint-p nil)
+
+(defun fuel-con--comint-redirect-filter (str)
+  (if (not fuel-con--connection)
+      (fuel-log--error "No connection in buffer (%s)" str)
+    (let ((req (fuel-con--connection-current-request fuel-con--connection)))
+      (if (not req) (fuel-log--error "No current request (%s)" str)
+        (fuel-con--request-output req str)
+        (fuel-log--info "<%s>: in progress" (fuel-con--request-id req)))))
+  (if fuel-con--debug-comint-p (fuel--shorten-str str 256) ""))
+
+(defun fuel-con--comint-redirect-hook ()
+  (if (not fuel-con--connection)
+      (fuel-log--error "No connection in buffer")
+    (let ((req (fuel-con--connection-current-request fuel-con--connection)))
+      (if (not req) (fuel-log--error "No current request")
+        (fuel-con--process-completed-request req)
+        (fuel-con--connection-clean-current-request fuel-con--connection)))))
+
+\f
+;;; Message sending interface:
+
+(defun fuel-con--send-string (buffer/proc str cont &optional sender-buffer)
+  (save-current-buffer
+    (let ((con (fuel-con--get-connection buffer/proc)))
+      (unless con
+        (error "FUEL: couldn't find connection"))
+      (let ((req (fuel-con--make-request str cont sender-buffer)))
+        (fuel-con--connection-queue-request con req)
+        (fuel-con--process-next con)
+        req))))
+
+(defvar fuel-connection-timeout 30000
+  "Time limit, in msecs, blocking on synchronous evaluation requests")
+
+(defun fuel-con--send-string/wait (buffer/proc str cont &optional timeout sbuf)
+  (save-current-buffer
+    (let* ((con (fuel-con--get-connection buffer/proc))
+           (req (fuel-con--send-string buffer/proc str cont sbuf))
+           (id (and req (fuel-con--request-id req)))
+           (time (or timeout fuel-connection-timeout))
+           (step 100)
+           (waitsecs (/ step 1000.0)))
+      (when id
+        (condition-case nil
+            (while (and (> time 0)
+                        (not (fuel-con--connection-completed-p con id)))
+              (accept-process-output nil waitsecs)
+              (setq time (- time step)))
+          (error (setq time 1)))
+        (or (> time 0)
+            (fuel-con--request-deactivate req)
+            nil)))))
+
+\f
+(provide 'fuel-connection)
+;;; fuel-connection.el ends here
index b3aad7f3dcc1597d967aef5578d75abce6198046..46c1f74f0f0fe3ef482db89db48edcbf8a726638 100644 (file)
       (setq fuel-debug--last-ret ret)
       (setq fuel-debug--file file)
       (goto-char (point-max))
+      (font-lock-fontify-buffer)
       (when (and err (not no-pop)) (pop-to-buffer fuel-debug--buffer))
       (not err))))
 
          (trail (and last (substring-no-properties last (/ llen 2))))
          (err (fuel-eval--retort-error ret))
          (p (point)))
-    (save-excursion (insert current))
+    (when current (save-excursion (insert current)))
     (when (and (> clen llen) (> llen 0) (search-forward trail nil t))
       (delete-region p (point)))
     (goto-char (point-max))
              (buffer (if file (find-file-noselect file) (current-buffer))))
         (with-current-buffer buffer
           (fuel-debug--display-retort
-           (fuel-eval--eval-string/context (format ":%s" n))
+           (fuel-eval--send/wait `(:fuel ((:factor ,(format ":%s" n)))))
            (format "Restart %s (%s) successful" n (nth (1- n) rs))))))))
 
 (defun fuel-debug-show--compiler-info (info)
       (error "%s information not available" info))
     (message "Retrieving %s info ..." info)
     (unless (fuel-debug--display-retort
-             (fuel-eval--eval-string info) "" (fuel-debug--buffer-file))
+             (fuel-eval--send/wait `(:fuel ((:factor ,info))))
+             "" (fuel-debug--buffer-file))
       (error "Sorry, no %s info available" info))))
 
 \f
@@ -252,13 +254,14 @@ invoking restarts as needed.
 \\{fuel-debug-mode-map}"
   (interactive)
   (kill-all-local-variables)
+  (buffer-disable-undo)
   (setq major-mode 'factor-mode)
   (setq mode-name "Fuel Debug")
   (use-local-map fuel-debug-mode-map)
   (fuel-debug--font-lock-setup)
   (setq fuel-debug--file nil)
   (setq fuel-debug--last-ret nil)
-  (toggle-read-only 1)
+  (setq buffer-read-only t)
   (run-hooks 'fuel-debug-mode-hook))
 
 \f
index 62001cc48c2785f6228a196275a2f4c8e7bd96d7..ca71012ec54777532ee5fbdca6a517ae583c766e 100644 (file)
@@ -1,4 +1,4 @@
-;;; fuel-eval.el --- utilities for communication with fuel-listener
+;;; fuel-eval.el --- evaluating Factor expressions
 
 ;; Copyright (C) 2008  Jose Antonio Ortega Ruiz
 ;; See http://factorcode.org/license.txt for BSD license.
@@ -9,18 +9,75 @@
 
 ;;; Commentary:
 
-;; Protocols for handling communications via a comint buffer running a
-;; factor listener.
+;; Protocols for sending evaluations to the Factor listener.
 
 ;;; Code:
 
 (require 'fuel-base)
 (require 'fuel-syntax)
+(require 'fuel-connection)
+
+(eval-when-compile (require 'cl))
 
 \f
-;;; Syncronous string sending:
+;;; Simple sexp-based representation of factor code
+
+(defun factor (sexp)
+  (cond ((null sexp) "f")
+        ((eq sexp t) "t")
+        ((or (stringp sexp) (numberp sexp)) (format "%S" sexp))
+        ((vectorp sexp) (cons :quotation (append sexp nil)))
+        ((listp sexp)
+         (case (car sexp)
+           (:array (factor--seq 'V{ '} (cdr sexp)))
+           (:quote (format "\\ %s" (factor `(:factor ,(cadr sexp)))))
+           (:quotation (factor--seq '\[ '\] (cdr sexp)))
+           (:factor (format "%s" (mapconcat 'identity (cdr sexp) " ")))
+           (:fuel (factor--fuel-factor (cons :rs (cdr sexp))))
+           (:fuel* (factor--fuel-factor (cons :nrs (cdr sexp))))
+           (t (mapconcat 'factor sexp " "))))
+        ((keywordp sexp)
+         (factor (case sexp
+                   (:rs 'fuel-eval-restartable)
+                   (:nrs 'fuel-eval-non-restartable)
+                   (:in (fuel-syntax--current-vocab))
+                   (:usings `(:array ,@(fuel-syntax--usings)))
+                   (:get 'fuel-eval-set-result)
+                   (t `(:factor ,(symbol-name sexp))))))
+        ((symbolp sexp) (symbol-name sexp))))
+
+(defsubst factor--seq (begin end forms)
+  (format "%s %s %s" begin (if forms (factor forms) "") end))
+
+(defsubst factor--fuel-factor (sexp)
+  (factor `(,(factor--fuel-restart (nth 0 sexp))
+            ,(factor--fuel-lines (nth 1 sexp))
+            ,(factor--fuel-in (nth 2 sexp))
+            ,(factor--fuel-usings (nth 3 sexp))
+            fuel-eval-in-context)))
+
+(defsubst factor--fuel-restart (rs)
+  (unless (member rs '(:rs :nrs))
+    (error "Invalid restart spec (%s)" rs))
+  rs)
+
+(defsubst factor--fuel-lines (lst)
+  (cons :array (mapcar 'factor lst)))
+
+(defsubst factor--fuel-in (in)
+  (cond ((null in) :in)
+        ((eq in t) "fuel-scratchpad")
+        ((stringp in) in)
+        (t (error "Invalid 'in' (%s)" in))))
+
+(defsubst factor--fuel-usings (usings)
+  (cond ((null usings) :usings)
+        ((eq usings t) nil)
+        ((listp usings) `(:array ,@usings))
+        (t (error "Invalid 'usings' (%s)" usings))))
 
-(defvar fuel-eval-log-max-length 16000)
+\f
+;;; Code sending:
 
 (defvar fuel-eval--default-proc-function nil)
 (defsubst fuel-eval--default-proc ()
        (funcall fuel-eval--default-proc-function)))
 
 (defvar fuel-eval--proc nil)
-(defvar fuel-eval--log t)
-
-(defun fuel-eval--send-string (str)
-  (let ((proc (or fuel-eval--proc (fuel-eval--default-proc))))
-    (when proc
-      (with-current-buffer (get-buffer-create "*factor messages*")
-        (goto-char (point-max))
-        (when (and (> fuel-eval-log-max-length 0)
-                   (> (point) fuel-eval-log-max-length))
-          (erase-buffer))
-        (when fuel-eval--log (insert "\n>> " (fuel--shorten-str str 256)))
-        (newline)
-        (let ((beg (point)))
-          (comint-redirect-send-command-to-process str (current-buffer) proc nil t)
-          (with-current-buffer (process-buffer proc)
-            (while (not comint-redirect-completed) (sleep-for 0 1)))
-          (goto-char beg)
-          (current-buffer))))))
+
+(defvar fuel-eval--sync-retort nil)
+
+(defun fuel-eval--send/wait (code &optional timeout buffer)
+  (setq fuel-eval--sync-retort nil)
+  (fuel-con--send-string/wait (or fuel-eval--proc (fuel-eval--default-proc))
+                              (if (stringp code) code (factor code))
+                              '(lambda (s)
+                                 (setq fuel-eval--sync-retort
+                                       (fuel-eval--parse-retort s)))
+                              timeout
+                              buffer)
+  fuel-eval--sync-retort)
+
+(defun fuel-eval--send (code cont &optional buffer)
+  (fuel-con--send-string (or fuel-eval--proc (fuel-eval--default-proc))
+                         (if (stringp code) code (factor code))
+                         `(lambda (s) (,cont (fuel-eval--parse-retort s)))
+                         buffer))
 
 \f
-;;; Evaluation protocol
+;;; Retort and retort-error datatypes:
 
 (defsubst fuel-eval--retort-make (err result &optional output)
   (list err result output))
 (defsubst fuel-eval--retort-p (ret) (listp ret))
 
 (defsubst fuel-eval--make-parse-error-retort (str)
-  (fuel-eval--retort-make 'parse-retort-error nil str))
+  (fuel-eval--retort-make (cons 'fuel-parse-retort-error str) nil))
 
-(defun fuel-eval--parse-retort (buffer)
+(defun fuel-eval--parse-retort (str)
   (save-current-buffer
-    (set-buffer buffer)
     (condition-case nil
-        (read (current-buffer))
-      (error (fuel-eval--make-parse-error-retort
-              (buffer-substring-no-properties (point) (point-max)))))))
-
-(defsubst fuel-eval--send/retort (str)
-  (fuel-eval--parse-retort (fuel-eval--send-string str)))
-
-(defsubst fuel-eval--eval-begin ()
-  (fuel-eval--send/retort "fuel-begin-eval"))
-
-(defsubst fuel-eval--eval-end ()
-  (fuel-eval--send/retort "fuel-begin-eval"))
-
-(defsubst fuel-eval--factor-array (strs)
-  (format "V{ %S }" (mapconcat 'identity strs " ")))
-
-(defsubst fuel-eval--eval-strings (strs &optional no-restart)
-  (let ((str (format "fuel-eval-%s %s fuel-eval"
-                     (if no-restart "non-restartable" "restartable")
-                     (fuel-eval--factor-array strs))))
-    (fuel-eval--send/retort str)))
-
-(defsubst fuel-eval--eval-string (str &optional no-restart)
-  (fuel-eval--eval-strings (list str) no-restart))
-
-(defun fuel-eval--eval-strings/context (strs &optional no-restart)
-  (let ((usings (fuel-syntax--usings-update)))
-    (fuel-eval--send/retort
-     (format "fuel-eval-%s %s %S %s fuel-eval-in-context"
-             (if no-restart "non-restartable" "restartable")
-             (fuel-eval--factor-array strs)
-             (or fuel-syntax--current-vocab "f")
-             (if usings (fuel-eval--factor-array usings) "f")))))
-
-(defsubst fuel-eval--eval-string/context (str &optional no-restart)
-  (fuel-eval--eval-strings/context (list str) no-restart))
-
-(defun fuel-eval--eval-region/context (begin end &optional no-restart)
-  (let ((lines (split-string (buffer-substring-no-properties begin end)
-                             "[\f\n\r\v]+" t)))
-    (when (> (length lines) 0)
-      (fuel-eval--eval-strings/context lines no-restart))))
-
-\f
-;;; Error parsing
+        (let ((ret (car (read-from-string str))))
+          (if (fuel-eval--retort-p ret) ret (error)))
+      (error (fuel-eval--make-parse-error-retort str)))))
 
 (defsubst fuel-eval--error-name (err) (car err))
 
index 4c710635ba56d4b8b4f33f3fc7fef84eab9c312d..ba2a499b4bee3e9c772925d9a6d6004b06e184f2 100644 (file)
@@ -57,7 +57,7 @@
     (,fuel-syntax--type-definition-regex 2 'factor-font-lock-type-name)
     (,fuel-syntax--method-definition-regex (1 'factor-font-lock-type-name)
                                            (2 'factor-font-lock-word))
-    (,fuel-syntax--parent-type-regex 1 'factor-font-lock-type)
+    (,fuel-syntax--parent-type-regex 1 'factor-font-lock-type-name)
     (,fuel-syntax--constructor-regex . 'factor-font-lock-constructor)
     (,fuel-syntax--setter-regex . 'factor-font-lock-setter-word)
     (,fuel-syntax--symbol-definition-regex 2 'factor-font-lock-symbol)
index 1db9b25d69787b9c30c8db57292f96ec8dfefde5..1b0890ef9b1e5205ffd3278f9cc483e17b90ad67 100644 (file)
 
 ;;; Code:
 
-(require 'fuel-base)
-(require 'fuel-font-lock)
 (require 'fuel-eval)
+(require 'fuel-completion)
+(require 'fuel-font-lock)
+(require 'fuel-base)
 
 \f
 ;;; Customization:
   :type 'hook
   :group 'fuel-help)
 
+(defcustom fuel-help-history-cache-size 50
+  "Maximum number of pages to keep in the help browser cache."
+  :type 'integer
+  :group 'fuel-help)
+
 (defface fuel-help-font-lock-headlines '((t (:bold t :weight bold)))
   "Face for headlines in help buffers."
   :group 'fuel-help
 
 (defun fuel-help--word-synopsis (&optional word)
   (let ((word (or word (fuel-syntax-symbol-at-point)))
-        (fuel-eval--log t))
+        (fuel-log--inhibit-p t))
     (when word
-      (let ((ret (fuel-eval--eval-string/context
-                  (format "\\ %s synopsis fuel-eval-set-result" word)
-                  t)))
-        (when (not (fuel-eval--retort-error ret))
+      (let* ((cmd `(:fuel* (((:quote ,word) synopsis :get)) t))
+             (ret (fuel-eval--send/wait cmd 20)))
+        (when (and ret (not (fuel-eval--retort-error ret)))
           (if fuel-help-minibuffer-font-lock
               (fuel-help--font-lock-str (fuel-eval--retort-result ret))
             (fuel-eval--retort-result ret)))))))
@@ -101,16 +106,140 @@ displayed in the minibuffer."
   (message "Fuel Autodoc %s" (if fuel-autodoc-mode "enabled" "disabled")))
 
 \f
-;;;; Factor help mode:
+;;; Help browser history:
+
+(defvar fuel-help--history
+  (list nil                                        ; current
+        (make-ring fuel-help-history-cache-size)   ; previous
+        (make-ring fuel-help-history-cache-size))) ; next
+
+(defvar fuel-help--history-idx 0)
 
-(defvar fuel-help-mode-map (make-sparse-keymap)
-  "Keymap for Factor help mode.")
+(defun fuel-help--history-push (term)
+  (when (and (car fuel-help--history)
+             (not (string= (caar fuel-help--history) (car term))))
+    (ring-insert (nth 1 fuel-help--history) (car fuel-help--history)))
+  (setcar fuel-help--history term))
 
-(define-key fuel-help-mode-map [(return)] 'fuel-help)
+(defun fuel-help--history-next ()
+  (when (not (ring-empty-p (nth 2 fuel-help--history)))
+    (when (car fuel-help--history)
+      (ring-insert (nth 1 fuel-help--history) (car fuel-help--history)))
+    (setcar fuel-help--history (ring-remove (nth 2 fuel-help--history) 0))))
+
+(defun fuel-help--history-previous ()
+  (when (not (ring-empty-p (nth 1 fuel-help--history)))
+    (when (car fuel-help--history)
+      (ring-insert (nth 2 fuel-help--history) (car fuel-help--history)))
+    (setcar fuel-help--history (ring-remove (nth 1 fuel-help--history) 0))))
+
+\f
+;;; Fuel help buffer and internals:
+
+(defun fuel-help--help-buffer ()
+  (with-current-buffer (get-buffer-create "*fuel help*")
+    (fuel-help-mode)
+    (current-buffer)))
+
+(defvar fuel-help--prompt-history nil)
+
+(defun fuel-help--show-help (&optional see word)
+  (let* ((def (or word (fuel-syntax-symbol-at-point)))
+         (prompt (format "See%s help on%s: " (if see " short" "")
+                         (if def (format " (%s)" def) "")))
+         (ask (or (not (memq major-mode '(factor-mode fuel-help-mode)))
+                  (not def)
+                  fuel-help-always-ask))
+         (def (if ask (fuel-completion--read-word prompt
+                                                  def
+                                                  'fuel-help--prompt-history)
+                def))
+         (cmd `(:fuel* ((:quote ,def) ,(if see 'see 'help)) t)))
+    (message "Looking up '%s' ..." def)
+    (fuel-eval--send cmd `(lambda (r) (fuel-help--show-help-cont ,def r)))))
+
+(defun fuel-help--show-help-cont (def ret)
+  (let ((out (fuel-eval--retort-output ret)))
+    (if (or (fuel-eval--retort-error ret) (empty-string-p out))
+        (message "No help for '%s'" def)
+      (fuel-help--insert-contents def out))))
+
+(defun fuel-help--insert-contents (def str &optional nopush)
+  (let ((hb (fuel-help--help-buffer))
+        (inhibit-read-only t)
+        (font-lock-verbose nil))
+    (set-buffer hb)
+    (erase-buffer)
+    (insert str)
+    (unless nopush
+      (goto-char (point-min))
+      (when (re-search-forward (format "^%s" def) nil t)
+        (beginning-of-line)
+        (kill-region (point-min) (point))
+        (next-line)
+        (open-line 1)
+        (fuel-help--history-push (cons def (buffer-string)))))
+    (set-buffer-modified-p nil)
+    (pop-to-buffer hb)
+    (goto-char (point-min))
+    (message "%s" def)))
+
+\f
+;;; Interactive help commands:
+
+(defun fuel-help-short (&optional arg)
+  "See a help summary of symbol at point.
+By default, the information is shown in the minibuffer. When
+called with a prefix argument, the information is displayed in a
+separate help buffer."
+  (interactive "P")
+  (if (if fuel-help-use-minibuffer (not arg) arg)
+      (fuel-help--word-synopsis)
+    (fuel-help--show-help t)))
+
+(defun fuel-help ()
+  "Show extended help about the symbol at point, using a help
+buffer."
+  (interactive)
+  (fuel-help--show-help))
+
+(defun fuel-help-next ()
+  "Go to next page in help browser."
+  (interactive)
+  (let ((item (fuel-help--history-next))
+        (fuel-help-always-ask nil))
+    (unless item
+      (error "No next page"))
+    (fuel-help--insert-contents (car item) (cdr item) t)))
+
+(defun fuel-help-previous ()
+  "Go to next page in help browser."
+  (interactive)
+  (let ((item (fuel-help--history-previous))
+        (fuel-help-always-ask nil))
+    (unless item
+      (error "No previous page"))
+    (fuel-help--insert-contents (car item) (cdr item) t)))
+
+\f
+;;;; Factor help mode:
+
+(defvar fuel-help-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "\C-m" 'fuel-help)
+    (define-key map "q" 'bury-buffer)
+    (define-key map "b" 'fuel-help-previous)
+    (define-key map "f" 'fuel-help-next)
+    (define-key map "l" 'fuel-help-previous)
+    (define-key map "n" 'fuel-help-next)
+    (define-key map (kbd "SPC")  'scroll-up)
+    (define-key map (kbd "S-SPC") 'scroll-down)
+    map))
 
 (defconst fuel-help--headlines
   (regexp-opt '("Class description"
                 "Definition"
+                "Errors"
                 "Examples"
                 "Generic word contract"
                 "Inputs and outputs"
@@ -119,6 +248,8 @@ displayed in the minibuffer."
                 "Parent topics:"
                 "See also"
                 "Syntax"
+                "Variable description"
+                "Variable value"
                 "Vocabulary"
                 "Warning"
                 "Word description")
@@ -131,78 +262,22 @@ displayed in the minibuffer."
     (,fuel-help--headlines-regexp . 'fuel-help-font-lock-headlines)))
 
 (defun fuel-help-mode ()
-  "Major mode for displaying Factor documentation.
+  "Major mode for browsing Factor documentation.
 \\{fuel-help-mode-map}"
   (interactive)
   (kill-all-local-variables)
+  (buffer-disable-undo)
   (use-local-map fuel-help-mode-map)
   (setq mode-name "Factor Help")
   (setq major-mode 'fuel-help-mode)
 
   (fuel-font-lock--font-lock-setup fuel-help--font-lock-keywords t)
 
-  (set (make-local-variable 'view-no-disable-on-exit) t)
-  (view-mode)
-  (setq view-exit-action
-        (lambda (buffer)
-          ;; Use `with-current-buffer' to make sure that `bury-buffer'
-          ;; also removes BUFFER from the selected window.
-          (with-current-buffer buffer
-            (bury-buffer))))
-
   (setq fuel-autodoc-mode-string "")
   (fuel-autodoc-mode)
-  (run-mode-hooks 'fuel-help-mode-hook))
-
-(defun fuel-help--help-buffer ()
-  (with-current-buffer (get-buffer-create "*fuel-help*")
-    (fuel-help-mode)
-    (current-buffer)))
-
-(defvar fuel-help--history nil)
-
-(defun fuel-help--show-help (&optional see)
-  (let* ((def (fuel-syntax-symbol-at-point))
-         (prompt (format "See%s help on%s: " (if see " short" "")
-                         (if def (format " (%s)" def) "")))
-         (ask (or (not (memq major-mode '(factor-mode fuel-help-mode)))
-                  (not def)
-                  fuel-help-always-ask))
-         (def (if ask (read-string prompt nil 'fuel-help--history def) def))
-         (cmd (format "\\ %s %s" def (if see "see" "help")))
-         (fuel-eval--log nil)
-         (ret (fuel-eval--eval-string/context cmd t))
-         (out (fuel-eval--retort-output ret)))
-    (if (or (fuel-eval--retort-error ret) (empty-string-p out))
-        (message "No help for '%s'" def)
-      (let ((hb (fuel-help--help-buffer))
-            (inhibit-read-only t)
-            (font-lock-verbose nil))
-        (set-buffer hb)
-        (erase-buffer)
-        (insert out)
-        (set-buffer-modified-p nil)
-        (pop-to-buffer hb)
-        (goto-char (point-min))))))
-
-\f
-;;; Interface: see/help commands
-
-(defun fuel-help-short (&optional arg)
-  "See a help summary of symbol at point.
-By default, the information is shown in the minibuffer. When
-called with a prefix argument, the information is displayed in a
-separate help buffer."
-  (interactive "P")
-  (if (if fuel-help-use-minibuffer (not arg) arg)
-      (fuel-help--word-synopsis)
-    (fuel-help--show-help t)))
 
-(defun fuel-help ()
-  "Show extended help about the symbol at point, using a help
-buffer."
-  (interactive)
-  (fuel-help--show-help))
+  (run-mode-hooks 'fuel-help-mode-hook)
+  (setq buffer-read-only t))
 
 \f
 (provide 'fuel-help)
index 9fa330993c2015a6201b70ed18558014480ff5f5..c1e8d670cf8705920c26cc8aba9fc067bfd65209 100644 (file)
 ;;; Code:
 
 (require 'fuel-eval)
+(require 'fuel-completion)
+(require 'fuel-connection)
+(require 'fuel-syntax)
 (require 'fuel-base)
+
 (require 'comint)
 
 \f
@@ -49,29 +53,37 @@ buffer."
 \f
 ;;; Fuel listener buffer/process:
 
-(defvar fuel-listener-buffer nil
+(defvar fuel-listener--buffer nil
   "The buffer in which the Factor listener is running.")
 
+(defun fuel-listener--buffer ()
+  (if (buffer-live-p fuel-listener--buffer)
+      fuel-listener--buffer
+    (with-current-buffer (get-buffer-create "*fuel listener*")
+      (fuel-listener-mode)
+      (setq fuel-listener--buffer (current-buffer)))))
+
 (defun fuel-listener--start-process ()
   (let ((factor (expand-file-name fuel-listener-factor-binary))
-        (image (expand-file-name fuel-listener-factor-image)))
+        (image (expand-file-name fuel-listener-factor-image))
+        (comint-redirect-perform-sanity-check nil))
     (unless (file-executable-p factor)
       (error "Could not run factor: %s is not executable" factor))
     (unless (file-readable-p image)
       (error "Could not run factor: image file %s not readable" image))
-    (setq fuel-listener-buffer (get-buffer-create "*fuel listener*"))
-    (with-current-buffer fuel-listener-buffer
-      (fuel-listener-mode)
-      (message "Starting FUEL listener ...")
-      (comint-exec fuel-listener-buffer "factor"
-                   factor nil `("-run=fuel" ,(format "-i=%s" image)))
-      (fuel-listener--wait-for-prompt 20)
-      (fuel-eval--send-string "USE: fuel")
-      (message "FUEL listener up and running!"))))
+    (message "Starting FUEL listener ...")
+    (pop-to-buffer (fuel-listener--buffer))
+    (make-comint-in-buffer "fuel listener" (current-buffer) factor nil
+                           "-run=listener" (format "-i=%s" image))
+    (fuel-listener--wait-for-prompt 10000)
+    (fuel-con--send-string/wait (current-buffer)
+                                fuel-con--init-stanza
+                                '(lambda (s) (message "FUEL listener up and running!"))
+                                20000)))
 
 (defun fuel-listener--process (&optional start)
-  (or (and (buffer-live-p fuel-listener-buffer)
-           (get-buffer-process fuel-listener-buffer))
+  (or (and (buffer-live-p (fuel-listener--buffer))
+           (get-buffer-process (fuel-listener--buffer)))
       (if (not start)
           (error "No running factor listener (try M-x run-factor)")
         (fuel-listener--start-process)
@@ -79,22 +91,26 @@ buffer."
 
 (setq fuel-eval--default-proc-function 'fuel-listener--process)
 
+(defun fuel-listener--wait-for-prompt (timeout)
+  (let ((p (point)) (seen))
+    (while (and (not seen) (> timeout 0))
+      (sleep-for 0.1)
+      (setq timeout (- timeout 100))
+      (goto-char p)
+      (setq seen (re-search-forward comint-prompt-regexp nil t)))
+    (goto-char (point-max))
+    (unless seen (error "No prompt found!"))))
+
 \f
-;;; Prompt chasing
-
-(defun fuel-listener--wait-for-prompt (&optional timeout)
-    (let ((proc (get-buffer-process fuel-listener-buffer))
-          (seen))
-      (with-current-buffer fuel-listener-buffer
-        (while (progn (goto-char comint-last-input-end)
-                      (not (or seen
-                               (setq seen
-                                     (re-search-forward comint-prompt-regexp nil t))
-                               (not (accept-process-output proc timeout))))))
-        (goto-char (point-max)))
-      (unless seen
-        (pop-to-buffer fuel-listener-buffer)
-        (error "No prompt found!"))))
+;;; Completion support
+
+(defsubst fuel-listener--current-vocab () nil)
+(defsubst fuel-listener--usings () nil)
+
+(defun fuel-listener--setup-completion ()
+  (setq fuel-syntax--current-vocab-function 'fuel-listener--current-vocab)
+  (setq fuel-syntax--usings-function 'fuel-listener--usings)
+  (set-syntax-table fuel-syntax--syntax-table))
 
 \f
 ;;; Interface: starting fuel listener
@@ -114,19 +130,22 @@ buffer."
 \f
 ;;; Fuel listener mode:
 
-(defconst fuel-listener--prompt-regex "( [^)]* ) ")
-
 (define-derived-mode fuel-listener-mode comint-mode "Fuel Listener"
   "Major mode for interacting with an inferior Factor listener process.
 \\{fuel-listener-mode-map}"
-  (set (make-local-variable 'comint-prompt-regexp)
-       fuel-listener--prompt-regex)
+  (set (make-local-variable 'comint-prompt-regexp) fuel-con--prompt-regex)
   (set (make-local-variable 'comint-prompt-read-only) t)
-  (setq fuel-listener--compilation-begin nil))
+  (fuel-listener--setup-completion))
 
+(define-key fuel-listener-mode-map "\C-cz" 'run-factor)
+(define-key fuel-listener-mode-map "\C-c\C-z" 'run-factor)
+(define-key fuel-listener-mode-map "\C-ca" 'fuel-autodoc-mode)
 (define-key fuel-listener-mode-map "\C-ch" 'fuel-help)
 (define-key fuel-listener-mode-map "\M-." 'fuel-edit-word-at-point)
+(define-key fuel-listener-mode-map "\C-cv" 'fuel-edit-vocabulary)
+(define-key fuel-listener-mode-map "\C-c\C-v" 'fuel-edit-vocabulary)
 (define-key fuel-listener-mode-map "\C-ck" 'fuel-run-file)
+(define-key fuel-listener-mode-map (kbd "TAB") 'fuel-completion--complete-symbol)
 
 \f
 (provide 'fuel-listener)
diff --git a/misc/fuel/fuel-log.el b/misc/fuel/fuel-log.el
new file mode 100644 (file)
index 0000000..fee762d
--- /dev/null
@@ -0,0 +1,77 @@
+;;; fuel-log.el -- logging utilities
+
+;; Copyright (C) 2008 Jose Antonio Ortega Ruiz
+;; See http://factorcode.org/license.txt for BSD license.
+
+;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
+;; Keywords: languages, fuel, factor
+;; Start date: Sun Dec 14, 2008 01:00
+
+;;; Comentary:
+
+;; Some utilities for maintaining a simple log buffer, mainly for
+;; debugging purposes.
+
+;;; Code:
+
+(require 'fuel-base)
+
+\f
+;;; Customization:
+
+(defvar fuel-log--buffer-name "*fuel messages*"
+  "Name of the log buffer")
+
+(defvar fuel-log--max-buffer-size 32000
+  "Maximum size of the Factor messages log")
+
+(defvar fuel-log--max-message-size 512
+  "Maximum size of individual log messages")
+
+(defvar fuel-log--verbose-p t
+  "Log level for Factor messages")
+
+(defvar fuel-log--inhibit-p nil
+  "Set this to t to inhibit all log messages")
+
+(define-derived-mode factor-messages-mode fundamental-mode "FUEL Messages"
+  "Simple mode to log interactions with the factor listener"
+  (kill-all-local-variables)
+  (buffer-disable-undo)
+  (set (make-local-variable 'comint-redirect-subvert-readonly) t)
+  (add-hook 'after-change-functions
+            '(lambda (b e len)
+               (let ((inhibit-read-only t))
+                 (when (> b fuel-log--max-buffer-size)
+                   (delete-region (point-min) b))))
+            nil t)
+  (setq buffer-read-only t))
+
+(defun fuel-log--buffer ()
+  (or (get-buffer fuel-log--buffer-name)
+      (save-current-buffer
+        (set-buffer (get-buffer-create fuel-log--buffer-name))
+        (factor-messages-mode)
+        (current-buffer))))
+
+(defun fuel-log--msg (type &rest args)
+  (unless fuel-log--inhibit-p
+    (with-current-buffer (fuel-log--buffer)
+      (let ((inhibit-read-only t))
+        (insert
+         (fuel--shorten-str (format "\n%s: %s\n" type (apply 'format args))
+                            fuel-log--max-message-size))))))
+
+(defsubst fuel-log--warn (&rest args)
+  (apply 'fuel-log--msg 'WARNING args))
+
+(defsubst fuel-log--error (&rest args)
+  (apply 'fuel-log--msg 'ERROR args))
+
+(defsubst fuel-log--info (&rest args)
+  (when fuel-log--verbose-p
+    (apply 'fuel-log--msg 'INFO args) ""))
+
+\f
+(provide 'fuel-log)
+;;; fuel-log.el ends here
index ea1d4b93ed0c196ddcebd387eaff22f6f4c89d81..b93160518375dc4138dc4a04fd0de9d332c5c5c8 100644 (file)
@@ -21,6 +21,7 @@
 (require 'fuel-debug)
 (require 'fuel-help)
 (require 'fuel-eval)
+(require 'fuel-completion)
 (require 'fuel-listener)
 
 \f
@@ -45,31 +46,37 @@ With prefix argument, ask for the file to run."
   (let* ((file (or (and arg (read-file-name "File: " nil (buffer-file-name) t))
                    (buffer-file-name)))
          (file (expand-file-name file))
-         (buffer (find-file-noselect file))
-         (cmd (format "%S fuel-run-file" file)))
+         (buffer (find-file-noselect file)))
     (when buffer
       (with-current-buffer buffer
         (message "Compiling %s ..." file)
-        (let ((r (fuel-debug--display-retort (fuel-eval--eval-string/context cmd)
-                                             (format "%s successfully compiled" file)
-                                             nil
-                                             file)))
-          (if r (message "Compiling %s ... OK!" file) (message "")))))))
+        (fuel-eval--send `(:fuel (,file fuel-run-file))
+                         `(lambda (r) (fuel--run-file-cont r ,file)))))))
+
+(defun fuel--run-file-cont (ret file)
+  (if (fuel-debug--display-retort ret
+                                  (format "%s successfully compiled" file)
+                                  nil
+                                  file)
+      (message "Compiling %s ... OK!" file)
+    (message "")))
 
 (defun fuel-eval-region (begin end &optional arg)
   "Sends region to Fuel's listener for evaluation.
 Unless called with a prefix, switchs to the compilation results
 buffer in case of errors."
   (interactive "r\nP")
-  (fuel-debug--display-retort
-   (fuel-eval--eval-region/context begin end)
-   (format "%s%s"
-           (if fuel-syntax--current-vocab
-               (format "IN: %s " fuel-syntax--current-vocab)
-             "")
-           (fuel--shorten-region begin end 70))
-   arg
-   (buffer-file-name)))
+  (let* ((lines (split-string (buffer-substring-no-properties begin end)
+                              "[\f\n\r\v]+" t))
+         (cmd `(:fuel (,(mapcar (lambda (l) `(:factor ,l)) lines))))
+         (cv (fuel-syntax--current-vocab)))
+    (fuel-debug--display-retort
+     (fuel-eval--send/wait cmd 10000)
+     (format "%s%s"
+             (if cv (format "IN: %s " cv) "")
+             (fuel--shorten-region begin end 70))
+     arg
+     (buffer-file-name))))
 
 (defun fuel-eval-extended-region (begin end &optional arg)
   "Sends region extended outwards to nearest definitions,
@@ -93,28 +100,58 @@ buffer in case of errors."
       (unless (< begin end) (error "No evaluable definition around point"))
       (fuel-eval-region begin end arg))))
 
+(defun fuel--try-edit (ret)
+  (let* ((err (fuel-eval--retort-error ret))
+         (loc (fuel-eval--retort-result ret)))
+    (when (or err (not loc) (not (listp loc)) (not (stringp (car loc))))
+      (error "Couldn't find edit location for '%s'" word))
+    (unless (file-readable-p (car loc))
+      (error "Couldn't open '%s' for read" (car loc)))
+    (find-file-other-window (car loc))
+    (goto-line (if (numberp (cadr loc)) (cadr loc) 1))))
+
 (defun fuel-edit-word-at-point (&optional arg)
   "Opens a new window visiting the definition of the word at point.
 With prefix, asks for the word to edit."
   (interactive "P")
-  (let* ((word (fuel-syntax-symbol-at-point))
-         (ask (or arg (not word)))
-         (word (if ask
-                   (read-string nil
-                                (format "Edit word%s: "
-                                        (if word (format " (%s)" word) ""))
-                                word)
-                 word)))
-    (let* ((ret (fuel-eval--eval-string/context
-                 (format "\\ %s fuel-get-edit-location" word)))
-           (err (fuel-eval--retort-error ret))
-           (loc (fuel-eval--retort-result ret)))
-      (when (or err (not loc) (not (listp loc)) (not (stringp (car loc))))
-        (error "Couldn't find edit location for '%s'" word))
-      (unless (file-readable-p (car loc))
-        (error "Couldn't open '%s' for read" (car loc)))
-      (find-file-other-window (car loc))
-      (goto-line (if (numberp (cadr loc)) (cadr loc) 1)))))
+  (let* ((word (or (and (not arg) (fuel-syntax-symbol-at-point))
+                  (fuel-completion--read-word "Edit word: ")))
+         (cmd `(:fuel ((:quote ,word) fuel-get-edit-location))))
+    (condition-case nil
+        (fuel--try-edit (fuel-eval--send/wait cmd))
+      (error (fuel-edit-vocabulary nil word)))))
+
+(defvar fuel-mode--word-history nil)
+
+(defun fuel-edit-word (&optional arg)
+  "Asks for a word to edit, with completion.
+With prefix, only words visible in the current vocabulary are
+offered."
+  (interactive "P")
+  (let* ((word (fuel-completion--read-word "Edit word: "
+                                           nil
+                                           fuel-mode--word-history
+                                           arg))
+         (cmd `(:fuel ((:quote ,word) fuel-get-edit-location))))
+    (fuel--try-edit (fuel-eval--send/wait cmd))))
+
+(defvar fuel--vocabs-prompt-history nil)
+
+(defun fuel--read-vocabulary-name (refresh)
+  (let* ((vocabs (fuel-completion--vocabs refresh))
+         (prompt "Vocabulary name: "))
+    (if vocabs
+        (completing-read prompt vocabs nil t nil fuel--vocabs-prompt-history)
+      (read-string prompt nil fuel--vocabs-prompt-history))))
+
+(defun fuel-edit-vocabulary (&optional refresh vocab)
+  "Visits vocabulary file in Emacs.
+When called interactively, asks for vocabulary with completion.
+With prefix argument, refreshes cached vocabulary list."
+  (interactive "P")
+  (let* ((vocab (or vocab (fuel--read-vocabulary-name refresh)))
+         (cmd `(:fuel* (,vocab fuel-get-vocab-location) "fuel" t)))
+    (fuel--try-edit (fuel-eval--send/wait cmd))))
 
 \f
 ;;; Minor mode definition:
@@ -155,20 +192,19 @@ interacting with a factor listener is at your disposal.
   (define-key fuel-mode-map (vector '(control ?c) `(control ,p) `(control ,k)) c))
 
 (fuel-mode--key-1 ?z 'run-factor)
-
 (fuel-mode--key-1 ?k 'fuel-run-file)
-(fuel-mode--key ?e ?k 'fuel-run-file)
-
-(define-key fuel-mode-map "\C-\M-x" 'fuel-eval-definition)
-(fuel-mode--key ?e ?x 'fuel-eval-definition)
-
 (fuel-mode--key-1 ?r 'fuel-eval-region)
-(fuel-mode--key ?e ?r 'fuel-eval-region)
 
+(define-key fuel-mode-map "\C-\M-x" 'fuel-eval-definition)
 (define-key fuel-mode-map "\C-\M-r" 'fuel-eval-extended-region)
-(fuel-mode--key ?e ?e 'fuel-eval-extended-region)
-
 (define-key fuel-mode-map "\M-." 'fuel-edit-word-at-point)
+(define-key fuel-mode-map (kbd "M-TAB") 'fuel-completion--complete-symbol)
+
+(fuel-mode--key ?e ?e 'fuel-eval-extended-region)
+(fuel-mode--key ?e ?r 'fuel-eval-region)
+(fuel-mode--key ?e ?v 'fuel-edit-vocabulary)
+(fuel-mode--key ?e ?w 'fuel-edit-word)
+(fuel-mode--key ?e ?x 'fuel-eval-definition)
 
 (fuel-mode--key ?d ?a 'fuel-autodoc-mode)
 (fuel-mode--key ?d ?d 'fuel-help)
index a0485f9183ecdf85893597a593777100dbe30a7b..936bded3a5299e874280a055ee3badfb85405f59 100644 (file)
   (while (eq (char-before) ?:) (backward-char))
   (skip-syntax-backward "w_"))
 
+(defsubst fuel-syntax--symbol-start ()
+  (save-excursion (fuel-syntax--beginning-of-symbol) (point)))
+
 (defun fuel-syntax--end-of-symbol ()
   "Move point to the end of the current symbol."
   (skip-syntax-forward "w_")
   (while (looking-at ":") (forward-char)))
 
+(defsubst fuel-syntax--symbol-end ()
+  (save-excursion (fuel-syntax--end-of-symbol) (point)))
+
 (put 'factor-symbol 'end-op 'fuel-syntax--end-of-symbol)
 (put 'factor-symbol 'beginning-op 'fuel-syntax--beginning-of-symbol)
 
@@ -34,6 +40,7 @@
   (let ((s (substring-no-properties (thing-at-point 'factor-symbol))))
     (and (> (length s) 0) s)))
 
+
 \f
 ;;; Regexps galore:
 
@@ -43,7 +50,7 @@
     "DEFER:" "ERROR:" "EXCLUDE:" "FORGET:"
     "GENERIC#" "GENERIC:" "HEX:" "HOOK:" "H{"
     "IN:" "INSTANCE:" "INTERSECTION:"
-    "M:" "MACRO:" "MACRO::" "MAIN:" "MATH:" "METHOD:" "MIXIN:"
+    "M:" "MACRO:" "MACRO::" "MAIN:" "MATH:" "MEMO:" "METHOD:" "MIXIN:"
     "OCT:" "POSTPONE:" "PREDICATE:" "PRIMITIVE:" "PRIVATE>" "PROVIDE:"
     "REQUIRE:"  "REQUIRES:" "SINGLETON:" "SLOT:" "SYMBOL:" "SYMBOLS:"
     "TUPLE:" "T{" "t\\??" "TYPEDEF:"
@@ -91,7 +98,7 @@
 (defconst fuel-syntax--sub-vocab-regex "^<\\([^ \n]+\\) *$")
 
 (defconst fuel-syntax--definition-starters-regex
-  (regexp-opt '("VARS" "TUPLE" "MACRO" "MACRO:" "M" ":" "")))
+  (regexp-opt '("VARS" "TUPLE" "MACRO" "MACRO:" "M" "MEMO" "METHOD" ":" "")))
 
 (defconst fuel-syntax--definition-start-regex
   (format "^\\(%s:\\) " fuel-syntax--definition-starters-regex))
           fuel-syntax--declaration-words-regex))
 
 (defconst fuel-syntax--single-liner-regex
-  (format "^%s" (regexp-opt '("DEFER:" "GENERIC:" "IN:"
+  (format "^%s" (regexp-opt '("C:" "DEFER:" "GENERIC:" "IN:"
                               "PRIVATE>" "<PRIVATE"
                               "SINGLETON:" "SYMBOL:" "USE:" "VAR:"))))
 
 ;;; USING/IN:
 
 (make-variable-buffer-local
- (defvar fuel-syntax--current-vocab nil))
-
-(make-variable-buffer-local
- (defvar fuel-syntax--usings nil))
-
-(defun fuel-syntax--current-vocab ()
-  (let ((ip
-         (save-excursion
-           (when (re-search-backward fuel-syntax--current-vocab-regex nil t)
-             (setq fuel-syntax--current-vocab (match-string-no-properties 1))
-             (point)))))
+ (defvar fuel-syntax--current-vocab-function 'fuel-syntax--find-in))
+
+(defsubst fuel-syntax--current-vocab ()
+  (funcall fuel-syntax--current-vocab-function))
+
+(defun fuel-syntax--find-in ()
+  (let* ((vocab)
+         (ip
+          (save-excursion
+            (when (re-search-backward fuel-syntax--current-vocab-regex nil t)
+              (setq vocab (match-string-no-properties 1))
+              (point)))))
     (when ip
       (let ((pp (save-excursion
                   (when (re-search-backward fuel-syntax--sub-vocab-regex ip t)
         (when (and pp (> pp ip))
           (let ((sub (match-string-no-properties 1)))
             (unless (save-excursion (search-backward (format "%s>" sub) pp t))
-              (setq fuel-syntax--current-vocab
-                    (format "%s.%s" fuel-syntax--current-vocab (downcase sub)))))))))
-  fuel-syntax--current-vocab)
+              (setq vocab (format "%s.%s" vocab (downcase sub))))))))
+    vocab))
 
-(defun fuel-syntax--usings-update ()
-  (save-excursion
-    (setq fuel-syntax--usings (list (fuel-syntax--current-vocab)))
-    (while (re-search-backward fuel-syntax--using-lines-regex nil t)
-      (dolist (u (split-string (match-string-no-properties 1) nil t))
-        (push u fuel-syntax--usings)))
-    fuel-syntax--usings))
-
-(defsubst fuel-syntax--usings-update-hook ()
-  (fuel-syntax--usings-update)
-  nil)
-
-(defun fuel-syntax--enable-usings ()
-  (add-hook 'before-save-hook 'fuel-syntax--usings-update-hook nil t)
-  (fuel-syntax--usings-update))
+(make-variable-buffer-local
+ (defvar fuel-syntax--usings-function 'fuel-syntax--find-usings))
 
 (defsubst fuel-syntax--usings ()
-  (or fuel-syntax--usings (fuel-syntax--usings-update)))
+  (funcall fuel-syntax--usings-function))
+
+(defun fuel-syntax--find-usings ()
+  (save-excursion
+    (let ((usings)
+          (in (fuel-syntax--current-vocab)))
+      (when in (setq usings (list in)))
+      (goto-char (point-max))
+      (while (re-search-backward fuel-syntax--using-lines-regex nil t)
+        (dolist (u (split-string (match-string-no-properties 1) nil t))
+          (push u usings)))
+      usings)))
 
 \f
 (provide 'fuel-syntax)
index 894948e44f9476dd3ce1177c688c34783223997c..90d4304eee1545837e91fcd008afb6a244be0548 100644 (file)
@@ -47,13 +47,13 @@ TUPLE: packet link id kind a1 a2 ;
 : HOLDBIT 4 ; inline
 
 : S_RUN 0 ;  inline
-: S_RUNPKT { PKTBIT } flags ; inline
-: S_WAIT { WAITBIT } flags ; inline
-: S_WAITPKT { WAITBIT PKTBIT } flags ; inline
-: S_HOLD { HOLDBIT } flags ; inline
-: S_HOLDPKT { HOLDBIT PKTBIT } flags ; inline
-: S_HOLDWAIT { HOLDBIT WAITBIT } flags ; inline
-: S_HOLDWAITPKT { HOLDBIT WAITBIT PKTBIT } flags ; inline
+: S_RUNPKT ( -- n ) { PKTBIT } flags ; inline
+: S_WAIT ( -- n ) { WAITBIT } flags ; inline
+: S_WAITPKT ( -- n ) { WAITBIT PKTBIT } flags ; inline
+: S_HOLD ( -- n ) { HOLDBIT } flags ; inline
+: S_HOLDPKT ( -- n ) { HOLDBIT PKTBIT } flags ; inline
+: S_HOLDWAIT ( -- n ) { HOLDBIT WAITBIT } flags ; inline
+: S_HOLDWAITPKT ( -- n ) { HOLDBIT WAITBIT PKTBIT } flags ; inline
 
 : task-tab-size 10 ; inline
 
diff --git a/unmaintained/assocs-lib/authors.txt b/unmaintained/assocs-lib/authors.txt
new file mode 100644 (file)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/assocs-lib/lib-tests.factor b/unmaintained/assocs-lib/lib-tests.factor
new file mode 100644 (file)
index 0000000..c7e1aa4
--- /dev/null
@@ -0,0 +1,17 @@
+USING: kernel tools.test sequences vectors assocs.lib ;
+IN: assocs.lib.tests
+
+{ 1 1 } [ [ ?push ] histogram ] must-infer-as
+
+! substitute
+[ { 2 } ] [ { 1 } H{ { 1 2 } } [ ?at drop ] curry map ] unit-test
+[ { 3 } ] [ { 3 } H{ { 1 2 } } [ ?at drop ] curry map ] unit-test
+
+[ 2 ] [ 1 H{ { 1 2 } } [ ] [ ] if-at ] unit-test
+[ 3 ] [ 3 H{ { 1 2 } } [ ] [ ] if-at ] unit-test
+
+[ "hi" ] [ 1 H{ { 1 2 } } [ drop "hi" ] when-at ] unit-test
+[ 3 ] [ 3 H{ { 1 2 } } [ drop "hi" ] when-at ] unit-test
+[ 2 ] [ 1 H{ { 1 2 } } [ drop "hi" ] unless-at ] unit-test
+[ "hi" ] [ 3 H{ { 1 2 } } [ drop "hi" ] unless-at ] unit-test
+
diff --git a/unmaintained/assocs-lib/lib.factor b/unmaintained/assocs-lib/lib.factor
new file mode 100755 (executable)
index 0000000..f1b018f
--- /dev/null
@@ -0,0 +1,49 @@
+USING: arrays assocs kernel vectors sequences namespaces
+       random math.parser math fry ;
+
+IN: assocs.lib
+
+: set-assoc-stack ( value key seq -- )
+    dupd [ key? ] with find-last nip set-at ;
+
+: at-default ( key assoc -- value/key )
+    dupd at [ nip ] when* ;
+
+: replace-at ( assoc value key -- assoc )
+    [ dupd 1vector ] dip rot set-at ;
+
+: peek-at* ( assoc key -- obj ? )
+    swap at* dup [ [ peek ] dip ] when ;
+
+: peek-at ( assoc key -- obj )
+    peek-at* drop ;
+
+: >multi-assoc ( assoc -- new-assoc )
+    [ 1vector ] assoc-map ;
+
+: multi-assoc-each ( assoc quot -- )
+    [ with each ] curry assoc-each ; inline
+
+: insert ( value variable -- ) namespace push-at ;
+
+: generate-key ( assoc -- str )
+    [ 32 random-bits >hex ] dip
+    2dup key? [ nip generate-key ] [ drop ] if ;
+
+: set-at-unique ( value assoc -- key )
+    dup generate-key [ swap set-at ] keep ;
+
+: histogram ( assoc quot -- assoc' )
+    H{ } clone [
+        swap [ change-at ] 2curry assoc-each
+    ] keep ; inline
+
+: ?at ( obj assoc -- value/obj ? )
+    dupd at* [ [ nip ] [ drop ] if ] keep ;
+
+: if-at ( obj assoc quot1 quot2 -- )
+    [ ?at ] 2dip if ; inline
+
+: when-at ( obj assoc quot -- ) [ ] if-at ; inline
+
+: unless-at ( obj assoc quot -- ) [ ] swap if-at ; inline
diff --git a/unmaintained/assocs-lib/summary.txt b/unmaintained/assocs-lib/summary.txt
new file mode 100644 (file)
index 0000000..24c2825
--- /dev/null
@@ -0,0 +1 @@
+Non-core assoc words
diff --git a/unmaintained/assocs-lib/tags.txt b/unmaintained/assocs-lib/tags.txt
new file mode 100644 (file)
index 0000000..42d711b
--- /dev/null
@@ -0,0 +1 @@
+collections
diff --git a/unmaintained/bake/authors.txt b/unmaintained/bake/authors.txt
new file mode 100644 (file)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/bake/bake-tests.factor b/unmaintained/bake/bake-tests.factor
new file mode 100644 (file)
index 0000000..64329de
--- /dev/null
@@ -0,0 +1,28 @@
+
+USING: kernel tools.test bake ;
+
+IN: bake.tests
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: unit-test* ( input output -- ) swap unit-test ;
+
+: must-be-t ( in -- ) [ t ] swap unit-test ;
+: must-be-f ( in -- ) [ f ] swap unit-test ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+[ 10 20 30 `{ , , , } ] [ { 10 20 30 } ] unit-test*
+
+[ 10 20 30 `{ , { , } , } ] [ { 10 { 20 } 30 } ] unit-test*
+
+[ 10 { 20 21 22 } 30 `{ , , , } ] [ { 10 { 20 21 22 } 30 } ] unit-test*
+
+[ 10 { 20 21 22 } 30 `{ , @ , } ] [ { 10 20 21 22 30 } ] unit-test*
+
+[ { 1 2 3 } `{ @ } ] [ { 1 2 3 } ] unit-test*
+
+[ { 1 2 3 } { 4 5 6 } { 7 8 9 } `{ @ @ @ } ]
+[ { 1 2 3 4 5 6 7 8 9 } ]
+unit-test*
+
diff --git a/unmaintained/bake/bake.factor b/unmaintained/bake/bake.factor
new file mode 100644 (file)
index 0000000..25cc0bb
--- /dev/null
@@ -0,0 +1,97 @@
+
+USING: kernel parser namespaces sequences quotations arrays vectors splitting
+       strings words math generalizations
+       macros combinators.conditional newfx ;
+
+IN: bake
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYMBOL: ,
+SYMBOL: @
+
+: comma? ( obj -- ? ) , = ;
+: atsym? ( obj -- ? ) @ = ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+DEFER: [bake]
+
+: broil-element ( obj -- quot )
+    {
+      { [ comma?    ] [ drop [ >r ]          ] }
+      { [ f =       ] [ [ >r ] prefix-on     ] }
+      { [ integer?  ] [ [ >r ] prefix-on     ] }
+      { [ string?   ] [ [ >r ] prefix-on     ] }
+      { [ sequence? ] [ [bake] [ >r ] append ] }
+      { [ word?     ] [ literalize [ >r ] prefix-on ] }
+      { [ drop t    ] [ [ >r ] prefix-on     ] }
+    }
+  1cond ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: constructor ( seq -- quot )
+    {
+      { [ array? ]     [ length [ narray ] prefix-on ] }
+!      { [ quotation? ] [ length [ ncurry ] prefix-on [ ] prefix ] }
+      { [ quotation? ] [ length [ narray >quotation ] prefix-on ] }
+      { [ vector? ]    [ length [ narray >vector    ] prefix-on ] }
+    }
+  1cond ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: [broil] ( seq -- quot )
+    [ reverse [ broil-element ] map concat ]
+    [ length  [ drop [ r> ]   ] map concat ]
+    [ constructor ]
+  tri append append
+  >quotation ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYMBOL: saved-sequence
+
+: [connector] ( -- quot )
+  saved-sequence get quotation? [ [ compose ] ] [ [ append ] ] if ;
+
+: [starter] ( -- quot )
+  saved-sequence get
+    {
+      { [ quotation? ] [ drop [  [ ] ] ] }
+      { [ array?     ] [ drop [  { } ] ] }
+      { [ vector?    ] [ drop [ V{ } ] ] }
+    }
+  1cond ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: [simmer] ( seq -- quot )
+
+  dup saved-sequence set
+
+  { @ } split reverse
+    [ [ [bake] [connector] append [ >r ] append ] map concat ]
+    [ length [ drop [ r> ] [connector] append   ] map concat ]
+  bi
+
+  >r 1 invert-index pluck r> ! remove the last append/compose
+
+  [starter] prepend
+
+  append ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: [bake] ( seq -- quot ) [ @ member? ] [ [simmer] ] [ [broil] ] 1if ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+MACRO: bake ( seq -- quot ) [bake] ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+:  `{ \ } [ >array     ] parse-literal \ bake parsed ; parsing
+: `V{ \ } [ >vector    ] parse-literal \ bake parsed ; parsing
+:  `[ \ ] [ >quotation ] parse-literal \ bake parsed ; parsing
\ No newline at end of file
diff --git a/unmaintained/bake/fry/fry-tests.factor b/unmaintained/bake/fry/fry-tests.factor
new file mode 100755 (executable)
index 0000000..74408dc
--- /dev/null
@@ -0,0 +1,89 @@
+
+USING: tools.test math prettyprint kernel io arrays vectors sequences
+       generalizations bake bake.fry ;
+
+IN: bake.fry.tests
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: unit-test* ( input output -- ) swap unit-test ;
+
+: must-be-t ( in -- ) [ t ] swap unit-test ;
+: must-be-f ( in -- ) [ f ] swap unit-test ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+[ [ 3 + ] ] [ 3 '[ , + ] ] unit-test
+
+[ [ 1 3 + ] ] [ 1 3 '[ , , + ] ] unit-test
+
+[ [ 1 + ] ] [ 1 [ + ] '[ , @ ] ] unit-test
+
+[ [ 1 + . ] ] [ 1 [ + ] '[ , @ . ] ] unit-test
+
+[ [ + - ] ] [ [ + ] [ - ] '[ @ @ ] ] unit-test
+
+[ [ "a" write "b" print ] ]
+[ "a" "b" '[ , write , print ] ] unit-test
+
+[ [ 1 2 + 3 4 - ] ]
+[ [ + ] [ - ] '[ 1 2 @ 3 4 @ ] ] unit-test
+
+[ 1/2 ] [
+    1 '[ , _ / ] 2 swap call
+] unit-test
+
+[ { { 1 "a" "A" } { 1 "b" "B" } { 1 "c" "C" } } ] [
+    1 '[ , _ _ 3array ]
+    { "a" "b" "c" } { "A" "B" "C" } rot 2map
+] unit-test
+
+[ { { 1 "a" } { 1 "b" } { 1 "c" } } ] [
+    '[ 1 _ 2array ]
+    { "a" "b" "c" } swap map
+] unit-test
+
+[ 1 2 ] [
+    1 2 '[ _ , ] call
+] unit-test
+
+[ { { 1 "a" 2 } { 1 "b" 2 } { 1 "c" 2 } } ] [
+    1 2 '[ , _ , 3array ]
+    { "a" "b" "c" } swap map
+] unit-test
+
+: funny-dip '[ @ _ ] call ; inline
+
+[ "hi" 3 ] [ "h" "i" 3 [ append ] funny-dip ] unit-test
+
+[ { 1 2 3 } ] [
+    3 1 '[ , [ , + ] map ] call
+] unit-test
+
+[ { 1 { 2 { 3 } } } ] [
+    1 2 3 '[ , [ , [ , 1array ] call 2array ] call 2array ] call
+] unit-test
+
+{ 1 1 } [ '[ [ [ , ] ] ] ] must-infer-as
+
+[ { { { 3 } } } ] [
+    3 '[ [ [ , 1array ] call 1array ] call 1array ] call
+] unit-test
+
+[ { { { 3 } } } ] [
+    3 '[ [ [ , 1array ] call 1array ] call 1array ] call
+] unit-test
+
+! [ 10 20 30 40 '[ , V{ , { , } } , ] ] [ [ 10 V{ 20 { 30 } } 40 ] ] unit-test*
+
+[ 10 20 30 40 '[ , V{ , { , } } , ] ]
+[ [ 10 20 30 >r r> 1 narray >r >r r> r> 2 narray >vector 40 ] ]
+unit-test*
+
+[ { 1 2 3 } { 4 5 6 } { 7 8 9 } '[ , { V{ @ } { , } } ] call ]
+[
+  { 1 2 3 }
+  { V{ 4 5 6 } { { 7 8 9 } } }
+]
+unit-test*
+
diff --git a/unmaintained/bake/fry/fry.factor b/unmaintained/bake/fry/fry.factor
new file mode 100644 (file)
index 0000000..d82500e
--- /dev/null
@@ -0,0 +1,80 @@
+
+USING: kernel combinators arrays vectors quotations sequences splitting
+       parser macros sequences.deep
+       combinators.short-circuit combinators.conditional bake newfx ;
+
+IN: bake.fry
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYMBOL: _
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+DEFER: (shallow-fry)
+DEFER: shallow-fry
+
+: ((shallow-fry)) ( accum quot adder -- result )
+  >r shallow-fry r>
+  append swap dup empty?
+    [ drop ]
+    [ [ prepose ] curry append ]
+  if ; inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: (shallow-fry) ( accum quot -- result )
+  dup empty?
+    [ drop 1quotation ]
+    [
+      unclip
+        {
+          { \ , [ [ curry   ] ((shallow-fry)) ] }
+          { \ @ [ [ compose ] ((shallow-fry)) ] }
+          [ swap >r suffix r> (shallow-fry) ]
+        }
+      case
+    ]
+  if ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: shallow-fry ( quot -- quot' ) [ ] swap (shallow-fry) ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: deep-fry ( quot -- quot )
+  { _ } split1-last dup
+    [
+      shallow-fry [ >r ] rot
+      deep-fry    [ [ dip ] curry r> compose ] 4array concat
+    ]
+    [ drop shallow-fry ]
+  if ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: bakeable? ( obj -- ? ) { [ array? ] [ vector? ] } 1|| ;
+
+: fry-specifier? ( obj -- ? ) { , @ } member-of? ;
+
+: count-inputs ( quot -- n ) flatten [ fry-specifier? ] count ;
+
+: commas ( n -- seq ) , <repetition> ;
+
+: [fry] ( quot -- quot' )
+    [
+        {
+          { [ callable? ] [ [ count-inputs commas ] [ [fry]  ] bi append ] }
+          { [ bakeable? ] [ [ count-inputs commas ] [ [bake] ] bi append ] }
+          { [ drop t    ] [ 1quotation                                   ] }
+        }
+      1cond
+    ]
+  map concat deep-fry ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+MACRO: fry ( seq -- quot ) [fry] ;
+
+: '[ \ ] [ >quotation ] parse-literal \ fry parsed ; parsing
diff --git a/unmaintained/bake/summary.txt b/unmaintained/bake/summary.txt
new file mode 100644 (file)
index 0000000..cfc944a
--- /dev/null
@@ -0,0 +1 @@
+Bake is similar to make but with additional features
diff --git a/unmaintained/bitfields/authors.txt b/unmaintained/bitfields/authors.txt
new file mode 100644 (file)
index 0000000..f990dd0
--- /dev/null
@@ -0,0 +1 @@
+Daniel Ehrenberg
diff --git a/unmaintained/bitfields/bitfields-docs.factor b/unmaintained/bitfields/bitfields-docs.factor
new file mode 100644 (file)
index 0000000..ae67023
--- /dev/null
@@ -0,0 +1,17 @@
+USING: help.markup help.syntax ;
+IN: bitfields
+
+HELP: BITFIELD:
+{ $syntax "BITFIELD: name slot:size... ;" }
+{ $values { "name" "name of bitfield" }  { "slot" "names of slots" } { "size" "sizes of slots" } }
+{ $description "Creates a new bitfield specification, with the constructor <name> and slot accessors of the form name-slot. Slots' values can be changed by words of the form with-name-slot, with the stack effect " { $code "( newvalue bitfield -- newbitfield )" } ". The slots have the amount of space specified, in bits, after the colon. The constructor and setters do not check to make sure there is no overflow, and any inappropriately high value (except in the first field) will corrupt the bitfield. To check overflow, use " { $link POSTPONE: SAFE-BITFIELD: } " instead. Padding can be included by writing the binary number to be used as a pad in the middle of the bitfield specification. The first slot written will have the most significant digits. Note that bitfields do not form a class; they are merely integers. For efficiency across platforms, it is often the best to keep the total size at or below 29, allowing fixnums to be used on all platforms." }
+{ $see-also define-bitfield } ;
+
+HELP: define-bitfield
+{ $values { "classname" "a string" } { "slots" "slot specifications" } }
+{ $description "Defines a bitfield constructor and slot accessors and setters. The workings of these are described in more detail at " { $link POSTPONE: BITFIELD: } ". The slot specifications should be an assoc. Any key which looks like a binary number will be treated as padding." } ;
+
+HELP: SAFE-BITFIELD:
+{ $syntax "SAFE-BITFIELD: name slot:size... ;" }
+{ $values { "name" "name of bitfield" } { "slot" "name of slots" } { "size" "size in bits of slots" } }
+{ $description "Defines a bitfield in the same way as " { $link POSTPONE: BITFIELD: } " but the constructor and slot setters check for overflow." } ;
diff --git a/unmaintained/bitfields/bitfields-tests.factor b/unmaintained/bitfields/bitfields-tests.factor
new file mode 100755 (executable)
index 0000000..bbd4aa3
--- /dev/null
@@ -0,0 +1,22 @@
+USING: tools.test bitfields kernel ;
+IN: bitfields.tests
+
+SAFE-BITFIELD: foo bar:5 baz:10 111 bing:2 ;
+
+[ 21 ] [ 21 852 3 <foo> foo-bar ] unit-test
+[ 852 ] [ 21 852 3 <foo> foo-baz ] unit-test
+[ 3 ] [ 21 852 3 <foo> foo-bing ] unit-test
+
+[ 23 ] [ 21 852 3 <foo> 23 swap with-foo-bar foo-bar ] unit-test
+[ 855 ] [ 21 852 3 <foo> 855 swap with-foo-baz foo-baz ] unit-test
+[ 1 ] [ 21 852 3 <foo> 1 swap with-foo-bing foo-bing ] unit-test
+
+[ 100 0 0 <foo> ] must-fail
+[ 0 5000 0 <foo> ] must-fail
+[ 0 0 10 <foo> ] must-fail
+
+[ 100 0 with-foo-bar ] must-fail
+[ 5000 0 with-foo-baz ] must-fail
+[ 10 0 with-foo-bing ] must-fail
+
+[ BIN: 00101100000000111111 ] [ BIN: 101 BIN: 1000000001 BIN: 11 <foo> ] unit-test
diff --git a/unmaintained/bitfields/bitfields.factor b/unmaintained/bitfields/bitfields.factor
new file mode 100755 (executable)
index 0000000..90e588b
--- /dev/null
@@ -0,0 +1,111 @@
+USING: parser lexer kernel math sequences namespaces make assocs
+summary words splitting math.parser arrays sequences.next
+mirrors generalizations compiler.units ;
+IN: bitfields
+
+! Example:
+! BITFIELD: blah short:16 char:8 nothing:5 ;
+! defines <blah> blah-short blah-char blah-nothing.
+
+! An efficient bitfield has a sum of 29 bits or less
+! so it can fit in a fixnum.
+! No class is defined and there is no overflow checking.
+! The first field is the most significant.
+
+: >ranges ( slots/sizes -- slots/ranges )
+    ! range is { start length }
+    reverse 0 swap [
+        swap >r tuck >r [ + ] keep r> 2array r> swap
+    ] assoc-map nip reverse ;
+
+SYMBOL: safe-bitfields? ! default f; set at parsetime
+
+TUPLE: check< number bound ;
+M: check< summary drop "Number exceeds upper bound" ;
+
+: check< ( num cmp -- num )
+    2dup < [ drop ] [ \ check< boa throw ] if ;
+
+: ?check ( length -- )
+    safe-bitfields? get [ 2^ , \ check< , ] [ drop ] if ;
+
+: put-together ( lengths -- )
+    ! messy because of bounds checking
+    dup length 1- [ \ >r , ] times [ 0 swap ] % [
+        ?check [ \ bitor , , [ shift r> ] % ] when*
+    ] each-next \ bitor , ;
+
+: padding-name? ( string -- ? )
+    [ "10" member? ] all? ;
+
+: pad ( i name -- )
+    bin> , , \ -nrot , ;
+
+: add-padding ( names -- ) 
+    <enum>
+    [ dup padding-name? [ pad ] [ 2drop ] if ] assoc-each ;
+
+: [constructor] ( names lengths -- quot )
+    [ swap add-padding put-together ] [ ] make ;
+
+: define-constructor ( classname slots -- )
+    [ keys ] keep values [constructor]
+    >r in get constructor-word dup save-location r>
+    define ;
+
+: range>accessor ( range -- quot )
+    [
+        dup first neg , \ shift ,
+        second 2^ 1- , \ bitand ,
+    ] [ ] make ;
+
+: [accessors] ( lengths -- accessors )
+    [ range>accessor ] map ;
+
+: clear-range ( range -- num )
+    first2 dupd + [ 2^ 1- ] bi@ bitnot bitor ;
+
+: range>setter ( range -- quot )
+    [
+        \ >r , dup second ?check \ r> ,
+        dup clear-range ,
+        [ bitand >r ] %
+        first , [ shift r> bitor ] %
+    ] [ ] make ;
+
+: [setters] ( lengths -- setters )
+    [ range>setter ] map ;
+
+: parse-slots ( slotspecs -- slots )
+    [ ":" split1 string>number [ dup length ] unless* ] { } map>assoc ;
+
+: define-slots ( prefix names quots -- )
+    >r [ "-" glue create-in ] with map r>
+    [ define ] 2each ;
+
+: define-accessors ( classname slots -- )
+    dup values [accessors]
+    >r keys r> define-slots ;
+
+: define-setters ( classname slots -- )
+    >r "with-" prepend r>
+    dup values [setters]
+    >r keys r> define-slots ;
+
+: filter-pad ( slots -- slots )
+    [ drop padding-name? not ] assoc-filter ;
+
+: define-bitfield ( classname slots -- ) 
+    [
+        [ define-constructor ] 2keep
+        >ranges filter-pad [ define-setters ] 2keep define-accessors
+    ] with-compilation-unit ;
+
+: parse-bitfield ( -- )
+    scan ";" parse-tokens parse-slots define-bitfield ;
+
+: BITFIELD:
+    parse-bitfield ; parsing
+
+: SAFE-BITFIELD:
+    [ safe-bitfields? on parse-bitfield ] with-scope ; parsing
diff --git a/unmaintained/bitfields/summary.txt b/unmaintained/bitfields/summary.txt
new file mode 100644 (file)
index 0000000..fa2f7ff
--- /dev/null
@@ -0,0 +1 @@
+Simple system for specifying packed bitfields
diff --git a/unmaintained/bitfields/tags.txt b/unmaintained/bitfields/tags.txt
new file mode 100644 (file)
index 0000000..f427429
--- /dev/null
@@ -0,0 +1 @@
+extensions
diff --git a/unmaintained/combinators-lib/authors.txt b/unmaintained/combinators-lib/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/combinators-lib/lib-docs.factor b/unmaintained/combinators-lib/lib-docs.factor
new file mode 100755 (executable)
index 0000000..cde3b4d
--- /dev/null
@@ -0,0 +1,22 @@
+USING: help.syntax help.markup kernel prettyprint sequences
+quotations math ;
+IN: combinators.lib
+
+HELP: generate
+{ $values { "generator" quotation } { "predicate" quotation } { "obj" object } }
+{ $description "Loop until the generator quotation generates an object that satisfies predicate quotation." }
+{ $unchecked-example
+    "! Generate a random 20-bit prime number congruent to 3 (mod 4)"
+    "USING: combinators.lib math math.miller-rabin prettyprint ;"
+    "[ 20 random-prime ] [ 4 mod 3 = ] generate ."
+    "526367"
+} ;
+
+HELP: %chance
+{ $values { "quot" quotation } { "n" integer } }
+{ $description "Calls the quotation " { $snippet "n" } " percent of the time." }
+{ $unchecked-example
+    "USING: io ;"
+    "[ \"hello, world!  maybe.\" print ] 50 %chance"
+    ""
+} ;
diff --git a/unmaintained/combinators-lib/lib-tests.factor b/unmaintained/combinators-lib/lib-tests.factor
new file mode 100755 (executable)
index 0000000..9489798
--- /dev/null
@@ -0,0 +1,24 @@
+USING: combinators.lib kernel math random sequences tools.test continuations
+    arrays vectors ;
+IN: combinators.lib.tests
+
+[ 6 -1 ] [ 5 0 1 [ + ] [ - ] bi, bi* ] unit-test
+[ 6 -1 1 ] [ 5 0 1 1 [ + ] [ - ] [ * ] tri, tri* ] unit-test
+
+[ 5 4 ] [ 5 0 1 [ + ] [ - ] bi*, bi ] unit-test
+[ 5 4 5 ] [ 5 0 1 1 [ + ] [ - ] [ * ] tri*, tri ] unit-test
+
+[ 5 6 ] [ 5 0 1 [ + ] bi@, bi ] unit-test
+[ 5 6 7 ] [ 5 0 1 2 [ + ] tri@, tri ] unit-test
+
+[ 5 ] [ [ 10 random ] [ 5 = ] generate ] unit-test
+[ t ] [ [ 10 random ] [ even? ] generate even? ] unit-test
+
+[ { "foo" "xbarx" } ]
+[
+    { "oof" "bar" } { [ reverse ] [ "x" dup surround ] } parallel-call
+] unit-test
+
+{ 1 1 } [
+    [ even? ] [ drop 1 ] [ drop 2 ] ifte
+] must-infer-as
diff --git a/unmaintained/combinators-lib/lib.factor b/unmaintained/combinators-lib/lib.factor
new file mode 100755 (executable)
index 0000000..5e78d18
--- /dev/null
@@ -0,0 +1,141 @@
+! Copyright (C) 2007, 2008 Slava Pestov, Chris Double,
+!                          Doug Coleman, Eduardo Cavazos,
+!                          Daniel Ehrenberg.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel combinators fry namespaces make quotations hashtables
+sequences assocs arrays stack-checker effects math math.ranges
+generalizations macros continuations random locals accessors ;
+
+IN: combinators.lib
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Currying cleave combinators
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: bi, ( obj quot quot -- quot' quot' )
+    [ [ curry ] curry ] bi@ bi ; inline
+: tri, ( obj quot quot quot -- quot' quot' quot' )
+    [ [ curry ] curry ] tri@ tri ; inline
+
+: bi*, ( obj obj quot quot -- quot' quot' )
+    [ [ curry ] curry ] bi@ bi* ; inline
+: tri*, ( obj obj obj quot quot quot -- quot' quot' quot' )
+    [ [ curry ] curry ] tri@ tri* ; inline
+
+: bi@, ( obj obj quot -- quot' quot' )
+    [ curry ] curry bi@ ; inline
+: tri@, ( obj obj obj quot -- quot' quot' quot' )
+    [ curry ] curry tri@ ; inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Generalized versions of core combinators
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: quad ( x p q r s -- ) [ keep ] 3dip [ keep ] 2dip [ keep ] dip call ; inline
+
+: 4slip ( quot a b c d -- a b c d ) 4 nslip ; inline
+
+: 4keep ( w x y z quot -- w x y z ) 4 nkeep ; inline 
+
+: 2with ( param1 param2 obj quot -- obj curry )
+    with with ; inline
+
+: 3with ( param1 param2 param3 obj quot -- obj curry )
+    with with with ; inline
+
+: with* ( obj assoc quot -- assoc curry )
+    swapd [ [ -rot ] dip call ] 2curry ; inline
+
+: 2with* ( obj1 obj2 assoc quot -- assoc curry )
+    with* with* ; inline
+
+: 3with* ( obj1 obj2 obj3 assoc quot -- assoc curry )
+    with* with* with* ; inline
+
+: assoc-each-with ( obj assoc quot -- )
+    with* assoc-each ; inline
+
+: assoc-map-with ( obj assoc quot -- assoc )
+    with* assoc-map ; inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! ifte
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+MACRO: preserving ( predicate -- quot )
+    dup infer in>>
+    dup 1+
+    '[ _ _ nkeep _ nrot ] ;
+
+MACRO: ifte ( quot quot quot -- )
+    '[ _ preserving _ _ if ] ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! switch
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+MACRO: switch ( quot -- )
+    [ [ [ preserving ] curry ] dip ] assoc-map
+    [ cond ] curry ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+! Conceptual implementation:
+
+! : pcall ( seq quots -- seq ) [ call ] 2map ;
+
+MACRO: parallel-call ( quots -- )
+    [ '[ [ unclip @ ] dip [ push ] keep ] ] map concat
+    '[ V{ } clone @ nip >array ] ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! map-call and friends
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: (make-call-with) ( quots -- quot ) 
+    [ [ keep ] curry ] map concat [ drop ] append ;
+
+MACRO: map-call-with ( quots -- )
+    [ (make-call-with) ] keep length [ narray ] curry compose ;
+
+: (make-call-with2) ( quots -- quot )
+    [ [ 2dup >r >r ] prepend [ r> r> ] append ] map concat
+    [ 2drop ] append ;
+
+MACRO: map-call-with2 ( quots -- )
+    [
+        [ [ 2dup >r >r ] prepend [ r> r> ] append ] map concat
+        [ 2drop ] append    
+    ] keep length [ narray ] curry append ;
+
+MACRO: map-exec-with ( words -- )
+    [ 1quotation ] map [ map-call-with ] curry ;
+
+MACRO: construct-slots ( assoc tuple-class -- tuple ) 
+    [ new ] curry swap [
+        [ dip ] curry swap 1quotation [ keep ] curry compose
+    ] { } assoc>map concat compose ;
+
+: 2quot-with ( obj seq quot1 quot2 -- seq quot1 quot2 )
+    >r pick >r with r> r> swapd with ;
+
+MACRO: multikeep ( word out-indexes -- ... )
+    [
+        dup >r [ \ npick \ >r 3array % ] each
+        %
+        r> [ drop \ r> , ] each
+    ] [ ] make ;
+
+: do-while ( pred body tail -- )
+    [ tuck 2slip ] dip while ; inline
+
+: generate ( generator predicate -- obj )
+    '[ dup @ dup [ nip ] unless not ]
+    swap [ ] do-while ;
+
+MACRO: predicates ( seq -- quot/f )
+    dup [ 1quotation [ drop ] prepend ] map
+    [ [ [ dup ] prepend ] map ] dip zip [ drop f ] suffix
+    [ cond ] curry ;
+
+: %chance ( quot n -- ) 100 random > swap when ; inline
diff --git a/unmaintained/fs/authors.txt b/unmaintained/fs/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/fs/fs.factor b/unmaintained/fs/fs.factor
new file mode 100644 (file)
index 0000000..6cb9f68
--- /dev/null
@@ -0,0 +1,23 @@
+USING: alien.syntax ;
+IN: unix.linux.fs
+
+: MS_RDONLY             1    ; ! Mount read-only.
+: MS_NOSUID             2    ; ! Ignore suid and sgid bits.
+: MS_NODEV              4    ; ! Disallow access to device special files.
+: MS_NOEXEC             8    ; ! Disallow program execution.
+: MS_SYNCHRONOUS        16   ; ! Writes are synced at once.
+: MS_REMOUNT            32   ; ! Alter flags of a mounted FS.
+: MS_MANDLOCK           64   ; ! Allow mandatory locks on an FS.
+: S_WRITE               128  ; ! Write on file/directory/symlink.
+: S_APPEND              256  ; ! Append-only file.
+: S_IMMUTABLE           512  ; ! Immutable file.
+: MS_NOATIME            1024 ; ! Do not update access times.
+: MS_NODIRATIME         2048 ; ! Do not update directory access times.
+: MS_BIND               4096 ; ! Bind directory at different place.
+
+FUNCTION: int mount
+( char* special_file, char* dir, char* fstype, ulong options, void* data ) ;
+
+! FUNCTION: int umount2 ( char* file, int flags ) ;
+
+FUNCTION: int umount ( char* file ) ;
diff --git a/unmaintained/fs/tags.txt b/unmaintained/fs/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/unmaintained/if/authors.txt b/unmaintained/if/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/if/if.factor b/unmaintained/if/if.factor
new file mode 100644 (file)
index 0000000..0a90883
--- /dev/null
@@ -0,0 +1,98 @@
+
+USING: alien.syntax ;
+
+IN: unix.linux.if
+
+: IFNAMSIZ    16 ;
+: IF_NAMESIZE 16 ;
+: IFHWADDRLEN 6 ;
+
+! Standard interface flags (netdevice->flags)
+
+: IFF_UP          HEX: 1 ;             ! interface is up
+: IFF_BROADCAST   HEX: 2 ;             ! broadcast address valid
+: IFF_DEBUG      HEX: 4 ;              ! turn on debugging
+: IFF_LOOPBACK           HEX: 8 ;              ! is a loopback net
+: IFF_POINTOPOINT HEX: 10 ;            ! interface is has p-p link
+: IFF_NOTRAILERS  HEX: 20 ;            ! avoid use of trailers
+: IFF_RUNNING    HEX: 40 ;             ! interface running and carrier ok
+: IFF_NOARP      HEX: 80 ;             ! no ARP protocol
+: IFF_PROMISC    HEX: 100 ;            ! receive all packets
+: IFF_ALLMULTI           HEX: 200 ;            ! receive all multicast packets
+
+: IFF_MASTER     HEX: 400 ;            ! master of a load balancer
+: IFF_SLAVE      HEX: 800 ;            ! slave of a load balancer
+
+: IFF_MULTICAST   HEX: 1000 ;          ! Supports multicast
+
+! #define IFF_VOLATILE
+! (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_MASTER|IFF_SLAVE|IFF_RUNNING)
+
+: IFF_PORTSEL     HEX: 2000 ;           ! can set media type
+: IFF_AUTOMEDIA   HEX: 4000 ;          ! auto media select active
+: IFF_DYNAMIC    HEX: 8000 ;           ! dialup device with changing addresses
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+C-STRUCT: struct-ifmap
+  { "ulong" "mem-start" }
+  { "ulong" "mem-end" }
+  { "ushort" "base-addr" }
+  { "uchar" "irq" }
+  { "uchar" "dma" }
+  { "uchar" "port" } ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+! Hmm... the generic sockaddr type isn't defined anywhere.
+! Put it here for now.
+
+TYPEDEF: ushort sa_family_t
+
+C-STRUCT: struct-sockaddr
+  { "sa_family_t" "sa_family" }
+  { { "char" 14 } "sa_data" } ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+! C-UNION: union-ifr-ifrn { "char" IFNAMSIZ } ;
+
+C-UNION: union-ifr-ifrn { "char" 16 } ;
+
+C-UNION: union-ifr-ifru
+ "struct-sockaddr"
+!   "sockaddr"
+  "short"
+  "int"
+  "struct-ifmap"
+!   { "char" IFNAMSIZ }
+  { "char" 16 }
+  "caddr_t" ;
+
+C-STRUCT: struct-ifreq
+  { "union-ifr-ifrn" "ifr-ifrn" }
+  { "union-ifr-ifru" "ifr-ifru" } ;
+
+: ifr-name      ( struct-ifreq -- value ) struct-ifreq-ifr-ifrn ;
+
+: ifr-hwaddr   ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
+: ifr-addr     ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
+: ifr-dstaddr  ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
+: ifr-broadaddr ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
+: ifr-netmask  ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
+: ifr-flags    ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+C-UNION: union-ifc-ifcu "caddr_t" "struct-ifreq*" ;
+
+C-STRUCT: struct-ifconf
+  { "int" "ifc-len" }
+  { "union-ifc-ifcu" "ifc-ifcu" } ;
+
+: ifc-len ( struct-ifconf -- value ) struct-ifconf-ifc-len ;
+
+: ifc-buf ( struct-ifconf -- value ) struct-ifconf-ifc-ifcu ;
+: ifc-req ( struct-ifconf -- value ) struct-ifconf-ifc-ifcu ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
\ No newline at end of file
diff --git a/unmaintained/if/tags.txt b/unmaintained/if/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/unmaintained/ifreq/authors.txt b/unmaintained/ifreq/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/ifreq/ifreq.factor b/unmaintained/ifreq/ifreq.factor
new file mode 100644 (file)
index 0000000..5dc1c0f
--- /dev/null
@@ -0,0 +1,60 @@
+
+USING: kernel alien alien.c-types
+       io.sockets
+       unix
+       unix.linux.sockios
+       unix.linux.if ;
+
+IN: unix.linux.ifreq
+
+: set-if-addr ( name addr -- )
+  "struct-ifreq" <c-object>
+  rot  ascii string>alien       over set-struct-ifreq-ifr-ifrn
+  swap 0 <inet4> make-sockaddr  over set-struct-ifreq-ifr-ifru
+
+  AF_INET SOCK_DGRAM 0 socket SIOCSIFADDR rot ioctl drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: set-if-flags ( name flags -- )
+  "struct-ifreq" <c-object>
+  rot  ascii string>alien over set-struct-ifreq-ifr-ifrn
+  swap <short>          over set-struct-ifreq-ifr-ifru
+
+  AF_INET SOCK_DGRAM 0 socket SIOCSIFFLAGS rot ioctl drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: set-if-dst-addr ( name addr -- )
+  "struct-ifreq" <c-object>
+  rot  ascii string>alien       over set-struct-ifreq-ifr-ifrn
+  swap 0 <inet4> make-sockaddr  over set-struct-ifreq-ifr-ifru
+
+  AF_INET SOCK_DGRAM 0 socket SIOCSIFDSTADDR rot ioctl drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: set-if-brd-addr ( name addr -- )
+  "struct-ifreq" <c-object>
+  rot  ascii string>alien       over set-struct-ifreq-ifr-ifrn
+  swap 0 <inet4> make-sockaddr  over set-struct-ifreq-ifr-ifru
+
+  AF_INET SOCK_DGRAM 0 socket SIOCSIFBRDADDR rot ioctl drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: set-if-netmask ( name addr -- )
+  "struct-ifreq" <c-object>
+  rot  ascii string>alien       over set-struct-ifreq-ifr-ifrn
+  swap 0 <inet4> make-sockaddr  over set-struct-ifreq-ifr-ifru
+
+  AF_INET SOCK_DGRAM 0 socket SIOCSIFNETMASK rot ioctl drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: set-if-metric ( name metric -- )
+  "struct-ifreq" <c-object>
+  rot ascii string>alien over set-struct-ifreq-ifr-ifrn
+  swap <int>           over set-struct-ifreq-ifr-ifru
+
+  AF_INET SOCK_DGRAM 0 socket SIOCSIFMETRIC rot ioctl drop ;
\ No newline at end of file
diff --git a/unmaintained/ifreq/tags.txt b/unmaintained/ifreq/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/unmaintained/namespaces-lib/authors.txt b/unmaintained/namespaces-lib/authors.txt
new file mode 100644 (file)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/namespaces-lib/lib-tests.factor b/unmaintained/namespaces-lib/lib-tests.factor
new file mode 100755 (executable)
index 0000000..d3f5a12
--- /dev/null
@@ -0,0 +1 @@
+\r
diff --git a/unmaintained/namespaces-lib/lib.factor b/unmaintained/namespaces-lib/lib.factor
new file mode 100755 (executable)
index 0000000..dfa4df2
--- /dev/null
@@ -0,0 +1,23 @@
+USING: kernel namespaces namespaces.private quotations sequences
+       assocs.lib math.parser math generalizations locals mirrors
+       macros ;
+
+IN: namespaces.lib
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: save-namestack ( quot -- ) namestack slip set-namestack ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: make* ( seq -- seq ) [ dup quotation? [ call ] [ ] if ] map ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: set* ( val var -- ) namestack* set-assoc-stack ;
+
+: make-object ( quot class -- object )
+    new [ <mirror> swap bind ] keep ; inline
+
+: with-object ( object quot -- )
+    [ <mirror> ] dip bind ; inline
diff --git a/unmaintained/namespaces-lib/summary.txt b/unmaintained/namespaces-lib/summary.txt
new file mode 100644 (file)
index 0000000..ec8129b
--- /dev/null
@@ -0,0 +1 @@
+Non-core namespace words
diff --git a/unmaintained/namespaces-lib/tags.txt b/unmaintained/namespaces-lib/tags.txt
new file mode 100644 (file)
index 0000000..42d711b
--- /dev/null
@@ -0,0 +1 @@
+collections
diff --git a/unmaintained/obj/alist/alist.factor b/unmaintained/obj/alist/alist.factor
new file mode 100644 (file)
index 0000000..a4e8ebb
--- /dev/null
@@ -0,0 +1,11 @@
+
+USING: arrays sequences ;
+
+IN: obj.alist
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+PREDICATE: alist < sequence [ pair? ] all? ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
diff --git a/unmaintained/obj/examples/todo/todo.factor b/unmaintained/obj/examples/todo/todo.factor
new file mode 100644 (file)
index 0000000..3d54547
--- /dev/null
@@ -0,0 +1,83 @@
+
+USING: kernel sequences sets combinators.cleave
+       obj obj.view obj.util obj.print ;
+
+IN: obj.examples.todo
+
+SYM: person types adjoin
+SYM: todo   types adjoin
+
+SYM: owners properties adjoin
+SYM: eta    properties adjoin
+SYM: notes  properties adjoin
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: slava { type person } define-object
+SYM: doug  { type person } define-object
+SYM: ed    { type person } define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: compiler-bugs
+  {
+    type todo
+    owners { slava }
+    notes  {
+             "Investitage FEP on Terrorist"
+             "Problem with cutler in VirtualBox?"
+           }
+  }
+define-object
+
+SYM: remove-old-accessors-from-core
+  {
+    type todo
+    owners { slava }
+  }
+define-object
+
+SYM: move-db-and-web-framework-to-basis
+  {
+   type todo
+   owners { slava }
+  }
+define-object
+
+SYM: remove-old-accessors-from-basis
+  {
+    type todo
+    owners { doug ed }
+  }
+define-object
+
+SYM: blas-on-bsd
+  {
+    type todo
+    owners { slava doug }
+  }
+define-object
+
+SYM: multi-methods-backend
+  {
+    type todo
+    owners { slava }
+  }
+define-object
+
+SYM: update-core-for-multi-methods { type todo owners { slava } } define-object
+SYM: update-basis-for-multi-methods { type todo } define-object
+SYM: update-extra-for-multi-methods { type todo } define-object
+
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: todo-list ( -- )
+  objects [ type -> todo = ] filter
+    [ { [ self -> ] [ owners -> ] [ eta -> ] } 1arr ]
+  map
+  { "ITEM" "OWNERS" "ETA" } prefix
+  print-table ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
diff --git a/unmaintained/obj/misc/misc.factor b/unmaintained/obj/misc/misc.factor
new file mode 100644 (file)
index 0000000..06b3056
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: kernel namespaces sequences assocs sequences.deep obj ;
+
+IN: obj.misc
+
+: related ( obj -- seq )
+  objects dupd remove [ get values flatten member? ] with filter ;
+
diff --git a/unmaintained/obj/obj.factor b/unmaintained/obj/obj.factor
new file mode 100644 (file)
index 0000000..a4af627
--- /dev/null
@@ -0,0 +1,45 @@
+
+USING: kernel words namespaces arrays vectors hashtables
+       sequences assocs sets grouping
+       combinators.conditional
+       combinators.short-circuit
+       obj.util obj.alist ;
+
+IN: obj
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: properties ( -- properties ) V{ } ;
+
+SYM: self  properties adjoin
+SYM: type  properties adjoin
+SYM: title properties adjoin
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: types ( -- types ) V{ } ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: >obj ( val -- obj ) [ symbol? ] [ get ] [ ] 1if ;
+
+: -> ( obj pro -- val ) swap >obj at ;
+
+PREDICATE: obj < alist { [ self -> ] [ type -> ] } 1&& ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: objects ( -- objects ) V{ } ;
+
+: define-object ( symbol table -- )
+  2 group >vector
+  self rot 2array prefix
+  dup dup self -> set-global
+  self -> objects adjoin ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+PREDICATE: ptr < symbol get obj? ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
diff --git a/unmaintained/obj/papers/papers.factor b/unmaintained/obj/papers/papers.factor
new file mode 100644 (file)
index 0000000..46683ad
--- /dev/null
@@ -0,0 +1,178 @@
+
+USING: sets obj obj.util obj.view ;
+
+IN: obj.papers
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: title        properties adjoin
+SYM: abstract     properties adjoin
+SYM: authors      properties adjoin
+SYM: file         properties adjoin
+SYM: date         properties adjoin
+SYM: participants properties adjoin
+SYM: description  properties adjoin
+
+SYM: chapter      properties adjoin
+SYM: section      properties adjoin
+SYM: paragraph    properties adjoin
+SYM: content      properties adjoin
+
+SYM: subjects     properties adjoin
+SYM: source       properties adjoin
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: paper  types adjoin
+SYM: person types adjoin
+SYM: event  types adjoin
+
+SYM: excerpt types adjoin
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: bay-wei-chang       { type person } define-object
+SYM: chuck-moore         { type person } define-object
+SYM: craig-chambers      { type person } define-object
+SYM: david-ungar         { type person } define-object
+SYM: frank-g-halasz      { type person } define-object
+SYM: gerald-jay-sussman  { type person } define-object
+SYM: guy-lewis-steele-jr { type person } define-object
+SYM: randall-b-smith     { type person } define-object
+SYM: randall-h-trigg     { type person } define-object
+SYM: robert-adams        { type person } define-object
+SYM: russell-noftsker    { type person } define-object
+SYM: thomas-p-moran      { type person } define-object
+SYM: urs-holzle          { type person } define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: programming-as-an-experience
+  {
+    type     paper
+    title    "Programming as an Experience: The Inspiration for Self"
+    abstract "The Self system attempts to integrate intellectual and non-intellectual aspects of programming to create an overall experience. The language semantics, user interface, and implementation each help create this integrated experience. The language semantics embed the programmer in a uniform world of simple ob jects that can be modified without appealing to definitions of abstractions. In a similar way, the graphical interface puts the user into a uniform world of tangible objects that can be directly manipulated and changed without switching modes. The implementation strives to support the world-of-objects illusion by minimiz ing perceptible pauses and by providing true source-level semantics without sac rificing performance. As a side benefit, it encourages factoring. Although we see areas that fall short of the vision, on the whole, the language, interface, and im plementation conspire so that the Self programmer lives and acts in a consistent and malleable world of objects."
+    authors  { randall-b-smith david-ungar }
+    date     1995
+  }
+define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: self-the-power-of-simplicity
+  {
+    type paper
+    title "Self: The Power of Simplicity"
+    abstract "Self is an object-oriented language for exploratory programming based on a small number of simple and concrete ideas: prototypes, slots, and behavior. Prototypes combine inheritance and instantiation to provide a framework that is simpler and more flexible than most object-oriented languages. Slots unite variables and procedures into a single construct. This permits the inheritance hierarchy to take over the function of lexical scoping in conventional languages. Finally, because Self does not distinguish state from behavior, it narrows the gaps between ordinary objects, procedures, and closures. Self's simplicity and expressiveness offer new insights into object-oriented computation."
+    authors { randall-b-smith david-ungar }
+    date 1987
+  }
+define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: parents-are-shared-parts
+  {
+    type paper
+    title "Parents are Shared Parts: Inheritance and Encapsulation in Self"
+    abstract "The design of inheritance and encapsulation in Self, an object-oriented language based on prototypes, results from understanding that inheritance allows parents to be shared parts of their children. The programmer resolves ambiguities arising from multiple inheritance by prioritizing an object's parents. Unifying unordered and ordered multiple inheritance supports differential programming of abstractions and methods, combination of unrelated abstractions, unequal combination of abstractions, and mixins. In Self, a private slot may be accessed if the sending method is a shared part of the receiver, allowing privileged communication between related objects. Thus, classless Self enjoys the benefits of class-based encapsulation."
+    authors { craig-chambers david-ungar bay-wei-chang urs-holzle }
+    date 1991
+  }
+define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: organizing-programs-without-classes
+  {
+    type paper
+    title "Organizing Programs Without Classes"
+    abstract "All organizational functions carried out by classes can be accomplished in a simple and natural way by object inheritance in classless languages, with no need for special mechanisms. A single model--dividing types into prototypes and traits--supports sharing of behavior and extending or replacing representations. A natural extension, dynamic object inheritance, can model behavioral modes. Object inheritance can also be used to provide structured name spaces for well-known objects. Classless languages can even express 'class-based' encapsulation. These stylized uses of object inheritance become instantly recognizable idioms, and extend the repertory of organizing principles to cover a wider range of programs."
+    authors { david-ungar craig-chambers bay-wei-chang urs-holzle }
+    date 1991
+  }
+define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: scheme-an-interpreter-for-extended-lambda-calculus
+  {
+    type paper
+    title "Scheme: An Interpreter for Extended Lambda Calculus"
+    abstract "Inspired by ACTORS [Greif and Hewitt] [Smith and Hewitt], we have implemented an interpreter for a LISP-like language, SCHEME, based on the lambda calculus [Church], but extended for side effects, multiprocessing, and process synchronization. The purpose of this implementation is tutorial. We wish to: (1) alleviate the confusion caused by Micro-PLANNER, CONNIVER, etc. by clarifying the embedding of non-recursive control structures in a recursive host language like LISP. (2) explain how to use these control structures, independent of such issues as pattern matching and data base manipulation. (3) have a simple concrete experimental domain for certain issues of programming semantics and style."
+    authors { gerald-jay-sussman guy-lewis-steele-jr }
+    date 1975
+  }
+define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: symbolics-is-founded
+  {
+    type         event
+    participants { russell-noftsker robert-adams }
+    date         1980
+  }
+define-object
+
+SYM: symbolics-funding-from-gi
+  {
+    type        event
+    description "Symbolics receives $500,000 from General Instruments"
+    date        1982
+  }
+define-object
+
+SYM: symbolics-files-for-bankruptcy
+  {
+    type event
+    date "1993-01-28"
+  }
+define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: the-evolution-of-forth
+  {
+    type paper
+    title "The Evolution of Forth"
+    authors { chuck-moore "elizabeth-d-rather" "donald-r-colburn" }
+    abstract
+    "Forth is unique among programming languages in that its development and proliferation has been a grass-roots effort unsupported by any major corporate or academic sponsors. Originally conceived and developed by a single individual, its later development has progressed under two significant influences: professional programmers who developed tools to solve application problems and then commercialized them, and the interests of hobbyists concerned with free distribution of Forth. These influences have produced a language markedly different from traditional programming languages."
+    date 1993
+  }
+define-object
+
+SYM: first-complete-stand-alone-forth
+  {
+    type event
+    participants { chuck-moore }
+    date 1971
+  }
+define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: notecards-in-a-nutshell
+  {
+    type paper
+    authors { frank-g-halasz thomas-p-moran randall-h-trigg }
+    date 1987
+  }
+define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: the-evolution-of-forth-excerpt-2-1-1
+  {
+    type excerpt
+    source the-evolution-of-forth
+    chapter 2
+    section 1
+    paragraph 1
+    content
+    "Moore developed the first complete, stand-alone implementation of Forth in 1971 for the 11-meter radio telescope operated by the National Radio Astronomy Observatory (NRAO) at Kitt Peak, Arizona. This system ran on two early minicomputers (a 16 KB DDP-116 and a 32 KB H316) joined by a serial link. Both a multiprogrammed system and a multiprocessor system (in that both computers shared responsibility for controlling the telescope and its scientific instruments), it was responsible for pointing and tracking the telescope, collecting data and recording it on magnetic tape, and supporting an interactive graphics terminal on which an astronomer could analyze previously recorded data. The multiprogrammed nature of the system allowed all these functions to be performed concurrently, without timing conflicts or other interference."
+    subjects { chuck-moore first-complete-stand-alone-forth }
+  }
+define-object
+
diff --git a/unmaintained/obj/print/print.factor b/unmaintained/obj/print/print.factor
new file mode 100644 (file)
index 0000000..000e161
--- /dev/null
@@ -0,0 +1,37 @@
+
+USING: kernel arrays strings sequences assocs io io.styles prettyprint colors
+       combinators.conditional ;
+
+IN: obj.print
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: write-wrapped ( string -- ) H{ { wrap-margin 500 } } [ write ] with-nesting ;
+
+! : print-elt ( val -- )
+!   {
+!     { [ string? ] [ write-wrapped ] }
+!     { [ array?  ] [ [ . ] each    ] }
+!     { [ drop t  ] [ . ] }
+!   }
+!   1cond ;
+
+USING: accessors vocabs help.markup ;
+
+: print-elt ( val -- )
+  {
+    { [ vocab?  ] [ [ name>> ] [ ] bi write-object ] }
+    { [ string? ] [ write-wrapped ] }
+    { [ array?  ] [ [ . ] each    ] }
+    { [ drop t  ] [ . ] }
+  }
+  1cond ;
+
+: print-grid ( grid -- )
+  H{ { table-gap { 10 10 } } { table-border T{ rgba f 0 0 0 1 } } }
+  [ [ [ [ [ print-elt ] with-cell ] each ] with-row ] each ] tabular-output ;
+
+: print-table ( assoc -- ) >alist print-grid ;
+
+: print-seq ( seq -- ) [ 1array ] map print-grid ;
+
diff --git a/unmaintained/obj/util/util.factor b/unmaintained/obj/util/util.factor
new file mode 100644 (file)
index 0000000..086fcd1
--- /dev/null
@@ -0,0 +1,8 @@
+
+USING: kernel parser words ;
+
+IN: obj.util
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: SYM: CREATE-WORD dup define-symbol parsed ; parsing
\ No newline at end of file
diff --git a/unmaintained/obj/view/view.factor b/unmaintained/obj/view/view.factor
new file mode 100644 (file)
index 0000000..cf5ca33
--- /dev/null
@@ -0,0 +1,52 @@
+
+USING: kernel words namespaces arrays sequences prettyprint
+       help.topics help.markup bake combinators.cleave
+       obj obj.misc obj.print ;
+
+IN: obj.view
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: $tab ( seq -- ) first print-table ;
+: $obj ( seq -- ) first print-table ;
+: $seq ( seq -- ) first print-seq   ;
+: $ptr ( seq -- ) first get print-table ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+PREDICATE: obj-type < symbol types member? ;
+
+M: obj-type article-title ( type -- title ) unparse ;
+
+M: obj-type article-content ( type -- content )
+   objects [ type -> = ] with filter
+   { $seq , } bake ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+M: ptr article-title ( ptr -- title ) [ title -> ] [ unparse ] bi or ;
+
+M: ptr article-content ( ptr -- content )
+   {
+     [ get     { $obj , } bake ]
+     [ drop { $heading "Related\n" } ]
+     [ related { $seq , } bake ]
+   }
+   1arr ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+PREDICATE: obj-list < word \ objects = ;
+
+M: obj-list article-title ( objects -- title ) drop "Objects" ;
+
+! M: obj-list article-content ( objects -- title )
+!    execute
+!    [ [ type -> ] [ ] bi 2array ] map
+!    { $tab , } bake ;
+
+M: obj-list article-content ( objects -- title )
+   drop
+   objects
+   [ [ type -> ] [ ] bi 2array ] map
+   { $tab , } bake ;
\ No newline at end of file
diff --git a/unmaintained/oracle/authors.txt b/unmaintained/oracle/authors.txt
new file mode 100644 (file)
index 0000000..7c29e7c
--- /dev/null
@@ -0,0 +1 @@
+Elie Chaftari
diff --git a/unmaintained/oracle/liboci/authors.txt b/unmaintained/oracle/liboci/authors.txt
new file mode 100755 (executable)
index 0000000..7c29e7c
--- /dev/null
@@ -0,0 +1 @@
+Elie Chaftari
diff --git a/unmaintained/oracle/liboci/liboci.factor b/unmaintained/oracle/liboci/liboci.factor
new file mode 100644 (file)
index 0000000..aa04aef
--- /dev/null
@@ -0,0 +1,193 @@
+! Copyright (C) 2007 Elie CHAFTARI
+! See http://factorcode.org/license.txt for BSD license.
+!
+! Adapted from oci.h and ociap.h
+! Tested with Oracle version - 10.1.0.3 Instant Client
+!
+! DYLD_LIBRARY_PATH="/usr/local/oracle/instantclient10_1"
+! export DYLD_LIBRARY_PATH
+
+USING: alien alien.syntax combinators kernel system ;
+
+IN: oracle.liboci
+
+"oci" {
+    { [ os winnt? ] [ "oci.dll" "stdcall" ] }
+    { [ os macosx? ] [ "$DYLD_LIBRARY_PATH/libclntsh.dylib" "cdecl" ] }
+    { [ os unix? ] [ "$DYLD_LIBRARY_PATH/libclntsh.so.10.1" "cdecl" ] }
+} cond add-library
+
+! ===============================================
+! Attribute Types
+! ===============================================
+
+: OCI_ATTR_USERNAME 22  ; inline ! username attribute
+: OCI_ATTR_PASSWORD 23  ; inline ! password attribute
+
+! ===============================================
+! Various Modes
+! ===============================================
+
+: OCI_DEFAULT   HEX: 00 ; inline ! default value for parameters and attributes
+: OCI_THREADED  HEX: 01 ; inline ! appl. in threaded environment
+: OCI_OBJECT    HEX: 02 ; inline ! application in object environment
+
+! ===============================================
+! Execution Modes
+! ===============================================
+
+: OCI_DESCRIBE_ONLY   HEX: 10 ; inline ! only describe the statement
+
+! ===============================================
+! Credential Types
+! ===============================================
+
+: OCI_CRED_RDBMS      1 ; inline ! database username/password
+: OCI_CRED_EXT        2 ; inline ! externally provided credentials
+: OCI_CRED_PROXY      3 ; inline ! proxy authentication
+
+! ===============================================
+! Error Return Values
+! ===============================================
+
+: OCI_SUCCESS               0     ; inline ! maps to SQL_SUCCESS of SAG CLI
+: OCI_SUCCESS_WITH_INFO     1     ; inline ! maps to SQL_SUCCESS_WITH_INFO
+: OCI_RESERVED_FOR_INT_USE  200   ; inline ! reserved
+: OCI_NO_DATA               100   ; inline ! maps to SQL_NO_DATA
+: OCI_ERROR                 -1    ; inline ! maps to SQL_ERROR
+: OCI_INVALID_HANDLE        -2    ; inline ! maps to SQL_INVALID_HANDLE
+: OCI_NEED_DATA             99    ; inline ! maps to SQL_NEED_DATA
+: OCI_STILL_EXECUTING       -3123 ; inline ! OCI would block error
+
+! ===============================================
+! Parsing Syntax Types
+! ===============================================
+
+: OCI_V7_SYNTAX            2 ; inline ! V815 language - for backwards compatibility
+: OCI_V8_SYNTAX            3 ; inline ! V815 language - for backwards compatibility
+: OCI_NTV_SYNTAX           1 ; inline ! Use what so ever is the native lang of server
+
+! ===============================================
+! Scrollable Cursor Fetch Options
+! For non-scrollable cursor, the only valid
+! (and default) orientation is OCI_FETCH_NEXT
+! ===============================================
+
+: OCI_FETCH_CURRENT       HEX: 01 ; inline ! refetching current position
+: OCI_FETCH_NEXT          HEX: 02 ; inline ! next row
+: OCI_FETCH_FIRST         HEX: 04 ; inline ! first row of the result set
+: OCI_FETCH_LAST          HEX: 08 ; inline ! the last row of the result set
+: OCI_FETCH_PRIOR         HEX: 10 ; inline ! the previous row relative to current
+: OCI_FETCH_ABSOLUTE      HEX: 20 ; inline ! absolute offset from first
+: OCI_FETCH_RELATIVE      HEX: 40 ; inline ! offset relative to current
+: OCI_FETCH_RESERVED_1    HEX: 80 ; inline ! reserved
+
+! ===============================================
+! Handle Types
+! ===============================================
+
+: OCI_HTYPE_ENV            1  ; inline ! environment handle
+: OCI_HTYPE_ERROR          2  ; inline ! error handle
+: OCI_HTYPE_SVCCTX         3  ; inline ! service handle
+: OCI_HTYPE_STMT           4  ; inline ! statement handle
+: OCI_HTYPE_BIND           5  ; inline ! bind handle
+: OCI_HTYPE_DEFINE         6  ; inline ! define handle
+: OCI_HTYPE_DESCRIBE       7  ; inline ! describe handle
+: OCI_HTYPE_SERVER         8  ; inline ! server handle
+: OCI_HTYPE_SESSION        9  ; inline ! authentication handle
+
+! ===============================================
+! Attribute Types
+! ===============================================
+
+: OCI_ATTR_FNCODE                   1  ; inline ! the OCI function code
+: OCI_ATTR_OBJECT                   2  ; inline ! is the environment initialized in object mode
+: OCI_ATTR_NONBLOCKING_MODE         3  ; inline ! non blocking mode
+: OCI_ATTR_SQLCODE                  4  ; inline ! the SQL verb
+: OCI_ATTR_ENV                      5  ; inline ! the environment handle
+: OCI_ATTR_SERVER                   6  ; inline ! the server handle
+: OCI_ATTR_SESSION                  7  ; inline ! the user session handle
+: OCI_ATTR_TRANS                    8  ; inline ! the transaction handle
+: OCI_ATTR_ROW_COUNT                9  ; inline ! the rows processed so far
+: OCI_ATTR_SQLFNCODE                10 ; inline ! the SQL verb of the statement
+: OCI_ATTR_PREFETCH_ROWS            11 ; inline ! sets the number of rows to prefetch
+: OCI_ATTR_NESTED_PREFETCH_ROWS     12 ; inline ! the prefetch rows of nested table
+: OCI_ATTR_PREFETCH_MEMORY          13 ; inline ! memory limit for rows fetched
+: OCI_ATTR_NESTED_PREFETCH_MEMORY   14 ; inline ! memory limit for nested rows
+: OCI_ATTR_CHAR_COUNT               15 ; inline ! this specifies the bind and define size in characters
+
+! ===============================================
+! OCI integer types
+! ===============================================
+
+TYPEDEF: ushort ub2
+TYPEDEF: short sb2
+TYPEDEF: uint ub4
+TYPEDEF: int sb4
+
+! ===============================================
+! Input data types (ocidfn.h)
+! ===============================================
+
+: SQLT_CHR                  1    ; inline ! (ORANET TYPE) character string
+: SQLT_NUM                  2    ; inline ! (ORANET TYPE) oracle numeric
+: SQLT_INT                  3    ; inline ! (ORANET TYPE) integer
+: SQLT_FLT                  4    ; inline ! (ORANET TYPE) Floating point number
+: SQLT_STR                  5    ; inline ! zero terminated string
+: SQLT_ODT                  156  ; inline ! OCIDate type
+
+! ===============================================
+! Input datetimes and intervals (ocidfn.h)
+! ===============================================
+
+: SQLT_DATE                184   ; inline ! ANSI Date
+: SQLT_TIME                185   ; inline ! TIME
+: SQLT_TIME_TZ             186   ; inline ! TIME WITH TIME ZONE
+: SQLT_TIMESTAMP           187   ; inline ! TIMESTAMP
+: SQLT_TIMESTAMP_TZ        188   ; inline ! TIMESTAMP WITH TIME ZONE
+: SQLT_INTERVAL_YM         189   ; inline ! INTERVAL YEAR TO MONTH
+: SQLT_INTERVAL_DS         190   ; inline ! INTERVAL DAY TO SECOND
+: SQLT_TIMESTAMP_LTZ       232   ; inline ! TIMESTAMP WITH LOCAL TZ
+
+! ===============================================
+! Opaque pointer types
+! ===============================================
+
+TYPEDEF: void dvoid
+TYPEDEF: void oci_env
+TYPEDEF: void oci_server
+TYPEDEF: void oci_error
+TYPEDEF: void oci_svc_ctx
+TYPEDEF: void oci_session
+TYPEDEF: void oci_stmt
+
+LIBRARY: oci
+
+! ===============================================
+! ociap.h
+! ===============================================
+
+FUNCTION: int OCIInitialize ( ub4 mode, void* ctxp, void* malocfp, void* ralocfp, dvoid* mfreefp ) ;
+FUNCTION: int OCITerminate ( ub4 mode ) ;
+FUNCTION: int OCIEnvInit ( void* envhpp, ub4 mode, size_t xtramem_sz, dvoid* usrmempp ) ;
+FUNCTION: int OCIEnvCreate ( dvoid* envhpp, ub4 mode, void* ctxp, void* malocfp, void* ralocfp, void* mfreefp, size_t xtramemz, dvoid* usrmempp ) ;
+FUNCTION: int OCIHandleAlloc ( void* parenth, dvoid* hndlpp, ub4 type, size_t xtramem_sz, dvoid* usrmempp ) ;
+FUNCTION: int OCIServerAttach ( void* srvhp, void* errhp, char* dblink, sb4 dblink_len, ub4 mode ) ;
+FUNCTION: int OCIServerDetach ( void* srvhp, void* errhp, ub4 mode ) ;
+FUNCTION: int OCIHandleFree ( dvoid* p0, ub4 p1 ) ;
+FUNCTION: int OCILogon ( void* envhp, void* errhp, dvoid* svchpp, uchar* username, ub4 uname_len, uchar* passwd, ub4 password_len, uchar* dsn, ub4 dsn_len ) ;
+FUNCTION: int OCILogoff ( void* p0, void* p1 ) ;
+FUNCTION: void OCIErrorGet ( void* handlp, ub4 recordno, char* sqlstate, sb4* errcodep, uchar* bufp, ub4 bufsize, ub4 type ) ;
+FUNCTION: int OCIStmtPrepare ( void* stmtp, void* errhp, uchar* stmt, ub4 stmt_len, ub4 language, ub4 mode ) ;
+FUNCTION: int OCIStmtExecute ( void* svchp, void* stmtp1, void* errhp, ub4 iters, ub4 rowoff, void* snap_in, void* snap_out, ub4 mode ) ;
+FUNCTION: int OCIParamGet ( void* hndlp, ub4 htype, void* errhp, dvoid* parmdpp, ub4 pos ) ;
+FUNCTION: int OCIAttrGet ( void* trgthndlp, ub4 trghndltyp, void* attributep, ub4* sizep, ub4 attrtype, void* errhp ) ;
+FUNCTION: int OCIAttrSet ( dvoid* trgthndlp, ub4 trgthndltyp, dvoid* attributep, ub4 size, ub4 attrtype, oci_error* errhp ) ;
+FUNCTION: int OCIDefineByPos ( void* stmtp, dvoid* defnpp, void* errhp, ub4 position, void* valuep, sb4 value_sz, ub2 dty, sb2* indp, ub2* rlenp, ub2* rcodep, ub4 mode ) ;
+FUNCTION: int OCIStmtFetch ( void* stmthp, void* errhp, ub4 p2, ub2 p3, ub4 p4 ) ;
+FUNCTION: int OCITransStart ( void* svchp, void* errhp, ushort p2, ushort p3 ) ;
+FUNCTION: int OCITransCommit ( void* svchp, void* errhp, ushort p2 ) ;
+FUNCTION: int OCITransRollback ( void* svchp, void* errhp, ushort p2 ) ;
+FUNCTION: int OCISessionBegin ( oci_svc_ctx* svchp, oci_error* errhp,  oci_session* usrhp, ub4 credt, ub4 mode ) ;
+FUNCTION: int OCISessionEnd ( oci_svc_ctx* svchp, oci_error* errhp,  oci_session* usrhp, ub4 mode ) ;
+FUNCTION: int OCIServerVersion ( void* handlp, void* errhp, uchar* bufsz, int bufsz, short hndltype ) ;
diff --git a/unmaintained/oracle/oracle-tests.factor b/unmaintained/oracle/oracle-tests.factor
new file mode 100755 (executable)
index 0000000..2f957ac
--- /dev/null
@@ -0,0 +1,60 @@
+USING: oracle oracle.liboci prettyprint tools.test
+kernel ;
+
+[
+    "testuser" "testpassword" "//localhost/test1" log-on .
+
+    allocate-statement-handle
+
+    "CREATE TABLE TESTTABLE ( COL1 VARCHAR(40), COL2 NUMBER)" prepare-statement
+
+    [ t ] [ execute-statement ] unit-test
+
+    "INSERT INTO TESTTABLE (COL1, COL2) VALUES('hello', 50)" prepare-statement
+
+    [ t ] [ execute-statement ] unit-test
+
+    "INSERT INTO TESTTABLE (COL1, COL2) VALUES('hi', 60)" prepare-statement
+
+    [ t ] [ execute-statement ] unit-test
+
+    "INSERT INTO TESTTABLE (COL1, COL2) VALUES('bye', 70)" prepare-statement
+
+    [ t ] [ execute-statement ] unit-test
+
+    "COMMIT" prepare-statement
+
+    [ t ] [ execute-statement ] unit-test
+
+    "SELECT * FROM TESTTABLE" prepare-statement
+
+    1 SQLT_STR define-by-position run-query
+
+    [ V{ "hello" "hi" "bye" "50" "60" "70" } ] [
+    2 SQLT_STR define-by-position run-query gather-results
+    ] unit-test
+
+    clear-result
+
+    "UPDATE TESTTABLE SET COL2 = 10 WHERE COL1='hi'" prepare-statement
+
+    [ t ] [ execute-statement ] unit-test
+
+    "COMMIT" prepare-statement
+
+    [ t ] [ execute-statement ] unit-test
+
+    "SELECT * FROM TESTTABLE WHERE COL1 = 'hi'" prepare-statement
+
+    [ V{ "10" } ] [
+    2 SQLT_STR define-by-position run-query gather-results
+    ] unit-test
+
+    clear-result
+
+    "DROP TABLE TESTTABLE" prepare-statement
+
+    execute-statement
+
+    free-statement-handle log-off clean-up terminate
+] drop
diff --git a/unmaintained/oracle/oracle.factor b/unmaintained/oracle/oracle.factor
new file mode 100644 (file)
index 0000000..e61a47a
--- /dev/null
@@ -0,0 +1,257 @@
+! Copyright (C) 2007 Elie CHAFTARI
+! See http://factorcode.org/license.txt for BSD license.
+!
+! Adapted from oci.h and ociap.h
+! Tested with Oracle version - 10.1.0.3 Instant Client
+
+USING: alien alien.c-types alien.strings combinators kernel math
+namespaces oracle.liboci prettyprint sequences
+io.encodings.ascii accessors ;
+
+IN: oracle
+
+SYMBOL: env
+SYMBOL: err
+SYMBOL: srv
+SYMBOL: svc
+SYMBOL: ses
+SYMBOL: stm
+SYMBOL: buf
+SYMBOL: res
+
+SYMBOL: con
+
+TUPLE: connection username password db ;
+
+C: <connection> connection
+
+! =========================================================
+! Error-handling routines
+! =========================================================
+
+: get-oci-error ( object -- * )
+    1 f "uint*" <c-object> dup >r 512 "uchar" <c-array> dup >r
+    512 OCI_HTYPE_ERROR OCIErrorGet r> r> *uint drop
+    ascii alien>string throw ;
+
+: check-result ( result -- )
+    {
+        { OCI_SUCCESS [ ] }
+        { OCI_ERROR [ err get get-oci-error ] }
+        { OCI_INVALID_HANDLE [ "invalid handle" throw ] }
+        [ "operation failed" throw ]
+    } case ;
+
+: check-status ( status -- bool )
+    {
+        { OCI_SUCCESS [ t ] }
+        { OCI_ERROR [ err get get-oci-error ] }
+        { OCI_INVALID_HANDLE [ "invalid handle" throw ] }
+        { OCI_NO_DATA [ f ] }
+        [ "operation failed" throw ]
+    } case ;
+
+! =========================================================
+! Initialization and handle-allocation routines
+! =========================================================
+
+! Legacy initialization routine
+: oci-initialize ( -- )
+    OCI_DEFAULT f f f f OCIInitialize check-result ;
+
+! Legacy initialization routine
+: oci-env-init ( -- )
+    "void*" <c-object> dup OCI_DEFAULT 0 f OCIEnvInit
+    check-result *void* env set ;
+
+: create-environment ( -- )
+    "void*" <c-object> dup OCI_DEFAULT f f f f 0 f OCIEnvCreate 
+    check-result *void* env set ;
+
+: allocate-error-handle ( -- )
+    env get
+    "void*" <c-object> tuck OCI_HTYPE_ERROR 0 f OCIHandleAlloc 
+    check-result *void* err set ;
+
+: allocate-service-handle ( -- )
+    env get
+    "void*" <c-object> tuck OCI_HTYPE_SVCCTX 0 f OCIHandleAlloc 
+    check-result *void* svc set ;
+
+: allocate-session-handle ( -- )
+    env get
+    "void*" <c-object> tuck OCI_HTYPE_SESSION 0 f OCIHandleAlloc 
+    check-result *void* ses set ;
+
+: allocate-server-handle ( -- )
+    env get
+    "void*" <c-object> tuck OCI_HTYPE_SERVER 0 f OCIHandleAlloc 
+    check-result *void* srv set ;
+
+: init ( -- )
+    oci-initialize
+    oci-env-init
+    allocate-error-handle
+    allocate-service-handle
+    allocate-session-handle
+    allocate-server-handle ;
+
+! =========================================================
+! Single user session logon routine
+! =========================================================
+
+: oci-log-on ( -- )
+    env get err get svc get 
+    con get username>> dup length swap ascii malloc-string swap 
+    con get password>> dup length swap ascii malloc-string swap
+    con get db>> dup length swap ascii malloc-string swap
+    OCILogon check-result ;
+
+! =========================================================
+! Attach to server and attribute-setting routines
+! =========================================================
+
+: attach-to-server ( -- )
+    srv get err get con get db>> dup length OCI_DEFAULT
+    OCIServerAttach check-result ;
+
+: set-service-attribute ( -- )
+    svc get OCI_HTYPE_SVCCTX srv get 0 OCI_ATTR_SERVER err get OCIAttrSet check-result ;
+
+: set-username-attribute ( -- )
+    ses get OCI_HTYPE_SESSION con get username>> dup length swap ascii malloc-string swap 
+    OCI_ATTR_USERNAME err get OCIAttrSet check-result ;
+
+: set-password-attribute ( -- )
+    ses get OCI_HTYPE_SESSION con get password>> dup length swap ascii malloc-string swap 
+    OCI_ATTR_PASSWORD err get OCIAttrSet check-result ;
+
+: set-attributes ( -- )
+    set-service-attribute
+    set-username-attribute
+    set-password-attribute ;
+
+! =========================================================
+! Session startup routines
+! =========================================================
+
+: begin-session ( -- )
+    svc get err get ses get OCI_CRED_RDBMS OCI_DEFAULT OCISessionBegin check-result ;
+
+: set-authentication-handle ( -- )
+    svc get OCI_HTYPE_SVCCTX ses get 0 OCI_ATTR_SESSION err get OCIAttrSet check-result ;
+
+! =========================================================
+! Statement preparation and execution routines
+! =========================================================
+
+: allocate-statement-handle ( -- )
+    env get
+    "void*" <c-object> tuck OCI_HTYPE_STMT 0 f OCIHandleAlloc 
+    check-result *void* stm set ;
+
+: prepare-statement ( statement -- )
+    >r stm get err get r> dup length swap ascii malloc-string swap
+    OCI_NTV_SYNTAX OCI_DEFAULT OCIStmtPrepare check-result ;
+
+: calculate-size ( type -- size )
+    {
+        { SQLT_INT [ "int" heap-size ] }
+        { SQLT_FLT [ "float" heap-size ] }
+        { SQLT_CHR [ "char" heap-size ] }
+        { SQLT_NUM [ "int" heap-size 10 * ] }
+        { SQLT_STR [ 64 ] }
+        { SQLT_ODT [ 256 ] }
+    } case ;
+
+: define-by-position ( position type -- )
+    >r >r stm get f <void*> err get
+    r> r> dup calculate-size >r [ "char" malloc-array dup buf set ] keep 1+
+    r> f f f OCI_DEFAULT OCIDefineByPos check-result ;
+
+: execute-statement ( -- bool )
+    svc get stm get err get 1 0 f f OCI_DEFAULT OCIStmtExecute check-status ;
+
+: fetch-statement ( -- bool )
+    stm get err get 1 OCI_FETCH_NEXT OCI_DEFAULT OCIStmtFetch check-status ;
+
+: free-statement-handle ( -- )
+    stm get OCI_HTYPE_STMT OCIHandleFree check-result ;
+
+! =========================================================
+! Log off and detach from server routines
+! =========================================================
+
+: end-session ( -- )
+    svc get err get ses get OCI_DEFAULT OCISessionEnd check-result ;
+
+: detach-from-server ( -- )
+    srv get err get OCI_DEFAULT OCIServerDetach check-result ;
+
+: log-off ( -- )
+    end-session
+    detach-from-server ;
+
+! =========================================================
+! Clean-up and termination routines
+! =========================================================
+
+: free-service-handle ( -- )
+    svc get OCI_HTYPE_SVCCTX OCIHandleFree check-result ;
+
+: free-server-handle ( -- )
+    srv get OCI_HTYPE_SERVER OCIHandleFree check-result ;
+
+: free-error-handle ( -- )
+    err get OCI_HTYPE_ERROR OCIHandleFree check-result ;
+
+: free-environment-handle ( -- )
+    env get OCI_HTYPE_ENV OCIHandleFree check-result ;
+
+: clean-up ( -- )
+    free-service-handle
+    free-server-handle
+    free-error-handle
+    free-environment-handle ;
+
+: terminate ( -- )
+    OCI_DEFAULT OCITerminate check-result ;
+
+! =========================================================
+! Utility routines
+! =========================================================
+
+: server-version ( -- )
+    srv get err get 512 "uchar" malloc-array dup >r 512 OCI_HTYPE_SERVER
+    OCIServerVersion check-result r> ascii alien>string . ;
+
+! =========================================================
+! Public routines
+! =========================================================
+
+: log-on ( username password db -- )
+    <connection> con set 
+    init attach-to-server set-attributes
+    begin-session set-authentication-handle 
+    V{ } clone res set ;
+
+: fetch-each ( object -- object )
+    fetch-statement [
+        buf get ascii alien>string res get swap suffix res set
+        fetch-each
+    ] [ ] if ;
+
+: run-query ( object -- object )
+    execute-statement [
+        buf get ascii alien>string res get swap suffix res set
+        fetch-each
+    ] [ ] if ;
+
+: gather-results ( -- seq )
+    res get ;
+
+: show-result ( -- )
+    res get [ . ] each ;
+
+: clear-result ( -- )
+    V{ } clone res set ;
diff --git a/unmaintained/oracle/summary.txt b/unmaintained/oracle/summary.txt
new file mode 100644 (file)
index 0000000..0596680
--- /dev/null
@@ -0,0 +1 @@
+Oracle database bindings
diff --git a/unmaintained/oracle/tags.txt b/unmaintained/oracle/tags.txt
new file mode 100644 (file)
index 0000000..aa0d57e
--- /dev/null
@@ -0,0 +1 @@
+database
diff --git a/unmaintained/raptor/authors.txt b/unmaintained/raptor/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/raptor/config.factor b/unmaintained/raptor/config.factor
new file mode 100644 (file)
index 0000000..29e26d4
--- /dev/null
@@ -0,0 +1,165 @@
+
+USING: namespaces threads
+       unix.process unix.linux.if unix.linux.ifreq unix.linux.route
+       raptor.cron ;
+
+IN: raptor
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Networking
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: configure-lo ( -- )
+  "lo" "127.0.0.1"      set-if-addr
+  "lo" { IFF_UP } flags set-if-flags ;
+
+: configure-eth1 ( -- )
+  "eth1" "192.168.1.10"                 set-if-addr
+  "eth1" { IFF_UP IFF_MULTICAST } flags set-if-flags ;
+
+: configure-route ( -- )
+  "0.0.0.0" "192.168.1.1" "0.0.0.0" { RTF_UP RTF_GATEWAY } flags route ;
+
+[
+  configure-lo
+  configure-eth1
+  configure-route
+] networking-hook set-global
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Filesystems
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+"/dev/hda1"     root-device     set-global
+
+{ "/dev/hda5" } swap-devices   set-global
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! boot-hook
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+[
+                                    start-wait-loop
+
+  ! rcS.d
+
+  "mountvirtfs"                     start-service
+
+  ! "hostname.sh"                          start-service
+  "narodnik"                        set-hostname
+
+  "keymap.sh"                      start-service
+  "linux-restricted-modules-common" start-service
+  "udev"                            start-service
+  "mountdevsubfs"                  start-service
+  "module-init-tools"              start-service
+  "procps.sh"                      start-service
+
+  !  "checkroot.sh"                start-service
+
+                                   activate-swap
+                                   mount-root
+
+  "mtab"                           start-service
+  "checkfs.sh"                             start-service
+  "mountall.sh"                            start-service
+
+                                   start-networking
+!   "loopback" start-service
+!   "networking" start-service
+
+  "hwclock.sh"                     start-service
+  "displayconfig-hwprobe.py"       start-service
+  "screen"                         start-service
+  "x11-common"                     start-service
+  "bootmisc.sh"                            start-service
+  "urandom"                        start-service
+
+  ! rc2.d
+
+  "vbesave"                        start-service
+  "acpid"                          start-service
+  "powernowd.early"                start-service
+  "sysklogd"                       start-service
+  "klogd"                          start-service
+  "dbus"                           start-service
+  "apmd"                           start-service
+  "hotkey-setup"                   start-service
+  "laptop-mode"                            start-service
+  "makedev"                        start-service
+  "nvidia-kernel"                  start-service
+  "postfix"                        start-service
+  "powernowd"                      start-service
+  "ntp-server"                     start-service
+  "binfmt-support"                 start-service
+  "acpi-support"                   start-service
+  "rc.local"                       start-service
+  "rmnologin"                      start-service
+
+                                   schedule-cron-jobs
+
+  [ [ "/dev/tty2" tty-listener ] forever ] in-thread
+  [ [ "/dev/tty3" tty-listener ] forever ] in-thread
+  [ [ "/dev/tty4" tty-listener ] forever ] in-thread
+  [ [ "/dev/tty5" getty        ] forever ] in-thread
+  [ [ "/dev/tty6" getty        ] forever ] in-thread
+
+] boot-hook set-global
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! reboot-hook
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+[
+  "acpi-support"                   stop-service
+  "apmd"                           stop-service
+  "dbus"                           stop-service
+  "hotkey-setup"                   stop-service
+  "laptop-mode"                    stop-service
+  "makedev"                        stop-service
+  "nvidia-kernel"                  stop-service
+  "powernowd"                      stop-service
+  "acpid"                          stop-service
+  "hwclock.sh"                             stop-service
+  "alsa-utils"                             stop-service
+  "klogd"                          stop-service
+  "binfmt-support"                 stop-service
+  "sysklogd"                        stop-service
+  "linux-restricted-modules-common" stop-service
+  "sendsigs"                       stop-service
+  "urandom"                        stop-service
+  "umountnfs.sh"                   stop-service
+  "networking"                             stop-service
+  "umountfs"                       stop-service
+  "umountroot"                             stop-service
+  "reboot"                         stop-service
+] reboot-hook set-global
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! shutdown-hook
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+[
+  "acpi-support"                   stop-service
+  "apmd"                           stop-service
+  "dbus"                           stop-service
+  "hotkey-setup"                   stop-service
+  "laptop-mode"                    stop-service
+  "makedev"                        stop-service
+  "nvidia-kernel"                  stop-service
+  "postfix"                        stop-service
+  "powernowd"                      stop-service
+  "acpid"                          stop-service
+  "hwclock.sh"                             stop-service
+  "alsa-utils"                             stop-service
+  "klogd"                          stop-service
+  "binfmt-support"                 stop-service
+  "sysklogd"                       stop-service
+  "linux-restricted-modules-common" stop-service
+  "sendsigs"                       stop-service
+  "urandom"                        stop-service
+  "umountnfs.sh"                   stop-service
+  "umountfs"                       stop-service
+  "umountroot"                             stop-service
+  "halt"                           stop-service
+] shutdown-hook set-global
\ No newline at end of file
diff --git a/unmaintained/raptor/cron/authors.txt b/unmaintained/raptor/cron/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/raptor/cron/cron.factor b/unmaintained/raptor/cron/cron.factor
new file mode 100755 (executable)
index 0000000..d818fb4
--- /dev/null
@@ -0,0 +1,62 @@
+
+USING: kernel namespaces threads sequences calendar
+       combinators.lib debugger ;
+
+IN: raptor.cron
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TUPLE: when minute hour day-of-month month day-of-week ;
+
+C: <when> when
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: slot-match? ( now-slot when-slot -- ? ) dup f = [ 2drop t ] [ member? ] if ;
+
+: minute-match? ( now when -- ? )
+  [ timestamp-minute ] [ when-minute ] bi* slot-match? ;
+
+: hour-match? ( now when -- ? )
+  [ timestamp-hour ] [ when-hour ] bi* slot-match? ;
+
+: day-of-month-match? ( now when -- ? )
+  [ timestamp-day ] [ when-day-of-month ] bi* slot-match? ;
+
+: month-match? ( now when -- ? )
+  [ timestamp-month ] [ when-month ] bi* slot-match? ;
+
+: day-of-week-match? ( now when -- ? )
+  [ day-of-week ] [ when-day-of-week ] bi* slot-match? ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: when=now? ( when -- ? )
+  now swap
+  { [ minute-match? ]
+    [ hour-match? ]
+    [ day-of-month-match? ]
+    [ month-match? ]
+    [ day-of-week-match? ] }
+  <--&& ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: recurring-job ( when quot -- )
+  [ swap when=now? [ try ] [ drop ] if 60000 sleep ] [ recurring-job ] 2bi ;
+
+: schedule ( when quot -- ) [ recurring-job ] 2curry in-thread ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYMBOL: cron-jobs-hourly
+SYMBOL: cron-jobs-daily
+SYMBOL: cron-jobs-weekly
+SYMBOL: cron-jobs-monthly
+
+: schedule-cron-jobs ( -- )
+  { 17 } f f f f         <when> [ cron-jobs-hourly  get call ] schedule
+  { 25 } { 6 } f f f     <when> [ cron-jobs-daily   get call ] schedule
+  { 47 } { 6 } f f { 7 } <when> [ cron-jobs-weekly  get call ] schedule
+  { 52 } { 6 } { 1 } f f <when> [ cron-jobs-monthly get call ] schedule ;
+
diff --git a/unmaintained/raptor/cron/tags.txt b/unmaintained/raptor/cron/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/unmaintained/raptor/cronjobs.factor b/unmaintained/raptor/cronjobs.factor
new file mode 100644 (file)
index 0000000..436fb85
--- /dev/null
@@ -0,0 +1,34 @@
+
+USING: kernel namespaces threads arrays sequences
+       raptor raptor.cron ;
+
+IN: raptor
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+[
+    "/etc/cron.daily/apt"             fork-exec-arg
+    "/etc/cron.daily/aptitude"       fork-exec-arg
+    "/etc/cron.daily/bsdmainutils"    fork-exec-arg
+    "/etc/cron.daily/find.notslocate" fork-exec-arg
+    "/etc/cron.daily/logrotate"              fork-exec-arg
+    "/etc/cron.daily/man-db"         fork-exec-arg
+    "/etc/cron.daily/ntp-server"      fork-exec-arg
+    "/etc/cron.daily/slocate"        fork-exec-arg
+    "/etc/cron.daily/standard"       fork-exec-arg
+    "/etc/cron.daily/sysklogd"       fork-exec-arg
+    "/etc/cron.daily/tetex-bin"              fork-exec-arg
+] cron-jobs-daily set-global
+    
+[
+  "/etc/cron.weekly/cvs"                fork-exec-arg
+  "/etc/cron.weekly/man-db"            fork-exec-arg
+  "/etc/cron.weekly/ntp-server"                fork-exec-arg
+  "/etc/cron.weekly/popularity-contest" fork-exec-arg
+  "/etc/cron.weekly/sysklogd"          fork-exec-arg
+] cron-jobs-weekly set-global
+
+[
+  "/etc/cron.monthly/scrollkeeper" fork-exec-arg
+  "/etc/cron.monthly/standard"     fork-exec-arg
+] cron-jobs-monthly set-global
\ No newline at end of file
diff --git a/unmaintained/raptor/raptor.factor b/unmaintained/raptor/raptor.factor
new file mode 100755 (executable)
index 0000000..c0605fe
--- /dev/null
@@ -0,0 +1,80 @@
+
+USING: kernel parser namespaces threads arrays sequences unix unix.process
+       bake ;
+
+IN: raptor
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYMBOL: boot-hook
+SYMBOL: reboot-hook
+SYMBOL: shutdown-hook
+SYMBOL: networking-hook
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: reload-raptor-config ( -- )
+  "/etc/raptor/config.factor" run-file
+  "/etc/raptor/cronjobs.factor" run-file ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: fork-exec-wait ( pathname args -- )
+  fork dup 0 = [ drop exec drop ] [ 2nip wait-for-pid drop ] if ;
+
+: fork-exec-args-wait ( args -- ) [ first ] [ ] bi fork-exec-wait ;
+
+: fork-exec-arg ( arg -- ) 1array [ fork-exec-args-wait ] curry in-thread ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: forever ( quot -- ) [ call ] [ forever ] bi ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: start-service ( name -- ) "/etc/init.d/" " start" surround system drop ;
+: stop-service  ( name -- ) "/etc/init.d/" " stop"  surround system drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: getty ( tty -- ) `{ "/sbin/getty" "38400" , } fork-exec-args-wait ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+USING: io io.files io.streams.lines io.streams.plain io.streams.duplex
+       listener io.encodings.utf8 ;
+
+: tty-listener ( tty -- )
+  dup utf8 <file-reader> [
+    swap utf8 <file-writer> [
+      <duplex-stream> [
+        listener
+      ] with-stream
+    ] with-disposal
+  ] with-disposal ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+USING: unix.linux.swap unix.linux.fs ;
+
+SYMBOL: root-device
+SYMBOL: swap-devices
+
+: activate-swap ( -- ) swap-devices get [ 0 swapon drop ] each ;
+
+: mount-root ( -- ) root-device get "/" "ext3" MS_REMOUNT f mount drop ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: start-networking ( -- ) networking-hook  get call ;
+
+: set-hostname ( name -- ) `{ "/bin/hostname" , } fork-exec-args-wait ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: boot     ( -- ) boot-hook     get call ;
+: reboot   ( -- ) reboot-hook   get call ;
+: shutdown ( -- ) shutdown-hook get call ;
+
+MAIN: boot
+
diff --git a/unmaintained/raptor/readme b/unmaintained/raptor/readme
new file mode 100644 (file)
index 0000000..dfb6890
--- /dev/null
@@ -0,0 +1,134 @@
+
+Raptor Linux
+
+*** Introduction ***
+
+Raptor Linux is a mod of Ubuntu 6.06 (Dapper Drake)
+
+This is unlikely to work on another version of Ubuntu, much less
+another Linux distribution.
+
+*** Features ***
+
+  * /sbin/init is replaced with Factor
+  * Virtual terminals managed by Factor
+  * Listeners run on virtual terminals
+  * Native support for static ip networking
+  * Crontab replacement
+
+*** Install ***
+
+  # mkdir -v /etc/raptor
+
+  # cp -v /scratch/factor/extra/raptor/{config,cronjobs}.factor /etc/raptor
+
+  ( scratchpad ) USE: raptor
+  ( scratchpad ) reload-raptor-config
+  ( scratchpad ) save
+
+  # mv -v /sbin/{init,init.orig}
+
+  # cp -v /scratch/factor/factor /sbin/init
+
+  # cp -v /scratch/factor/factor.image /sbin/init.image
+
+*** Filesystems ***
+
+  # emacs /etc/raptor/config.factor
+
+Edit the root-device and swap-devices variables.
+
+*** Static IP networking ***
+
+If you use a static IP in your network then Factor can take care of
+networking.
+
+  # emacs /etc/raptor/config.factor
+
+  (change the settings accordingly)
+
+The udev system has a hook to bring up ethernet interfaces when they
+are detected. Let's remove this hook since we'll be bringing up the
+interface. Actually, we'll move it, not delete it.
+
+  # mv -v /etc/udev/rules.d/85-ifupdown.rules /root
+
+*** DHCP networking ***
+
+If you're using dhcp then we'll fall back on what Ubuntu offers. In
+your config.factor change the line :
+
+     start-networking
+
+to
+
+       "loopback"   start-service
+       "networking" start-service
+
+Add these to your reboot-hook and shutdown-hook :
+
+       "loopback"   stop-service
+       "networking" stop-service
+
+*** Editing the hooks ***
+
+The items in boot-hook correspond to the things in '/etc/rcS.d' and
+'/etc/rc2.d'. Feel free to add and remove items from that hook. For
+example, I removed the printer services. I also removed other things
+that I didn't feel were necessary on my system.
+
+Look for the line with the call to 'set-hostname' and edit it appropriately.
+
+*** Grub ***
+
+Edit your '/boot/grub/menu.lst'. Basically, copy and paste your
+current good entry. My default entry is this:
+
+title           Ubuntu, kernel 2.6.15-28-686
+root            (hd0,0)
+kernel          /boot/vmlinuz-2.6.15-28-686 root=/dev/hda1 ro quiet splash
+initrd          /boot/initrd.img-2.6.15-28-686
+savedefault
+boot
+
+I pasted a copy above it and edited it to look like this:
+
+title           Raptor, kernel 2.6.15-28-686
+root            (hd0,0)
+kernel          /boot/vmlinuz-2.6.15-28-686 root=/dev/hda1 ro quiet -run=ubuntu.dapper.boot
+initrd          /boot/initrd.img-2.6.15-28-686
+savedefault
+boot
+
+* Note that I removed the 'splash' kernel option
+
+* Note the '-run=ubuntu.dapper.boot' option. Unfortunately, this isn't
+  working yet...
+
+*** Boot ***
+
+Reboot or turn on your computer. Eventually, hopefully, you'll be at a
+Factor prompt. Boot your system:
+
+  ( scratchpad ) boot
+
+You'll probably be prompted to select a vocab. Select 'raptor'.
+
+*** Now what ***
+
+The virtual consoles are allocated like so:
+
+  1 - Main listener console
+  2 - listener
+  3 - listener
+  4 - listener
+  5 - getty
+  6 - getty
+
+So you're next step might be to alt-f5, login, and run startx.
+
+*** Join the fun ***
+
+Take a loot at what happens during run levels S and 2. Implement a
+Factor version of something. Let me know about it.
+
diff --git a/unmaintained/raptor/tags.txt b/unmaintained/raptor/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/unmaintained/route/authors.txt b/unmaintained/route/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/route/route.factor b/unmaintained/route/route.factor
new file mode 100644 (file)
index 0000000..4d9bbfa
--- /dev/null
@@ -0,0 +1,55 @@
+
+USING: alien.syntax ;
+
+IN: unix.linux.route
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+C-STRUCT: struct-rtentry
+  { "ulong"           "rt_pad1" }
+  { "struct-sockaddr" "rt_dst" }
+  { "struct-sockaddr" "rt_gateway" }
+  { "struct-sockaddr" "rt_genmask" }
+  { "ushort"          "rt_flags" }
+  { "short"           "rt_pad2" }
+  { "ulong"           "rt_pad3" }
+  { "uchar"          "rt_tos" }
+  { "uchar"          "rt_class" }
+  { "short"          "rt_pad4" }
+  { "short"          "rt_metric" }
+  { "char*"          "rt_dev" }
+  { "ulong"          "rt_mtu" }
+  { "ulong"          "rt_window" }
+  { "ushort"         "rt_irtt" } ;
+
+: RTF_UP        HEX: 0001 ;            ! Route usable.
+: RTF_GATEWAY   HEX: 0002 ;            ! Destination is a gateway.
+
+: RTF_HOST      HEX: 0004 ;            ! Host entry (net otherwise).
+: RTF_REINSTATE         HEX: 0008 ;            ! Reinstate route after timeout.
+: RTF_DYNAMIC   HEX: 0010 ;            ! Created dyn. (by redirect).
+: RTF_MODIFIED  HEX: 0020 ;            ! Modified dyn. (by redirect).
+: RTF_MTU       HEX: 0040 ;            ! Specific MTU for this route.
+: RTF_MSS       RTF_MTU ;              ! Compatibility.
+: RTF_WINDOW    HEX: 0080 ;            ! Per route window clamping.
+: RTF_IRTT      HEX: 0100 ;            ! Initial round trip time.
+: RTF_REJECT    HEX: 0200 ;            ! Reject route.
+: RTF_STATIC    HEX: 0400 ;            ! Manually injected route.
+: RTF_XRESOLVE  HEX: 0800 ;            ! External resolver.
+: RTF_NOFORWARD  HEX: 1000 ;           ! Forwarding inhibited.
+: RTF_THROW     HEX: 2000 ;            ! Go to next class.
+: RTF_NOPMTUDISC HEX: 4000 ;           ! Do not send packets with DF.
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+USING: kernel alien.c-types io.sockets
+       unix unix.linux.sockios ;
+
+: route ( dst gateway genmask flags -- )
+  >r >r >r >r
+  "struct-rtentry" <c-object>
+  r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_dst
+  r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_gateway
+  r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_genmask
+  r>                                over set-struct-rtentry-rt_flags
+  AF_INET SOCK_DGRAM 0 socket SIOCADDRT rot ioctl drop ;
diff --git a/unmaintained/route/tags.txt b/unmaintained/route/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/unmaintained/sequences-lib/authors.txt b/unmaintained/sequences-lib/authors.txt
new file mode 100644 (file)
index 0000000..07c1c4a
--- /dev/null
@@ -0,0 +1,2 @@
+Eduardo Cavazos
+Doug Coleman
diff --git a/unmaintained/sequences-lib/lib-docs.factor b/unmaintained/sequences-lib/lib-docs.factor
new file mode 100755 (executable)
index 0000000..e279230
--- /dev/null
@@ -0,0 +1,29 @@
+USING: help.syntax help.markup kernel prettyprint sequences\r
+quotations math ;\r
+IN: sequences.lib\r
+\r
+HELP: map-withn\r
+{ $values { "seq" sequence } { "quot" quotation } { "n" number } { "newseq" sequence } }\r
+{ $description "A generalisation of " { $link map } ". The first " { $snippet "n" } " items after the quotation will be "\r
+"passed to the quotation given to map-withn for each element in the sequence."\r
+} \r
+{ $examples\r
+  { $example "USING: math sequences.lib prettyprint ;" "1 2 3 4 { 6 7 8 9 10 } [ + + + + ] 4 map-withn .s" "{ 16 17 18 19 20 }" }\r
+}\r
+{ $see-also each-withn } ;\r
+\r
+HELP: each-withn\r
+{ $values { "seq" sequence } { "quot" quotation } { "n" number } }\r
+{ $description "A generalisation of " { $link each } ". The first " { $snippet "n" } " items after the quotation will be "\r
+"passed to the quotation given to each-withn for each element in the sequence."\r
+} \r
+{ $see-also map-withn } ;\r
+\r
+HELP: randomize\r
+{ $values { "seq" sequence } { "seq'" sequence } }\r
+{ $description "Shuffle the elements in the sequence randomly, returning the new sequence." } ;\r
+\r
+HELP: enumerate\r
+{ $values { "seq" sequence } { "seq'" sequence } }\r
+{ $description "Returns a new sequence where each element is an array of { index, value }" } ;\r
+\r
diff --git a/unmaintained/sequences-lib/lib-tests.factor b/unmaintained/sequences-lib/lib-tests.factor
new file mode 100755 (executable)
index 0000000..509d9b1
--- /dev/null
@@ -0,0 +1,58 @@
+USING: arrays kernel sequences sequences.lib math math.functions math.ranges
+    tools.test strings ;
+IN: sequences.lib.tests
+
+[ 1 2 { 3 4 } [ + + drop ] 2 each-withn  ] must-infer
+{ 13 } [ 1 2 { 3 4 } [ + + ] 2 each-withn + ] unit-test
+
+[ 1 2 { 3 4 } [ + + ] 2 map-withn ] must-infer
+{ { 6 7 } } [ 1 2 { 3 4 } [ + + ] 2 map-withn ] unit-test
+{ { 16 17 18 19 20 } } [ 1 2 3 4 { 6 7 8 9 10 } [ + + + + ] 4 map-withn ] unit-test
+[ { 910 911 912 } ] [ 10 900 3 [ + + ] map-with2 ] unit-test
+
+[ 10 ] [ { 1 2 3 4 } [ + ] reduce* ] unit-test
+[ 24 ] [ { 1 2 3 4 } [ * ] reduce* ] unit-test
+
+[ -4 ] [ 1 -4 [ abs ] higher ] unit-test
+[ 1 ] [ 1 -4 [ abs ] lower ] unit-test
+
+[ { 1 2 3 4 } ] [ { { 1 2 3 4 } { 1 2 3 } } longest ] unit-test
+[ { 1 2 3 4 } ] [ { { 1 2 3 } { 1 2 3 4 } } longest ] unit-test
+
+[ { 1 2 3 } ] [ { { 1 2 3 4 } { 1 2 3 } } shortest ] unit-test
+[ { 1 2 3 } ] [ { { 1 2 3 } { 1 2 3 4 } } shortest ] unit-test
+
+[ 3 ] [ 1 3 bigger ] unit-test
+[ 1 ] [ 1 3 smaller ] unit-test
+
+[ "abd" ] [ "abc" "abd" bigger ] unit-test
+[ "abc" ] [ "abc" "abd" smaller ] unit-test
+
+[ "abe" ] [ { "abc" "abd" "abe" } biggest ] unit-test
+[ "abc" ] [ { "abc" "abd" "abe" } smallest ] unit-test
+
+[ 1 3 ] [ { 1 2 3 } minmax ] unit-test
+[ -11 -9 ] [ { -11 -10 -9 } minmax ] unit-test
+[ -1/0. 1/0. ] [ { -1/0. 1/0. -11 -10 -9 } minmax ] unit-test
+
+[ { { 1 } { -1 5 } { 2 4 } } ]
+[ { 1 -1 5 2 4 } [ < ] monotonic-split [ >array ] map ] unit-test
+[ { { 1 1 1 1 } { 2 2 } { 3 } { 4 } { 5 } { 6 6 6 } } ]
+[ { 1 1 1 1 2 2 3 4 5 6 6 6 } [ = ] monotonic-split [ >array ] map ] unit-test
+
+[ { 1 9 25 } ] [ { 1 3 5 6 } [ sq ] [ even? ] map-until ] unit-test
+[ { 2 4 } ] [ { 2 4 1 3 } [ even? ] take-while ] unit-test
+
+[ { { 0 0 } { 1 0 } { 0 1 } { 1 1 } } ] [ 2 2 exact-strings ] unit-test
+[ t ] [ "ab" 4 strings [ >string ] map "abab" swap member? ] unit-test
+[ { { } { 1 } { 2 } { 1 2 } } ] [ { 1 2 } power-set ] unit-test
+
+[ 1 2 { 3 4 } [ + + ] 2 map-withn ] must-infer
+{ { 6 7 } } [ 1 2 { 3 4 } [ + + ] 2 map-withn ] unit-test
+{ { 16 17 18 19 20 } } [ 1 2 3 4 { 6 7 8 9 10 } [ + + + + ] 4 map-withn ] unit-test
+[ 1 2 { 3 4 } [ + + drop ] 2 each-withn  ] must-infer
+{ 13 } [ 1 2 { 3 4 } [ + + ] 2 each-withn + ] unit-test
+[ { 910 911 912 } ] [ 10 900 3 [ + + ] map-with2 ] unit-test
+
+[ { { 0 1 } { 1 2 } { 2 3 } } ] [ { 1 2 3 } enumerate ] unit-test
+
diff --git a/unmaintained/sequences-lib/lib.factor b/unmaintained/sequences-lib/lib.factor
new file mode 100755 (executable)
index 0000000..72944c0
--- /dev/null
@@ -0,0 +1,149 @@
+! Copyright (C) 2007 Slava Pestov, Chris Double, Doug Coleman,
+!                    Eduardo Cavazos, Daniel Ehrenberg.
+! See http://factorcode.org/license.txt for BSD license.
+USING: combinators.lib kernel sequences math namespaces make
+assocs random sequences.private shuffle math.functions arrays
+math.parser math.private sorting strings ascii macros assocs.lib
+quotations hashtables math.order locals generalizations
+math.ranges random fry ;
+IN: sequences.lib
+
+: each-withn ( seq quot n -- ) nwith each ; inline
+
+: each-with ( seq quot -- ) with each ; inline
+
+: each-with2 ( obj obj list quot -- ) 2 each-withn ; inline
+
+: map-withn ( seq quot n -- newseq ) nwith map ; inline
+
+: map-with ( seq quot -- ) with map ; inline
+
+: map-with2 ( obj obj list quot -- newseq ) 2 map-withn ; inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: each-percent ( seq quot -- )
+  [
+    dup length
+    dup [ / ] curry
+    [ 1+ ] prepose
+  ] dip compose
+  2each ;                       inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: reduce* ( seq quot -- result ) [ ] swap map-reduce ; inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: higher ( a b quot -- c ) [ compare +gt+ eq? ] curry most ; inline
+
+: lower  ( a b quot -- c ) [ compare +lt+ eq? ] curry most ; inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: longer  ( a b -- c ) [ length ] higher ;
+
+: shorter ( a b -- c ) [ length ] lower ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: longest ( seq -- item ) [ longer ] reduce* ;
+
+: shortest ( seq -- item ) [ shorter ] reduce* ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: bigger ( a b -- c ) [ ] higher ;
+
+: smaller ( a b -- c ) [ ] lower ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: biggest ( seq -- item ) [ bigger ] reduce* ;
+
+: smallest ( seq -- item ) [ smaller ] reduce* ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: minmax ( seq -- min max )
+    #! find the min and max of a seq in one pass
+    1/0. -1/0. rot [ tuck max [ min ] dip ] each ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: ,, ( obj -- ) building get peek push ;
+: v, ( -- ) V{ } clone , ;
+: ,v ( -- ) building get dup peek empty? [ dup pop* ] when drop ;
+
+: (monotonic-split) ( seq quot -- newseq )
+    [
+        [ dup unclip suffix ] dip
+        v, [ pick ,, call [ v, ] unless ] curry 2each ,v
+    ] { } make ;
+
+: monotonic-split ( seq quot -- newseq )
+    over empty? [ 2drop { } ] [ (monotonic-split) ] if ;
+
+ERROR: element-not-found ;
+: split-around ( seq quot -- before elem after )
+    dupd find over [ element-not-found ] unless
+    [ cut rest ] dip swap ; inline
+
+: map-until ( seq quot pred -- newseq )
+    '[ [ @ dup @ [ drop t ] [ , f ] if ] find 2drop ] { } make ;
+
+: take-while ( seq quot -- newseq )
+    [ not ] compose
+    [ find drop [ head-slice ] when* ] curry
+    [ dup ] prepose keep like ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+<PRIVATE
+: translate-string ( n alphabet out-len -- seq )
+    [ drop /mod ] with map nip  ;
+
+: map-alphabet ( alphabet seq[seq] -- seq[seq] )
+    [ [ swap nth ] with map ] with map ;
+
+: exact-number-strings ( n out-len -- seqs )
+    [ ^ ] 2keep [ translate-string ] 2curry map ;
+
+: number-strings ( n max-length -- seqs )
+    1+ [ exact-number-strings ] with map concat ;
+PRIVATE>
+
+: exact-strings ( alphabet length -- seqs )
+    [ dup length ] dip exact-number-strings map-alphabet ;
+
+: strings ( alphabet length -- seqs )
+    [ dup length ] dip number-strings map-alphabet ;
+
+: switches ( seq1 seq -- subseq )
+    ! seq1 is a sequence of ones and zeroes
+    [ [ length ] keep [ nth 1 = ] curry filter ] dip
+    [ nth ] curry { } map-as ;
+
+: power-set ( seq -- subsets )
+    2 over length exact-number-strings swap [ switches ] curry map ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+<PRIVATE
+: (attempt-each-integer) ( i n quot -- result )
+    [
+        iterate-step roll
+        [ 3nip ] [ iterate-next (attempt-each-integer) ] if*
+    ] [ 3drop f ] if-iterate? ; inline recursive
+PRIVATE>
+
+: attempt-each ( seq quot -- result )
+    (each) iterate-prep (attempt-each-integer) ; inline
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: randomize ( seq -- seq' )
+    dup length 1 (a,b] [ dup random pick exchange ] each ;
+
+: enumerate ( seq -- seq' ) <enum> >alist ;
diff --git a/unmaintained/sequences-lib/summary.txt b/unmaintained/sequences-lib/summary.txt
new file mode 100644 (file)
index 0000000..e389b41
--- /dev/null
@@ -0,0 +1 @@
+Non-core sequence words
diff --git a/unmaintained/sequences-lib/tags.txt b/unmaintained/sequences-lib/tags.txt
new file mode 100644 (file)
index 0000000..42d711b
--- /dev/null
@@ -0,0 +1 @@
+collections
diff --git a/unmaintained/sockios/authors.txt b/unmaintained/sockios/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/sockios/sockios.factor b/unmaintained/sockios/sockios.factor
new file mode 100644 (file)
index 0000000..fd1bb10
--- /dev/null
@@ -0,0 +1,64 @@
+
+IN: unix.linux.sockios
+
+! Imported from linux-headers-2.6.15-28-686 on Ubuntu 6.06
+
+! Routing table calls
+: SIOCADDRT    HEX: 890B ;             ! add routing table entry
+: SIOCDELRT    HEX: 890C ;             ! delete routing table entry
+: SIOCRTMSG    HEX: 890D ;             ! call to routing system
+
+! Socket configuration controls
+
+: SIOCGIFNAME       HEX: 8910 ;                ! get iface name
+: SIOCSIFLINK       HEX: 8911 ;                ! set iface channel
+: SIOCGIFCONF       HEX: 8912 ;                ! get iface list
+: SIOCGIFFLAGS      HEX: 8913 ;                ! get flags
+: SIOCSIFFLAGS      HEX: 8914 ;                ! set flags
+: SIOCGIFADDR       HEX: 8915 ;                ! get PA address
+: SIOCSIFADDR       HEX: 8916 ;                ! set PA address
+: SIOCGIFDSTADDR     HEX: 8917 ;               ! get remote PA address
+: SIOCSIFDSTADDR     HEX: 8918 ;               ! set remote PA address
+: SIOCGIFBRDADDR     HEX: 8919 ;               ! get broadcast PA address
+: SIOCSIFBRDADDR     HEX: 891a ;               ! set broadcast PA address
+: SIOCGIFNETMASK     HEX: 891b ;               ! get network PA mask
+: SIOCSIFNETMASK     HEX: 891c ;               ! set network PA mask
+: SIOCGIFMETRIC             HEX: 891d ;                ! get metric
+: SIOCSIFMETRIC             HEX: 891e ;                ! set metric
+: SIOCGIFMEM        HEX: 891f ;                ! get memory address (BSD)
+: SIOCSIFMEM        HEX: 8920 ;                ! set memory address (BSD)
+: SIOCGIFMTU        HEX: 8921 ;                ! get MTU size
+: SIOCSIFMTU        HEX: 8922 ;                ! set MTU size
+: SIOCSIFNAME       HEX: 8923 ;                ! set interface name
+: SIOCSIFHWADDR             HEX: 8924 ;                ! set hardware address
+: SIOCGIFENCAP      HEX: 8925 ;                ! get/set encapsulations
+: SIOCSIFENCAP      HEX: 8926 ;
+: SIOCGIFHWADDR             HEX: 8927 ;                ! Get hardware address
+: SIOCGIFSLAVE      HEX: 8929 ;                ! Driver slaving support
+: SIOCSIFSLAVE      HEX: 8930 ;
+: SIOCADDMULTI      HEX: 8931 ;                ! Multicast address lists
+: SIOCDELMULTI      HEX: 8932 ;
+: SIOCGIFINDEX      HEX: 8933 ;                ! name -> if_index mapping
+: SIOGIFINDEX       SIOCGIFINDEX ;             ! misprint compatibility :-)
+: SIOCSIFPFLAGS             HEX: 8934 ;                ! set/get extended flags set
+: SIOCGIFPFLAGS             HEX: 8935 ;
+: SIOCDIFADDR       HEX: 8936 ;                ! delete PA address
+: SIOCSIFHWBROADCAST HEX: 8937 ;               ! set hardware broadcast addr
+: SIOCGIFCOUNT      HEX: 8938 ;                ! get number of devices
+
+: SIOCGIFBR         HEX: 8940 ;                ! Bridging support
+: SIOCSIFBR         HEX: 8941 ;                ! Set bridging options
+
+: SIOCGIFTXQLEN             HEX: 8942 ;                ! Get the tx queue length
+: SIOCSIFTXQLEN             HEX: 8943 ;                ! Set the tx queue length
+
+: SIOCGIFDIVERT             HEX: 8944 ;                ! Frame diversion support
+: SIOCSIFDIVERT             HEX: 8945 ;                ! Set frame diversion options
+
+: SIOCETHTOOL       HEX: 8946 ;                ! Ethtool interface
+
+: SIOCGMIIPHY       HEX: 8947 ;                ! Get address of MII PHY in use
+: SIOCGMIIREG       HEX: 8948 ;                ! Read MII PHY register.
+: SIOCSMIIREG       HEX: 8949 ;                ! Write MII PHY register.
+
+: SIOCWANDEV        HEX: 894A ;                ! get/set netdev parameters
diff --git a/unmaintained/sockios/tags.txt b/unmaintained/sockios/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
diff --git a/unmaintained/strings-lib/lib-tests.factor b/unmaintained/strings-lib/lib-tests.factor
new file mode 100644 (file)
index 0000000..6e0ce05
--- /dev/null
@@ -0,0 +1,8 @@
+USING: kernel sequences strings.lib tools.test ;
+IN: temporary
+
+[ "abcdefghijklmnopqrstuvwxyz" ] [ lower-alpha-chars "" like ] unit-test
+[ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ] [ upper-alpha-chars "" like ] unit-test
+[ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ] [ alpha-chars "" like ] unit-test
+[ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ] [ alphanumeric-chars "" like ] unit-test
+[ t ] [ 100 [ random-alphanumeric-char ] replicate alphanumeric-chars [ member? ] curry all? ] unit-test
diff --git a/unmaintained/strings-lib/lib.factor b/unmaintained/strings-lib/lib.factor
new file mode 100644 (file)
index 0000000..6ecca05
--- /dev/null
@@ -0,0 +1,33 @@
+USING: math math.ranges arrays sequences kernel random splitting
+strings unicode.case ;
+IN: strings.lib
+
+: >Upper ( str -- str )
+    dup empty? [ unclip ch>upper prefix ] unless ;
+
+: >Upper-dashes ( str -- str )
+    "-" split [ >Upper ] map "-" join ;
+
+: lower-alpha-chars ( -- seq )
+    CHAR: a CHAR: z [a,b] ;
+
+: upper-alpha-chars ( -- seq )
+    CHAR: A CHAR: Z [a,b] ;
+
+: numeric-chars ( -- seq )
+    CHAR: 0 CHAR: 9 [a,b] ;
+
+: alpha-chars ( -- seq )
+    lower-alpha-chars upper-alpha-chars append ;
+
+: alphanumeric-chars ( -- seq )
+    alpha-chars numeric-chars append ;
+
+: random-alpha-char ( -- ch )
+    alpha-chars random ;
+
+: random-alphanumeric-char ( -- ch )
+    alphanumeric-chars random ;
+
+: random-alphanumeric-string ( length -- str )
+    [ random-alphanumeric-char ] "" replicate-as ;
diff --git a/unmaintained/swap/authors.txt b/unmaintained/swap/authors.txt
new file mode 100755 (executable)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/unmaintained/swap/swap.factor b/unmaintained/swap/swap.factor
new file mode 100644 (file)
index 0000000..b4edaaa
--- /dev/null
@@ -0,0 +1,12 @@
+
+USING: alien.syntax ;
+
+IN: unix.linux.swap
+
+: SWAP_FLAG_PREFER      HEX: 8000 ; ! Set if swap priority is specified.
+: SWAP_FLAG_PRIO_MASK   HEX: 7fff ;
+: SWAP_FLAG_PRIO_SHIFT  0 ;
+
+FUNCTION: int swapon ( char* path, int flags ) ;
+
+FUNCTION: int swapoff ( char* path ) ;
\ No newline at end of file
diff --git a/unmaintained/swap/tags.txt b/unmaintained/swap/tags.txt
new file mode 100644 (file)
index 0000000..6bf6830
--- /dev/null
@@ -0,0 +1 @@
+unportable
index 4cf997a51534d2652259f970ae775173889c277d..30b61b5c0c527ec1dc82156ffa72cb701f9f4d28 100755 (executable)
@@ -5,44 +5,44 @@ in the public domain. */
 #define DS_REG r29
 
 DEF(void,primitive_fixnum_add,(void)):
-    lwz r3,0(DS_REG)
-    lwz r4,-4(DS_REG)
-    subi DS_REG,DS_REG,4
-    li r0,0
-    mtxer r0
-    addo. r5,r3,r4
-    bso add_overflow
-    stw r5,0(DS_REG)
-    blr
+       lwz r3,0(DS_REG)
+       lwz r4,-4(DS_REG)
+       subi DS_REG,DS_REG,4
+       li r0,0
+       mtxer r0
+       addo. r5,r3,r4
+       bso add_overflow
+       stw r5,0(DS_REG)
+       blr
 add_overflow:
        b MANGLE(overflow_fixnum_add)
 
 DEF(void,primitive_fixnum_subtract,(void)):
-    lwz r3,-4(DS_REG)
-    lwz r4,0(DS_REG)
-    subi DS_REG,DS_REG,4
-    li r0,0
-    mtxer r0
-    subfo. r5,r4,r3
+       lwz r3,-4(DS_REG)
+       lwz r4,0(DS_REG)
+       subi DS_REG,DS_REG,4
+       li r0,0
+       mtxer r0
+       subfo. r5,r4,r3
        bso sub_overflow
-    stw r5,0(DS_REG)
-    blr
+       stw r5,0(DS_REG)
+       blr
 sub_overflow:
-    b MANGLE(overflow_fixnum_subtract)
+       b MANGLE(overflow_fixnum_subtract)
 
 DEF(void,primitive_fixnum_multiply,(void)):
-    lwz r3,0(DS_REG)
-    lwz r4,-4(DS_REG)
-    subi DS_REG,DS_REG,4
-    srawi r3,r3,3
-    mullwo. r5,r3,r4
-    bso multiply_overflow
-    stw r5,0(DS_REG)
-    blr
+       lwz r3,0(DS_REG)
+       lwz r4,-4(DS_REG)
+       subi DS_REG,DS_REG,4
+       srawi r3,r3,3
+       mullwo. r5,r3,r4
+       bso multiply_overflow
+       stw r5,0(DS_REG)
+       blr
 multiply_overflow:
-    srawi r4,r4,3
-    b MANGLE(overflow_fixnum_multiply)
-    
+       srawi r4,r4,3
+       b MANGLE(overflow_fixnum_multiply)
+       
 /* Note that the XT is passed to the quotation in r11 */
 #define CALL_OR_JUMP_QUOT \
        lwz r11,9(r3)      /* load quotation-xt slot */ XX \
@@ -116,8 +116,9 @@ DEF(void,c_to_factor,(CELL quot)):
        SAVE_INT(r26,13)
        SAVE_INT(r27,14)
        SAVE_INT(r28,15)
+       SAVE_INT(r31,16)
 
-       SAVE_FP(f14,20)    /* save FPRs */
+       SAVE_FP(f14,20) /* save FPRs */
        SAVE_FP(f15,22)
        SAVE_FP(f16,24)
        SAVE_FP(f17,26)
@@ -141,7 +142,7 @@ DEF(void,c_to_factor,(CELL quot)):
        mr r3,r1           /* pass call stack pointer as an argument */
        bl MANGLE(save_callstack_bottom)
 
-       RESTORE_INT(r3,19)     /* restore quotation */
+       RESTORE_INT(r3,19)       /* restore quotation */
        CALL_QUOT
 
        RESTORE_FP(f31,54)
@@ -161,9 +162,10 @@ DEF(void,c_to_factor,(CELL quot)):
        RESTORE_FP(f17,26)
        RESTORE_FP(f16,24)
        RESTORE_FP(f15,22)
-       RESTORE_FP(f14,20)    /* save FPRs */
+       RESTORE_FP(f14,20)      /* save FPRs */
 
-       RESTORE_INT(r28,15)   /* restore GPRs */
+       RESTORE_INT(r31,16)   /* restore GPRs */
+       RESTORE_INT(r28,15)
        RESTORE_INT(r27,14)
        RESTORE_INT(r26,13)
        RESTORE_INT(r25,12)
index ee2c7211119e59212abdd3104bcc12ce15a3a8ac..c3e9e50cee7ce0ab164f392ca4ac1b28d9358f16 100755 (executable)
@@ -166,7 +166,7 @@ long getpagesize(void)
        return g_pagesize;
 }
 
-void sleep_micros(DWORD usec)
+void sleep_micros(u64 usec)
 {
-       Sleep(usec);
+       Sleep((DWORD)(usec / 1000));
 }
index af9b75bca5c931d1028c629ac666eb113c227b29..c5a74e5b093566796fdf8d980ac068eeddc25cb3 100755 (executable)
@@ -20,17 +20,19 @@ typedef wchar_t F_CHAR;
 #define STRNCMP wcsncmp
 #define STRDUP _wcsdup
 
-#define FIXNUM_FORMAT "%Id"
-#define CELL_FORMAT "%lu"
-#define CELL_HEX_FORMAT "%Ix"
 
 #ifdef WIN64
+       #define CELL_FORMAT "%Iu"
+        #define CELL_HEX_FORMAT "%Ix"
        #define CELL_HEX_PAD_FORMAT "%016Ix"
+        #define FIXNUM_FORMAT "%Id"
 #else
+       #define CELL_FORMAT "%lu"
+        #define CELL_HEX_FORMAT "%lx"
        #define CELL_HEX_PAD_FORMAT "%08lx"
+        #define FIXNUM_FORMAT "%ld"
 #endif
 
-#define FIXNUM_FORMAT "%Id"
 
 #define OPEN_READ(path) _wfopen(path,L"rb")
 #define OPEN_WRITE(path) _wfopen(path,L"wb")
@@ -49,7 +51,7 @@ void ffi_dlopen(F_DLL *dll);
 void *ffi_dlsym(F_DLL *dll, F_SYMBOL *symbol);
 void ffi_dlclose(F_DLL *dll);
 
-void sleep_micros(DWORD msec);
+void sleep_micros(u64 msec);
 
 INLINE void init_signals(void) {}
 INLINE void early_init(void) {}