-- reader syntax for arrays, byte arrays, displaced aliens\r
-- out of memory error when printing global namespace\r
-- removing unneeded #label\r
- finish scrollbars\r
- fix up the min thumb size hack\r
\r
\r
+ compiler:\r
\r
+- removing unneeded #label\r
- flushing optimization\r
- compile-byte/cell: instantiating aliens\r
- fix fixnum<< and /i overflow on PowerPC\r
\r
+ kernel:\r
\r
+- reader syntax for arrays, byte arrays, displaced aliens\r
+- out of memory error when printing global namespace\r
- first time hash/vector is grown, set size to something big\r
- merge timers with sleeping tasks\r
- what about tasks and timers between image restarts\r
\ttindex{underline}&A boolean\\
\ttindex{presented}&If set, a presentation for this object is output\\
\ttindex{file}&If set, a hyperlink to that file is output\\
-\ttindex{icon}&If set, the icon named by this resource path is output\\
\end{tabular}
All keys are symbols in the \verb|styles| vocabulary.
"/library/io/string-streams.factor"
"/library/io/c-streams.factor"
"/library/io/files.factor"
- "/library/io/directories.factor"
"/library/io/binary.factor"
"/library/syntax/parse-words.factor"
global [
{{ }} clone responders set
- ! Runs all unit tests and dumps result to the client. This uses
- ! a lot of server resources, so disable it on a busy server.
- [
- "test" "responder" set
- [ test-responder ] "get" set
- ] make-responder
-
! 404 error message pages are served by this guy
[
"404" "responder" set
[ drop no-such-responder ] "get" set
] make-responder
+ ! Servers Factor word definitions from the image.
+ "browser" [ browser-responder ] install-cont-responder
+
! Serves files from a directory stored in the "doc-root"
! variable. You can set the variable in the global namespace,
! or inside the responder.
[ file-responder ] "head" set
] make-responder
- ! Serves Factor source code
- [
- "resource" "responder" set
- [ resource-responder ] "get" set
- ] make-responder
-
- ! Servers Factor word definitions from the image.
- "browser" [ browser-responder ] install-cont-responder
-
! The root directory is served by...
"file" set-default-responder
serve-static
] ifte ;
+: file-link. ( text path -- )
+ file swons unit format ;
+
+: file-type. ( path -- )
+ directory? "[DIR ] " "[FILE] " ? write ;
+
+: file. ( dir name -- )
+ tuck path+ [ file-type. ] keep file-link. ;
+
+: directory. ( dir -- )
+ dup directory [ file. terpri ] each-with ;
+
: list-directory ( directory -- )
serving-html
"method" get "head" = [
drop call
] ifte ;
-: icon-tag ( string style quot -- )
- over icon swap assoc dup [
- <img src= "/responder/resource/" swap append img/>
- #! Ignore the quotation, since no further style
- #! can be applied
- 3drop
- ] [
- drop call
- ] ifte ;
-
TUPLE: html-stream ;
M: html-stream stream-write1 ( char stream -- )
[
[
[
- [
- [ drop chars>entities write ] span-tag
- ] file-link-tag
- ] icon-tag
+ [ drop chars>entities write ] span-tag
+ ] file-link-tag
] browser-link-tag
] with-wrapper ;
#! font-style
#! font-size
#! underline
- #! icon
#! file
#! word
#! vocab
"/library/httpd/responder.factor"
"/library/httpd/httpd.factor"
"/library/httpd/file-responder.factor"
- "/library/httpd/test-responder.factor"
- "/library/httpd/resource-responder.factor"
"/library/httpd/cont-responder.factor"
"/library/httpd/browser-responder.factor"
"/library/httpd/default-responders.factor"
+++ /dev/null
-! Copyright (C) 2004, 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: resource-responder
-USING: httpd kernel lists namespaces io ;
-
-: resource-response ( mime-type -- )
- "Content-Type" swons unit "200 OK" response terpri ;
-
-: serve-resource ( filename mime-type -- )
- dup mime-type resource-response "method" get "head" = [
- drop
- ] [
- <resource-stream> stdio get stream-copy
- ] ifte ;
-
-: resource-responder ( filename -- )
- "resource-path" get [
- serve-resource
- ] [
- drop "404 resource-path not set" httpd-error
- ] ifte ;
+++ /dev/null
-! Copyright (C) 2004, 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: test-responder
-USING: html httpd kernel test ;
-
-: test-responder ( argument -- )
- drop
- serving-html
- "Factor Test Suite" [ all-tests ] simple-html-document ;
+++ /dev/null
-! Copyright (C) 2004, 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: io
-USING: hashtables kernel lists namespaces presentation sequences
-strings styles ;
-
-! Hyperlinked directory listings.
-
-: dir-icon "/library/icons/Folder.png" ;
-: file-icon "/library/icons/File.png" ;
-: file-icon. directory? dir-icon file-icon ? write-icon ;
-
-: file-link. ( dir name -- )
- tuck path+ file swons unit format ;
-
-: file. ( dir name -- )
- #! If "doc-root" set, create links relative to it.
- 2dup path+ file-icon. " " write file-link. terpri ;
-
-: directory. ( dir -- )
- #! If "doc-root" set, create links relative to it.
- dup directory [
- dup [ "." ".." ] member? [ 2drop ] [ file. ] ifte
- ] each-with ;
! Words for accessing filesystem meta-data.
: path+ ( path path -- path ) "/" swap append3 ;
+
: exists? ( file -- ? ) stat >boolean ;
+
: directory? ( file -- ? ) stat car ;
-: directory ( dir -- list ) (directory) string-sort ;
+
+: directory ( dir -- list )
+ (directory) { "." ".." } swap seq-diff string-sort ;
+
: file-length ( file -- length ) stat third ;
+
: file-extension ( filename -- extension )
"." split cdr dup [ peek ] when ;
: terpri ( -- ) stdio get stream-terpri ;\r
: close ( -- ) stdio get stream-close ;\r
\r
-: write-icon ( resource -- )\r
- #! Write an icon. Eg, /library/icons/File.png\r
- icon swons unit "" swap format ;\r
-\r
: write-object ( string object -- )\r
presented swons unit format ;\r
\r
SYMBOL: underline
-SYMBOL: icon
-
SYMBOL: presented
SYMBOL: file