From 7c596f6b02fe2592fa7af0698b37d4232f5ddc5e Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Wed, 24 Sep 2008 00:02:36 -0300 Subject: [PATCH 001/244] irc.client: Make irc-client have its own nick field, profiles shouldn't be mutated --- extra/irc/client/client-tests.factor | 6 +++--- extra/irc/client/client.factor | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/extra/irc/client/client-tests.factor b/extra/irc/client/client-tests.factor index c768c1a82e..3554f6c120 100644 --- a/extra/irc/client/client-tests.factor +++ b/extra/irc/client/client-tests.factor @@ -42,9 +42,9 @@ M: mb-writer stream-nl ( mb-writer -- ) ! TESTS ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -[ { t } [ irc> profile>> nickname>> me? ] unit-test +[ { t } [ irc> nick>> me? ] unit-test - { "factorbot" } [ irc> profile>> nickname>> ] unit-test + { "factorbot" } [ irc> nick>> ] unit-test { "someuser" } [ "someuser!n=user@some.where" parse-name ] unit-test @@ -58,7 +58,7 @@ M: mb-writer stream-nl ( mb-writer -- ) ! Test login and nickname set [ { "factorbot2" } [ ":some.where 001 factorbot2 :Welcome factorbot2" %push-line - irc> profile>> nickname>> + irc> nick>> ] unit-test ] with-irc diff --git a/extra/irc/client/client.factor b/extra/irc/client/client.factor index 569f6c4bf7..b6eeec9468 100755 --- a/extra/irc/client/client.factor +++ b/extra/irc/client/client.factor @@ -18,9 +18,9 @@ TUPLE: irc-profile server port nickname password ; C: irc-profile TUPLE: irc-client profile stream in-messages out-messages join-messages - listeners is-running connect reconnect-time ; + listeners is-running nick connect reconnect-time ; : ( profile -- irc-client ) - f H{ } clone f + [ f H{ } clone f ] keep nickname>> [ latin1 ] 15 seconds irc-client boa ; TUPLE: irc-listener in-messages out-messages ; @@ -78,7 +78,9 @@ PRIVATE> : terminate-irc ( irc-client -- ) [ is-running>> ] keep and [ - [ end-loops ] [ [ f ] dip (>>is-running) ] bi + [ end-loops ] + [ [ f ] dip (>>is-running) ] + bi ] when* ; out-messages>> mailbox-put ; : listener> ( name -- listener/f ) irc> listeners>> at ; : channel-mode? ( mode -- ? ) name>> first "#&" member? ; -: me? ( string -- ? ) irc> profile>> nickname>> = ; +: me? ( string -- ? ) irc> nick>> = ; GENERIC: to-listener ( message obj -- ) @@ -122,7 +124,7 @@ M: irc-listener to-listener ( message irc-listener -- ) : listeners-with-participant ( nick -- seq ) irc> listeners>> values - [ dup irc-channel-listener? [ participants>> key? ] [ 2drop f ] if ] + [ [ irc-channel-listener? ] keep and [ participants>> key? ] when* ] with filter ; : to-listeners-with-participant ( message nickname -- ) @@ -218,7 +220,7 @@ M: object process-message ( object -- ) drop ; M: logged-in process-message ( logged-in -- ) - name>> irc> profile>> (>>nickname) ; + name>> irc> (>>nick) ; M: ping process-message ( ping -- ) trailing>> /PONG ; @@ -285,7 +287,7 @@ DEFER: (connect-irc) irc> [ [ irc-disconnected ] dip in-messages>> mailbox-put ] [ dup reconnect-time>> sleep (connect-irc) ] - [ profile>> nickname>> /LOGIN ] + [ nick>> /LOGIN ] tri ; ! FIXME: do something with the exception, store somewhere to help debugging @@ -391,7 +393,7 @@ PRIVATE> : connect-irc ( irc-client -- ) [ irc> - [ (connect-irc) ] [ profile>> nickname>> /LOGIN ] bi + [ (connect-irc) ] [ nick>> /LOGIN ] bi spawn-irc ] with-irc-client ; : add-listener ( irc-listener irc-client -- ) From 6e09d7cb634e7ed2a537e48c8ede4a4541e65cb1 Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Thu, 25 Sep 2008 01:05:44 -0300 Subject: [PATCH 002/244] irc.client: Refactor, clean, etc. Stop using a thread for each listener for output messages --- extra/irc/client/client-tests.factor | 73 ++++++---- extra/irc/client/client.factor | 166 +++++++++-------------- extra/irc/messages/messages-tests.factor | 10 ++ extra/irc/messages/messages.factor | 71 +++++----- extra/irc/ui/ui.factor | 14 +- 5 files changed, 159 insertions(+), 175 deletions(-) diff --git a/extra/irc/client/client-tests.factor b/extra/irc/client/client-tests.factor index 3554f6c120..acd5a783db 100644 --- a/extra/irc/client/client-tests.factor +++ b/extra/irc/client/client-tests.factor @@ -28,9 +28,11 @@ M: mb-writer stream-nl ( mb-writer -- ) dup [ spawn-irc yield ] with-irc-client ; ! to be used inside with-irc-client quotations -: %add-named-listener ( listener -- ) [ name>> ] keep set+run-listener ; -: %join ( channel -- ) irc> add-listener ; +: %add-named-listener ( listener -- ) irc> add-listener ; : %push-line ( line -- ) irc> stream>> in>> push-line yield ; +: %join ( channel -- ) + + [ irc> add-listener ] [ join-irc-channel ] bi ; : read-matching-message ( listener quot: ( msg -- ? ) -- irc-message ) [ in-messages>> 0.1 seconds ] dip mailbox-get-timeout? ; @@ -62,13 +64,28 @@ M: mb-writer stream-nl ( mb-writer -- ) ] unit-test ] with-irc +! Test connect +{ V{ "NICK factorbot" "USER factorbot hostname servername :irc.factor" } } [ + "someserver" irc-port "factorbot" f + [ 2drop t ] >>connect + [ connect-irc ] keep stream>> out>> lines>> +] unit-test + +! Test join +[ { "JOIN #factortest" } [ + "#factortest" %join + irc> stream>> out>> lines>> pop + ] unit-test +] with-irc + [ { join_ "#factortest" } [ + "#factortest" [ %add-named-listener ] keep { ":factorbot!n=factorbo@some.where JOIN :#factortest" ":ircserver.net 353 factorbot @ #factortest :@factorbot " ":ircserver.net 366 factorbot #factortest :End of /NAMES list." ":ircserver.net 477 factorbot #factortest :[ircserver-info] blah blah" } [ %push-line ] each - irc> join-messages>> 0.1 seconds mailbox-get-timeout + in-messages>> 0.1 seconds mailbox-get-timeout [ class ] [ trailing>> ] bi ] unit-test ] with-irc @@ -89,8 +106,8 @@ M: mb-writer stream-nl ( mb-writer -- ) ] with-irc [ { privmsg "factorbot" "hello" } [ - "somedude" [ %add-named-listener ] keep - ":somedude!n=user@isp.net PRIVMSG factorbot :hello" %push-line + "ircuser" [ %add-named-listener ] keep + ":ircuser!n=user@isp.net PRIVMSG factorbot :hello" %push-line [ privmsg? ] read-matching-message [ class ] [ name>> ] [ trailing>> ] tri ] unit-test @@ -104,48 +121,48 @@ M: mb-writer stream-nl ( mb-writer -- ) ] with-irc ! Participant lists tests -[ { H{ { "somedude" +normal+ } } } [ +[ { H{ { "ircuser" +normal+ } } } [ "#factortest" [ %add-named-listener ] keep - ":somedude!n=user@isp.net JOIN :#factortest" %push-line + ":ircuser!n=user@isp.net JOIN :#factortest" %push-line participants>> ] unit-test ] with-irc -[ { H{ { "somedude2" +normal+ } } } [ +[ { H{ { "ircuser2" +normal+ } } } [ "#factortest" - H{ { "somedude2" +normal+ } - { "somedude" +normal+ } } clone >>participants + H{ { "ircuser2" +normal+ } + { "ircuser" +normal+ } } clone >>participants [ %add-named-listener ] keep - ":somedude!n=user@isp.net PART #factortest" %push-line + ":ircuser!n=user@isp.net PART #factortest" %push-line participants>> ] unit-test ] with-irc -[ { H{ { "somedude2" +normal+ } } } [ +[ { H{ { "ircuser2" +normal+ } } } [ "#factortest" - H{ { "somedude2" +normal+ } - { "somedude" +normal+ } } clone >>participants + H{ { "ircuser2" +normal+ } + { "ircuser" +normal+ } } clone >>participants [ %add-named-listener ] keep - ":somedude!n=user@isp.net QUIT" %push-line + ":ircuser!n=user@isp.net QUIT" %push-line participants>> ] unit-test ] with-irc -[ { H{ { "somedude2" +normal+ } } } [ +[ { H{ { "ircuser2" +normal+ } } } [ "#factortest" - H{ { "somedude2" +normal+ } - { "somedude" +normal+ } } clone >>participants + H{ { "ircuser2" +normal+ } + { "ircuser" +normal+ } } clone >>participants [ %add-named-listener ] keep - ":somedude2!n=user2@isp.net KICK #factortest somedude" %push-line + ":ircuser2!n=user2@isp.net KICK #factortest ircuser" %push-line participants>> ] unit-test ] with-irc -[ { H{ { "somedude2" +normal+ } } } [ +[ { H{ { "ircuser2" +normal+ } } } [ "#factortest" - H{ { "somedude" +normal+ } } clone >>participants + H{ { "ircuser" +normal+ } } clone >>participants [ %add-named-listener ] keep - ":somedude!n=user2@isp.net NICK :somedude2" %push-line + ":ircuser!n=user2@isp.net NICK :ircuser2" %push-line participants>> ] unit-test ] with-irc @@ -159,20 +176,20 @@ M: mb-writer stream-nl ( mb-writer -- ) ] unit-test ] with-irc -[ { T{ participant-changed f "somedude" +part+ f } } [ +[ { T{ participant-changed f "ircuser" +part+ f } } [ "#factortest" - H{ { "somedude" +normal+ } } clone >>participants + H{ { "ircuser" +normal+ } } clone >>participants [ %add-named-listener ] keep - ":somedude!n=user@isp.net QUIT" %push-line + ":ircuser!n=user@isp.net QUIT" %push-line [ participant-changed? ] read-matching-message ] unit-test ] with-irc -[ { T{ participant-changed f "somedude" +nick+ "somedude2" } } [ +[ { T{ participant-changed f "ircuser" +nick+ "ircuser2" } } [ "#factortest" - H{ { "somedude" +normal+ } } clone >>participants + H{ { "ircuser" +normal+ } } clone >>participants [ %add-named-listener ] keep - ":somedude!n=user2@isp.net NICK :somedude2" %push-line + ":ircuser!n=user2@isp.net NICK :ircuser2" %push-line [ participant-changed? ] read-matching-message ] unit-test ] with-irc diff --git a/extra/irc/client/client.factor b/extra/irc/client/client.factor index b6eeec9468..ca16ff3b88 100755 --- a/extra/irc/client/client.factor +++ b/extra/irc/client/client.factor @@ -17,13 +17,13 @@ IN: irc.client TUPLE: irc-profile server port nickname password ; C: irc-profile -TUPLE: irc-client profile stream in-messages out-messages join-messages +TUPLE: irc-client profile stream in-messages out-messages listeners is-running nick connect reconnect-time ; : ( profile -- irc-client ) - [ f H{ } clone f ] keep nickname>> + [ f H{ } clone f ] keep nickname>> [ latin1 ] 15 seconds irc-client boa ; -TUPLE: irc-listener in-messages out-messages ; +TUPLE: irc-listener in-messages client ; TUPLE: irc-server-listener < irc-listener ; TUPLE: irc-channel-listener < irc-listener name password timeout participants ; TUPLE: irc-nick-listener < irc-listener name ; @@ -47,14 +47,14 @@ SYMBOL: +nick+ : ( -- irc-listener ) irc-listener boa ; : ( -- irc-server-listener ) - irc-server-listener boa ; + f irc-server-listener boa ; : ( name -- irc-channel-listener ) - [ ] dip f 60 seconds H{ } clone + [ f ] dip f 60 seconds H{ } clone irc-channel-listener boa ; : ( name -- irc-nick-listener ) - [ ] dip irc-nick-listener boa ; + [ f ] dip irc-nick-listener boa ; ! ====================================== ! Message objects @@ -68,19 +68,11 @@ SINGLETON: irc-end ! sent when the client isn't running anymore SINGLETON: irc-disconnected ! sent when connection is lost SINGLETON: irc-connected ! sent when connection is established -> values [ out-messages>> ] map ] - [ in-messages>> ] - [ out-messages>> ] tri 2array prepend - [ irc-end swap mailbox-put ] each ; -PRIVATE> - : terminate-irc ( irc-client -- ) [ is-running>> ] keep and [ - [ end-loops ] - [ [ f ] dip (>>is-running) ] - bi + f >>is-running + [ in-messages>> ] [ out-messages>> ] bi 2array + [ irc-end swap mailbox-put ] each ] when* ; [ +server-listener+ listener> ] unless* [ to-listener ] [ drop ] if* ; -M: irc-listener to-listener ( message irc-listener -- ) - in-messages>> mailbox-put ; +M: irc-listener to-listener in-messages>> mailbox-put ; : unregister-listener ( name -- ) irc> listeners>> @@ -156,10 +147,6 @@ M: irc-listener to-listener ( message irc-listener -- ) DEFER: me? -: maybe-forward-join ( join -- ) - [ irc-message-sender me? ] keep and - [ irc> join-messages>> mailbox-put ] when* ; - ! ====================================== ! IRC client messages ! ====================================== @@ -187,63 +174,50 @@ DEFER: me? ! ====================================== GENERIC: forward-name ( irc-message -- name ) -M: join forward-name ( join -- name ) trailing>> ; -M: part forward-name ( part -- name ) channel>> ; -M: kick forward-name ( kick -- name ) channel>> ; -M: mode forward-name ( mode -- name ) name>> ; -M: privmsg forward-name ( privmsg -- name ) - dup name>> me? [ irc-message-sender ] [ name>> ] if ; +M: join forward-name trailing>> ; +M: part forward-name channel>> ; +M: kick forward-name channel>> ; +M: mode forward-name name>> ; +M: privmsg forward-name dup name>> me? [ irc-message-sender ] [ name>> ] if ; UNION: single-forward join part kick mode privmsg ; UNION: multiple-forward nick quit ; UNION: broadcast-forward irc-end irc-disconnected irc-connected ; GENERIC: forward-message ( irc-message -- ) -M: irc-message forward-message ( irc-message -- ) +M: irc-message forward-message +server-listener+ listener> [ to-listener ] [ drop ] if* ; -M: single-forward forward-message ( forward-single -- ) - dup forward-name to-listener ; +M: single-forward forward-message dup forward-name to-listener ; -M: multiple-forward forward-message ( multiple-forward -- ) +M: multiple-forward forward-message dup irc-message-sender to-listeners-with-participant ; - -M: join forward-message ( join -- ) - [ maybe-forward-join ] [ call-next-method ] bi ; - -M: broadcast-forward forward-message ( irc-broadcasted-message -- ) + +M: broadcast-forward forward-message irc> listeners>> values [ to-listener ] with each ; GENERIC: process-message ( irc-message -- ) +M: object process-message drop ; +M: logged-in process-message name>> irc> (>>nick) ; +M: ping process-message trailing>> /PONG ; +M: nick-in-use process-message name>> "_" append /NICK ; -M: object process-message ( object -- ) - drop ; - -M: logged-in process-message ( logged-in -- ) - name>> irc> (>>nick) ; - -M: ping process-message ( ping -- ) - trailing>> /PONG ; - -M: nick-in-use process-message ( nick-in-use -- ) - name>> "_" append /NICK ; - -M: join process-message ( join -- ) +M: join process-message [ drop +normal+ ] [ irc-message-sender ] [ trailing>> ] tri dup listener> [ add-participant ] [ 3drop ] if ; -M: part process-message ( part -- ) +M: part process-message [ irc-message-sender ] [ channel>> ] bi remove-participant ; -M: kick process-message ( kick -- ) +M: kick process-message [ [ who>> ] [ channel>> ] bi remove-participant ] [ dup who>> me? [ unregister-listener ] [ drop ] if ] bi ; -M: quit process-message ( quit -- ) +M: quit process-message irc-message-sender remove-participant-from-all ; -M: nick process-message ( nick -- ) +M: nick process-message [ irc-message-sender ] [ trailing>> ] bi rename-participant-in-all ; ! M: mode process-message ( mode -- ) @@ -259,7 +233,7 @@ M: nick process-message ( nick -- ) trailing>> [ blank? ] trim " " split [ >nick/mode 2array ] map >hashtable ; -M: names-reply process-message ( names-reply -- ) +M: names-reply process-message [ names-reply>participants ] [ channel>> listener> ] bi [ [ (>>participants) ] [ [ f f f ] dip name>> to-listener ] bi @@ -270,9 +244,8 @@ M: names-reply process-message ( names-reply -- ) ! ====================================== GENERIC: handle-outgoing-irc ( irc-message -- ? ) -M: irc-end handle-outgoing-irc ( irc-end -- ? ) drop f ; -M: irc-message handle-outgoing-irc ( irc-message -- ? ) - irc-message>client-line irc-print t ; +M: irc-end handle-outgoing-irc drop f ; +M: irc-message handle-outgoing-irc irc-message>client-line irc-print t ; ! ====================================== ! Reader/Writer @@ -326,16 +299,11 @@ DEFER: (connect-irc) [ nip ] } cond ; -GENERIC: handle-listener-out ( irc-message -- ? ) -M: irc-end handle-listener-out ( irc-end -- ? ) drop f ; -M: irc-message handle-listener-out ( irc-message -- ? ) - irc> out-messages>> mailbox-put t ; - -: listener-loop ( name -- ? ) - dup listener> [ - out-messages>> mailbox-get - maybe-annotate-with-name handle-listener-out - ] [ drop f ] if* ; +GENERIC: annotate-message ( listener object -- object ) +M: object annotate-message nip ; +M: part annotate-message swap name>> >>channel ; +M: privmsg annotate-message swap name>> >>name ; +M: string annotate-message [ name>> ] dip strings>privmsg ; : spawn-irc ( -- ) [ reader-loop ] "irc-reader-loop" spawn-server @@ -343,48 +311,33 @@ M: irc-message handle-listener-out ( irc-message -- ? ) [ in-multiplexer-loop ] "in-multiplexer-loop" spawn-server 3drop ; -! ====================================== -! Listener join request handling -! ====================================== - -: set+run-listener ( name irc-listener -- ) - over irc> listeners>> set-at - '[ _ listener-loop ] "irc-listener-loop" spawn-server drop ; - GENERIC: (add-listener) ( irc-listener -- ) -M: irc-channel-listener (add-listener) ( irc-channel-listener -- ) - [ [ name>> ] [ password>> ] bi /JOIN ] - [ [ [ drop irc> join-messages>> ] - [ timeout>> ] - [ name>> '[ trailing>> _ = ] ] - tri mailbox-get-timeout? trailing>> ] keep set+run-listener - ] bi ; +M: irc-listener (add-listener) + [ irc> >>client ] [ name>> ] bi irc> listeners>> set-at ; -M: irc-nick-listener (add-listener) ( irc-nick-listener -- ) - [ name>> ] keep set+run-listener ; - -M: irc-server-listener (add-listener) ( irc-server-listener -- ) - [ +server-listener+ ] dip set+run-listener ; +M: irc-server-listener (add-listener) + irc> >>client +server-listener+ irc> listeners>> set-at ; GENERIC: (remove-listener) ( irc-listener -- ) -M: irc-nick-listener (remove-listener) ( irc-nick-listener -- ) +M: irc-nick-listener (remove-listener) name>> unregister-listener ; -M: irc-channel-listener (remove-listener) ( irc-channel-listener -- ) - [ [ name>> ] [ out-messages>> ] bi - [ [ part new ] dip >>channel ] dip mailbox-put ] keep +M: irc-channel-listener (remove-listener) + [ part new annotate-message irc> out-messages>> mailbox-put ] keep name>> unregister-listener ; -M: irc-server-listener (remove-listener) ( irc-server-listener -- ) +M: irc-server-listener (remove-listener) drop +server-listener+ unregister-listener ; : (connect-irc) ( irc-client -- ) - [ profile>> [ server>> ] [ port>> ] bi /CONNECT ] keep - swap >>stream - t >>is-running - in-messages>> [ irc-connected ] dip mailbox-put ; + { + [ profile>> [ server>> ] [ port>> ] bi /CONNECT ] + [ (>>stream) ] + [ t swap (>>is-running) ] + [ in-messages>> [ irc-connected ] dip mailbox-put ] + } cleave ; : with-irc-client ( irc-client quot: ( -- ) -- ) [ \ current-irc-client ] dip with-variable ; inline @@ -392,15 +345,18 @@ M: irc-server-listener (remove-listener) ( irc-server-listener -- ) PRIVATE> : connect-irc ( irc-client -- ) - [ irc> - [ (connect-irc) ] [ nick>> /LOGIN ] bi - spawn-irc ] with-irc-client ; + dup [ [ (connect-irc) ] [ nick>> /LOGIN ] bi spawn-irc ] with-irc-client ; : add-listener ( irc-listener irc-client -- ) swap '[ _ (add-listener) ] with-irc-client ; -: remove-listener ( irc-listener irc-client -- ) - swap '[ _ (remove-listener) ] with-irc-client ; +: remove-listener ( irc-listener -- ) + [ client>> ] keep '[ _ (remove-listener) ] with-irc-client ; + +: join-irc-channel ( irc-channel-listener -- ) + dup client>> [ [ name>> ] [ password>> ] bi /JOIN ] with-irc-client ; + +: write-message ( message irc-listener -- ) + [ swap annotate-message ] [ client>> out-messages>> mailbox-put ] bi ; -: write-message ( message irc-listener -- ) out-messages>> mailbox-put ; : read-message ( irc-listener -- message ) in-messages>> mailbox-get ; diff --git a/extra/irc/messages/messages-tests.factor b/extra/irc/messages/messages-tests.factor index b61dd16448..41272a43f2 100644 --- a/extra/irc/messages/messages-tests.factor +++ b/extra/irc/messages/messages-tests.factor @@ -62,4 +62,14 @@ IN: irc.messages.tests { parameters { } } { trailing "someuser2" } } } [ ":someuser!n=user@some.where NICK :someuser2" + parse-irc-line f >>timestamp ] unit-test + +{ T{ nick-in-use + { line ":ircserver.net 433 * nickname :Nickname is already in use" } + { prefix "ircserver.net" } + { command "433" } + { parameters { "*" "nickname" } } + { name "nickname" } + { trailing "Nickname is already in use" } } } +[ ":ircserver.net 433 * nickname :Nickname is already in use" parse-irc-line f >>timestamp ] unit-test \ No newline at end of file diff --git a/extra/irc/messages/messages.factor b/extra/irc/messages/messages.factor index 9201f822da..882cec5c8d 100755 --- a/extra/irc/messages/messages.factor +++ b/extra/irc/messages/messages.factor @@ -17,7 +17,7 @@ TUPLE: nick < irc-message ; TUPLE: privmsg < irc-message name ; TUPLE: kick < irc-message channel who ; TUPLE: roomlist < irc-message channel names ; -TUPLE: nick-in-use < irc-message asterisk name ; +TUPLE: nick-in-use < irc-message name ; TUPLE: notice < irc-message type ; TUPLE: mode < irc-message name mode parameter ; TUPLE: names-reply < irc-message who channel ; @@ -31,45 +31,43 @@ TUPLE: unhandled < irc-message ; GENERIC: command-string>> ( irc-message -- string ) -M: irc-message command-string>> ( irc-message -- string ) command>> ; -M: ping command-string>> ( ping -- string ) drop "PING" ; -M: join command-string>> ( join -- string ) drop "JOIN" ; -M: part command-string>> ( part -- string ) drop "PART" ; -M: quit command-string>> ( quit -- string ) drop "QUIT" ; -M: nick command-string>> ( nick -- string ) drop "NICK" ; -M: privmsg command-string>> ( privmsg -- string ) drop "PRIVMSG" ; -M: notice command-string>> ( notice -- string ) drop "NOTICE" ; -M: mode command-string>> ( mode -- string ) drop "MODE" ; -M: kick command-string>> ( kick -- string ) drop "KICK" ; +M: irc-message command-string>> command>> ; +M: ping command-string>> drop "PING" ; +M: join command-string>> drop "JOIN" ; +M: part command-string>> drop "PART" ; +M: quit command-string>> drop "QUIT" ; +M: nick command-string>> drop "NICK" ; +M: privmsg command-string>> drop "PRIVMSG" ; +M: notice command-string>> drop "NOTICE" ; +M: mode command-string>> drop "MODE" ; +M: kick command-string>> drop "KICK" ; GENERIC: command-parameters>> ( irc-message -- seq ) -M: irc-message command-parameters>> ( irc-message -- seq ) parameters>> ; -M: ping command-parameters>> ( ping -- seq ) drop { } ; -M: join command-parameters>> ( join -- seq ) drop { } ; -M: part command-parameters>> ( part -- seq ) channel>> 1array ; -M: quit command-parameters>> ( quit -- seq ) drop { } ; -M: nick command-parameters>> ( nick -- seq ) drop { } ; -M: privmsg command-parameters>> ( privmsg -- seq ) name>> 1array ; -M: notice command-parameters>> ( norice -- seq ) type>> 1array ; -M: kick command-parameters>> ( kick -- seq ) - [ channel>> ] [ who>> ] bi 2array ; -M: mode command-parameters>> ( mode -- seq ) - [ name>> ] [ channel>> ] [ mode>> ] tri 3array ; +M: irc-message command-parameters>> parameters>> ; +M: ping command-parameters>> drop { } ; +M: join command-parameters>> drop { } ; +M: part command-parameters>> channel>> 1array ; +M: quit command-parameters>> drop { } ; +M: nick command-parameters>> drop { } ; +M: privmsg command-parameters>> name>> 1array ; +M: notice command-parameters>> type>> 1array ; +M: kick command-parameters>> [ channel>> ] [ who>> ] bi 2array ; +M: mode command-parameters>> [ name>> ] [ channel>> ] [ mode>> ] tri 3array ; GENERIC: (>>command-parameters) ( params irc-message -- ) -M: irc-message (>>command-parameters) ( params irc-message -- ) 2drop ; -M: logged-in (>>command-parameters) ( params part -- ) [ first ] dip (>>name) ; -M: privmsg (>>command-parameters) ( params privmsg -- ) [ first ] dip (>>name) ; -M: notice (>>command-parameters) ( params notice -- ) [ first ] dip (>>type) ; -M: part (>>command-parameters) ( params part -- ) - [ first ] dip (>>channel) ; -M: kick (>>command-parameters) ( params kick -- ) +M: irc-message (>>command-parameters) 2drop ; +M: logged-in (>>command-parameters) [ first ] dip (>>name) ; +M: privmsg (>>command-parameters) [ first ] dip (>>name) ; +M: notice (>>command-parameters) [ first ] dip (>>type) ; +M: part (>>command-parameters) [ first ] dip (>>channel) ; +M: nick-in-use (>>command-parameters) [ second ] dip (>>name) ; +M: kick (>>command-parameters) [ first2 ] dip [ (>>who) ] [ (>>channel) ] bi ; -M: names-reply (>>command-parameters) ( params names-reply -- ) +M: names-reply (>>command-parameters) [ [ first ] dip (>>who) ] [ [ third ] dip (>>channel) ] 2bi ; -M: mode (>>command-parameters) ( params mode -- ) +M: mode (>>command-parameters) { { [ >r 2array r> ] [ [ (>>mode) ] [ (>>name) ] bi ] } { [ >r 3array r> ] [ [ (>>parameter) ] [ (>>mode) ] [ (>>name) ] tri ] } } switch ; @@ -78,16 +76,14 @@ PRIVATE> GENERIC: irc-message>client-line ( irc-message -- string ) -M: irc-message irc-message>client-line ( irc-message -- string ) +M: irc-message irc-message>client-line [ command-string>> ] [ command-parameters>> " " sjoin ] [ trailing>> [ CHAR: : prefix ] [ "" ] if* ] tri 3array " " sjoin ; GENERIC: irc-message>server-line ( irc-message -- string ) - -M: irc-message irc-message>server-line ( irc-message -- string ) - drop "not implemented yet" ; +M: irc-message irc-message>server-line drop "not implemented yet" ; UNION: sender-in-prefix privmsg join part quit kick mode nick ; GENERIC: irc-message-sender ( irc-message -- sender ) -M: sender-in-prefix irc-message-sender ( sender-in-prefix -- sender ) - prefix>> parse-name ; +M: sender-in-prefix irc-message-sender prefix>> parse-name ; : string>irc-message ( string -- object ) dup split-prefix split-trailing diff --git a/extra/irc/ui/ui.factor b/extra/irc/ui/ui.factor index 1e4bcf35f8..c171fef0b6 100755 --- a/extra/irc/ui/ui.factor +++ b/extra/irc/ui/ui.factor @@ -182,11 +182,16 @@ irc-editor "general" f { [ @center grid-add ] keep @bottom grid-add ; +GENERIC: init-listener ( listener -- ) +M: object init-listener drop ; +M: irc-channel-listener init-listener join-irc-channel ; + M: irc-tab graft* - [ listener>> ] [ window>> client>> ] bi add-listener ; + [ listener>> dup ] [ window>> client>> ] bi add-listener + init-listener ; M: irc-tab ungraft* - [ listener>> ] [ window>> client>> ] bi remove-listener ; + listener>> remove-listener ; TUPLE: irc-channel-tab < irc-tab userlist ; @@ -239,8 +244,9 @@ M: irc-tab pref-dim* [ connect-irc ] } cleave ; : server-open ( server port nick password channels -- ) - [ ui-connect [ irc-window ] keep ] dip - [ over join-channel ] each drop ; + [ ui-connect [ irc-window ] keep ] dip 2drop ; +! FIXME: should join channels only after we have been logged in +! [ over join-channel ] each drop ; : main-run ( -- ) run-ircui ; From 177abec11efaca3eec84a0a0df3a5efbf5a5d9b1 Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Tue, 30 Sep 2008 03:00:48 -0300 Subject: [PATCH 003/244] irc.client: Fix listeners-with-participant --- extra/irc/client/client.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extra/irc/client/client.factor b/extra/irc/client/client.factor index ca16ff3b88..606a8206da 100755 --- a/extra/irc/client/client.factor +++ b/extra/irc/client/client.factor @@ -67,6 +67,7 @@ SINGLETON: irc-listener-end ! send to a listener to stop its execution SINGLETON: irc-end ! sent when the client isn't running anymore SINGLETON: irc-disconnected ! sent when connection is lost SINGLETON: irc-connected ! sent when connection is established +SINGLETON: irc-ready ! sent after the client is logged in : terminate-irc ( irc-client -- ) [ is-running>> ] keep and [ @@ -115,7 +116,7 @@ M: irc-listener to-listener in-messages>> mailbox-put ; : listeners-with-participant ( nick -- seq ) irc> listeners>> values - [ [ irc-channel-listener? ] keep and [ participants>> key? ] when* ] + [ [ irc-channel-listener? ] keep and [ participants>> key? ] [ drop f ] if* ] with filter ; : to-listeners-with-participant ( message nickname -- ) From f12357e4e1cf21e11faaf216054b3244f5235394 Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Tue, 30 Sep 2008 03:11:54 -0300 Subject: [PATCH 004/244] irc.client: Fix docs --- extra/irc/client/client-docs.factor | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/extra/irc/client/client-docs.factor b/extra/irc/client/client-docs.factor index 6bb6a6328e..d150e6d36f 100644 --- a/extra/irc/client/client-docs.factor +++ b/extra/irc/client/client-docs.factor @@ -1,20 +1,15 @@ USING: help.markup help.syntax quotations kernel irc.messages ; IN: irc.client -HELP: irc-client "IRC Client object" -"blah" ; +HELP: irc-client "IRC Client object" ; -HELP: irc-server-listener "Listener for server messages unmanaged by other listeners" -"blah" ; +HELP: irc-server-listener "Listener for server messages unmanaged by other listeners" ; -HELP: irc-channel-listener "Listener for irc channels" -"blah" ; +HELP: irc-channel-listener "Listener for irc channels" ; -HELP: irc-nick-listener "Listener for irc users" -"blah" ; +HELP: irc-nick-listener "Listener for irc users" ; -HELP: irc-profile "IRC Client profile object" -"blah" ; +HELP: irc-profile "IRC Client profile object" ; HELP: connect-irc "Connecting to an irc server" { $values { "irc-client" "an irc client object" } } @@ -24,6 +19,10 @@ HELP: add-listener "Listening to irc channels/users/etc" { $values { "irc-listener" "an irc listener object" } { "irc-client" "an irc client object" } } { $description "Registers " { $snippet "irc-listener" } " with " { $snippet "irc-client" } " and starts listening." } ; +HELP: join-irc-channel "Joining channels" +{ $values { "irc-client-listener" "an irc client listener object" } } +{ $description "Joins to the channel being listened by " { $snippet "irc-listener" } "." } ; + HELP: remove-listener "Stop an unregister listener" { $values { "irc-listener" "an irc listener object" } { "irc-client" "an irc client object" } } { $description "Unregisters " { $snippet "irc-listener" } " from " { $snippet "irc-client" } " and stops listening. This is how you part from a channel." } ; @@ -55,6 +54,7 @@ ARTICLE: "irc.client" "IRC Client" { $subsection terminate-irc } { $subsection add-listener } { $subsection remove-listener } +{ $subsection join-irc-channel } { $subsection read-message } { $subsection write-message } { $heading "IRC messages" } @@ -77,13 +77,14 @@ ARTICLE: "irc.client" "IRC Client" { $heading "Special messages" } "Some special messages that are created by the library and not by the irc server." { $table - { { $link irc-end } " sent when the client isn't running anymore, listeners should stop after this." } + { { $link irc-listener-end } "sent to a listener when it has been dettached from the client, the listener should stop after it receives this message. " } + { { $link irc-end } " sent when the client isn't running anymore, listeners should stop after it receives this message." } { { $link irc-disconnected } " sent to notify listeners that connection was lost." } { { $link irc-connected } " sent to notify listeners that a connection with the irc server was established." } } { $heading "Example:" } { $code - "USING: irc.client concurrency.mailboxes ;" + "USING: irc.client ;" "SYMBOL: bot" "SYMBOL: mychannel" "! Create the profile and client objects" @@ -94,6 +95,8 @@ ARTICLE: "irc.client" "IRC Client" "\"#mychannel123\" mychannel set" "! Register and start listener (this joins the channel)" "mychannel get bot get add-listener" + "! Join to the channel" + "mychannel get join-irc-channel" "! Send a message to the channel" "\"what's up?\" mychannel get write-message" "! Read a message from the channel" From 1ff9d3f304688d917967199e03720116a5634701 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 30 Sep 2008 12:47:46 -0500 Subject: [PATCH 005/244] fixed taxes --- extra/taxes/usa/federal/federal.factor | 47 +++++++++ extra/taxes/usa/fica/fica.factor | 17 ++++ extra/taxes/usa/futa/futa.factor | 15 +++ extra/taxes/usa/medicare/medicare.factor | 8 ++ extra/taxes/usa/mn/mn.factor | 33 +++++++ extra/taxes/usa/usa-tests.factor | 118 +++++++++++++++++++++++ extra/taxes/usa/usa.factor | 41 ++++++++ extra/taxes/usa/w4/w4.factor | 13 +++ extra/taxes/utils/utils.factor | 10 ++ 9 files changed, 302 insertions(+) create mode 100644 extra/taxes/usa/federal/federal.factor create mode 100644 extra/taxes/usa/fica/fica.factor create mode 100644 extra/taxes/usa/futa/futa.factor create mode 100644 extra/taxes/usa/medicare/medicare.factor create mode 100644 extra/taxes/usa/mn/mn.factor create mode 100644 extra/taxes/usa/usa-tests.factor create mode 100644 extra/taxes/usa/usa.factor create mode 100644 extra/taxes/usa/w4/w4.factor create mode 100644 extra/taxes/utils/utils.factor diff --git a/extra/taxes/usa/federal/federal.factor b/extra/taxes/usa/federal/federal.factor new file mode 100644 index 0000000000..91d22ee828 --- /dev/null +++ b/extra/taxes/usa/federal/federal.factor @@ -0,0 +1,47 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors arrays assocs kernel math math.intervals +namespaces sequences combinators.lib money math.order +taxes.usa.fica taxes.usa.medicare taxes.usa taxes.usa.w4 ; +IN: taxes.usa.federal + +! http://www.irs.gov/pub/irs-pdf/p15.pdf +! Table 7 ANNUAL Payroll Period + +: federal-single ( -- triples ) + { + { 0 2650 DECIMAL: 0 } + { 2650 10300 DECIMAL: .10 } + { 10300 33960 DECIMAL: .15 } + { 33960 79725 DECIMAL: .25 } + { 79725 166500 DECIMAL: .28 } + { 166500 359650 DECIMAL: .33 } + { 359650 1/0. DECIMAL: .35 } + } ; + +: federal-married ( -- triples ) + { + { 0 8000 DECIMAL: 0 } + { 8000 23550 DECIMAL: .10 } + { 23550 72150 DECIMAL: .15 } + { 72150 137850 DECIMAL: .25 } + { 137850 207700 DECIMAL: .28 } + { 207700 365100 DECIMAL: .33 } + { 365100 1/0. DECIMAL: .35 } + } ; + +SINGLETON: federal +: ( -- obj ) + federal federal-single federal-married ; + +: federal-tax ( salary w4 tax-table -- n ) + [ adjust-allowances ] 2keep marriage-table tax ; + +M: federal adjust-allowances* ( salary w4 collector entity -- newsalary ) + 2drop calculate-w4-allowances - ; + +M: federal withholding* ( salary w4 tax-table entity -- x ) + drop + [ federal-tax ] 3keep drop + [ fica-tax ] 2keep + medicare-tax + + ; diff --git a/extra/taxes/usa/fica/fica.factor b/extra/taxes/usa/fica/fica.factor new file mode 100644 index 0000000000..69a62753f2 --- /dev/null +++ b/extra/taxes/usa/fica/fica.factor @@ -0,0 +1,17 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors math math.order assocs.lib money ; +IN: taxes.usa.fica + +: fica-tax-rate ( -- x ) DECIMAL: .062 ; inline + +ERROR: fica-base-unknown year ; + +: fica-base-rate ( year -- x ) + H{ + { 2008 102000 } + { 2007 97500 } + } [ fica-base-unknown ] unless-at ; + +: fica-tax ( salary w4 -- x ) + year>> fica-base-rate min fica-tax-rate * ; diff --git a/extra/taxes/usa/futa/futa.factor b/extra/taxes/usa/futa/futa.factor new file mode 100644 index 0000000000..36d3097007 --- /dev/null +++ b/extra/taxes/usa/futa/futa.factor @@ -0,0 +1,15 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors arrays assocs kernel math math.intervals +namespaces sequences combinators.lib money math.order ; +IN: taxes.usa.futa + +! Employer tax only, not withheld +: futa-tax-rate ( -- x ) DECIMAL: .062 ; inline +: futa-base-rate ( -- x ) 7000 ; inline +: futa-tax-offset-credit ( -- x ) DECIMAL: .054 ; inline + +: futa-tax ( salary w4 -- x ) + drop futa-base-rate min + futa-tax-rate futa-tax-offset-credit - + * ; diff --git a/extra/taxes/usa/medicare/medicare.factor b/extra/taxes/usa/medicare/medicare.factor new file mode 100644 index 0000000000..ea95224456 --- /dev/null +++ b/extra/taxes/usa/medicare/medicare.factor @@ -0,0 +1,8 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel math money ; +IN: taxes.usa.medicare + +! No base rate for medicare; all wages subject +: medicare-tax-rate ( -- x ) DECIMAL: .0145 ; inline +: medicare-tax ( salary w4 -- x ) drop medicare-tax-rate * ; diff --git a/extra/taxes/usa/mn/mn.factor b/extra/taxes/usa/mn/mn.factor new file mode 100644 index 0000000000..8bb629efcd --- /dev/null +++ b/extra/taxes/usa/mn/mn.factor @@ -0,0 +1,33 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors arrays assocs kernel math math.intervals +namespaces sequences money math.order usa-cities +taxes.usa taxes.usa.w4 ; +IN: taxes.usa.mn + +! Minnesota +: mn-single ( -- triples ) + { + { 0 1950 DECIMAL: 0 } + { 1950 23750 DECIMAL: .0535 } + { 23750 73540 DECIMAL: .0705 } + { 73540 1/0. DECIMAL: .0785 } + } ; + +: mn-married ( -- triples ) + { + { 0 7400 DECIMAL: 0 } + { 7400 39260 DECIMAL: .0535 } + { 39260 133980 DECIMAL: .0705 } + { 133980 1/0. DECIMAL: .0785 } + } ; + +: ( -- obj ) + MN mn-single mn-married ; + +M: MN adjust-allowances* ( salary w4 collector entity -- newsalary ) + 2drop calculate-w4-allowances - ; + +M: MN withholding* ( salary w4 collector entity -- x ) + drop + [ adjust-allowances ] 2keep marriage-table tax ; diff --git a/extra/taxes/usa/usa-tests.factor b/extra/taxes/usa/usa-tests.factor new file mode 100644 index 0000000000..6aac4b928c --- /dev/null +++ b/extra/taxes/usa/usa-tests.factor @@ -0,0 +1,118 @@ +USING: kernel money tools.test +taxes.usa taxes.usa.federal taxes.usa.mn +taxes.utils taxes.usa.w4 usa-cities ; +IN: taxes.usa.tests + +[ + 426 23 +] [ + 12000 2008 3 f net biweekly + dollars/cents +] unit-test + +[ + 426 23 +] [ + 12000 2008 3 t net biweekly + dollars/cents +] unit-test + +[ + 684 4 +] [ + 20000 2008 3 f net biweekly + dollars/cents +] unit-test + + + +[ + 804 58 +] [ + 24000 2008 3 f net biweekly + dollars/cents +] unit-test + +[ + 831 31 +] [ + 24000 2008 3 t net biweekly + dollars/cents +] unit-test + + +[ + 780 81 +] [ + 24000 2008 3 f net biweekly + dollars/cents +] unit-test + +[ + 818 76 +] [ + 24000 2008 3 t net biweekly + dollars/cents +] unit-test + + +[ + 2124 39 +] [ + 78250 2008 3 f net biweekly + dollars/cents +] unit-test + +[ + 2321 76 +] [ + 78250 2008 3 t net biweekly + dollars/cents +] unit-test + + +[ + 2612 63 +] [ + 100000 2008 3 f net biweekly + dollars/cents +] unit-test + +[ + 22244 52 +] [ + 1000000 2008 3 f net biweekly + dollars/cents +] unit-test + +[ + 578357 40 +] [ + 1000000 2008 3 f net + dollars/cents +] unit-test + +[ + 588325 41 +] [ + 1000000 2008 3 t net + dollars/cents +] unit-test + + +[ 30 97 ] [ + 24000 2008 2 f MN withholding* biweekly dollars/cents +] unit-test + +[ 173 66 ] [ + 78250 2008 2 f MN withholding* biweekly dollars/cents +] unit-test + + +[ 138 69 ] [ + 24000 2008 2 f withholding biweekly dollars/cents +] unit-test + +[ 754 72 ] [ + 78250 2008 2 f withholding biweekly dollars/cents +] unit-test diff --git a/extra/taxes/usa/usa.factor b/extra/taxes/usa/usa.factor new file mode 100644 index 0000000000..1d21524b45 --- /dev/null +++ b/extra/taxes/usa/usa.factor @@ -0,0 +1,41 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors arrays assocs kernel math math.intervals +namespaces sequences money math.order taxes.usa.w4 +taxes.usa.federal ; +IN: taxes.usa + +! Withhold: FICA, Medicare, Federal (FICA is social security) + +TUPLE: tax-table entity single married ; +C: tax-table + +GENERIC: adjust-allowances* ( salary w4 tax-table entity -- newsalary ) +GENERIC: withholding* ( salary w4 tax-table entity -- x ) + +: adjust-allowances ( salary w4 tax-table -- newsalary ) + dup entity>> adjust-allowances* ; + +: withholding ( salary w4 tax-table -- x ) + dup entity>> federal = [ + dup entity>> withholding* + ] [ + [ dup entity>> withholding* ] + [ drop federal withholding* ] 3bi + + ] if ; + +: tax-bracket-range ( pair -- n ) first2 swap - ; + +: tax-bracket ( tax salary triples -- tax salary ) + [ [ tax-bracket-range min ] keep third * + ] 2keep + tax-bracket-range [-] ; + +: tax ( salary triples -- x ) + 0 -rot [ tax-bracket ] each drop ; + +: marriage-table ( w4 tax-table -- triples ) + swap married?>> + [ married>> ] [ single>> ] if ; + +: net ( salary w4 collector -- x ) + >r dupd r> withholding - ; diff --git a/extra/taxes/usa/w4/w4.factor b/extra/taxes/usa/w4/w4.factor new file mode 100644 index 0000000000..aad3773220 --- /dev/null +++ b/extra/taxes/usa/w4/w4.factor @@ -0,0 +1,13 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors kernel math ; +IN: taxes.usa.w4 + +! Each employee fills out a w4 +TUPLE: w4 year allowances married? ; +C: w4 + +: allowance ( -- x ) 3500 ; inline + +: calculate-w4-allowances ( w4 -- x ) allowances>> allowance * ; + diff --git a/extra/taxes/utils/utils.factor b/extra/taxes/utils/utils.factor new file mode 100644 index 0000000000..a5c2240625 --- /dev/null +++ b/extra/taxes/utils/utils.factor @@ -0,0 +1,10 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: math ; +IN: taxes.utils + +: monthly ( x -- y ) 12 / ; +: semimonthly ( x -- y ) 24 / ; +: biweekly ( x -- y ) 26 / ; +: weekly ( x -- y ) 52 / ; +: daily ( x -- y ) 360 / ; From cb8e58ba0d7c39869e9373010439b5075a5480f0 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 30 Sep 2008 12:48:22 -0500 Subject: [PATCH 006/244] remove old taxes --- unmaintained/taxes/authors.txt | 1 - unmaintained/taxes/summary.txt | 1 - unmaintained/taxes/tags.txt | 1 - unmaintained/taxes/taxes-tests.factor | 116 --------------------- unmaintained/taxes/taxes.factor | 145 -------------------------- 5 files changed, 264 deletions(-) delete mode 100644 unmaintained/taxes/authors.txt delete mode 100644 unmaintained/taxes/summary.txt delete mode 100644 unmaintained/taxes/tags.txt delete mode 100644 unmaintained/taxes/taxes-tests.factor delete mode 100644 unmaintained/taxes/taxes.factor diff --git a/unmaintained/taxes/authors.txt b/unmaintained/taxes/authors.txt deleted file mode 100644 index 7c1b2f2279..0000000000 --- a/unmaintained/taxes/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Doug Coleman diff --git a/unmaintained/taxes/summary.txt b/unmaintained/taxes/summary.txt deleted file mode 100644 index e983139ccb..0000000000 --- a/unmaintained/taxes/summary.txt +++ /dev/null @@ -1 +0,0 @@ -Calculate federal and state tax withholdings diff --git a/unmaintained/taxes/tags.txt b/unmaintained/taxes/tags.txt deleted file mode 100644 index 2964ef21b1..0000000000 --- a/unmaintained/taxes/tags.txt +++ /dev/null @@ -1 +0,0 @@ -taxes diff --git a/unmaintained/taxes/taxes-tests.factor b/unmaintained/taxes/taxes-tests.factor deleted file mode 100644 index 17d1998f67..0000000000 --- a/unmaintained/taxes/taxes-tests.factor +++ /dev/null @@ -1,116 +0,0 @@ -USING: kernel money taxes tools.test ; -IN: taxes.tests - -[ - 426 23 -] [ - 12000 2008 3 f net biweekly - dollars/cents -] unit-test - -[ - 426 23 -] [ - 12000 2008 3 t net biweekly - dollars/cents -] unit-test - -[ - 684 4 -] [ - 20000 2008 3 f net biweekly - dollars/cents -] unit-test - - - -[ - 804 58 -] [ - 24000 2008 3 f net biweekly - dollars/cents -] unit-test - -[ - 831 31 -] [ - 24000 2008 3 t net biweekly - dollars/cents -] unit-test - - -[ - 780 81 -] [ - 24000 2008 3 f net biweekly - dollars/cents -] unit-test - -[ - 818 76 -] [ - 24000 2008 3 t net biweekly - dollars/cents -] unit-test - - -[ - 2124 39 -] [ - 78250 2008 3 f net biweekly - dollars/cents -] unit-test - -[ - 2321 76 -] [ - 78250 2008 3 t net biweekly - dollars/cents -] unit-test - - -[ - 2612 63 -] [ - 100000 2008 3 f net biweekly - dollars/cents -] unit-test - -[ - 22244 52 -] [ - 1000000 2008 3 f net biweekly - dollars/cents -] unit-test - -[ - 578357 40 -] [ - 1000000 2008 3 f net - dollars/cents -] unit-test - -[ - 588325 41 -] [ - 1000000 2008 3 t net - dollars/cents -] unit-test - - -[ 30 97 ] [ - 24000 2008 2 f withholding biweekly dollars/cents -] unit-test - -[ 173 66 ] [ - 78250 2008 2 f withholding biweekly dollars/cents -] unit-test - - -[ 138 69 ] [ - 24000 2008 2 f withholding biweekly dollars/cents -] unit-test - -[ 754 72 ] [ - 78250 2008 2 f withholding biweekly dollars/cents -] unit-test diff --git a/unmaintained/taxes/taxes.factor b/unmaintained/taxes/taxes.factor deleted file mode 100644 index 5e2a395c40..0000000000 --- a/unmaintained/taxes/taxes.factor +++ /dev/null @@ -1,145 +0,0 @@ -! Copyright (C) 2008 Doug Coleman. -! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays assocs kernel math math.intervals -namespaces sequences combinators.lib money math.order ; -IN: taxes - -: monthly ( x -- y ) 12 / ; -: semimonthly ( x -- y ) 24 / ; -: biweekly ( x -- y ) 26 / ; -: weekly ( x -- y ) 52 / ; -: daily ( x -- y ) 360 / ; - -! Each employee fills out a w4 -TUPLE: w4 year allowances married? ; -C: w4 - -: allowance ( -- x ) 3500 ; inline - -: calculate-w4-allowances ( w4 -- x ) allowances>> allowance * ; - -! Withhold: FICA, Medicare, Federal (FICA is social security) -: fica-tax-rate ( -- x ) DECIMAL: .062 ; inline - -! Base rate -- income over this rate is not taxed -ERROR: fica-base-unknown ; -: fica-base-rate ( year -- x ) - H{ - { 2008 102000 } - { 2007 97500 } - } at* [ fica-base-unknown ] unless ; - -: fica-tax ( salary w4 -- x ) - year>> fica-base-rate min fica-tax-rate * ; - -! Employer tax only, not withheld -: futa-tax-rate ( -- x ) DECIMAL: .062 ; inline -: futa-base-rate ( -- x ) 7000 ; inline -: futa-tax-offset-credit ( -- x ) DECIMAL: .054 ; inline - -: futa-tax ( salary w4 -- x ) - drop futa-base-rate min - futa-tax-rate futa-tax-offset-credit - - * ; - -! No base rate for medicare; all wages subject -: medicare-tax-rate ( -- x ) DECIMAL: .0145 ; inline -: medicare-tax ( salary w4 -- x ) drop medicare-tax-rate * ; - -MIXIN: collector -GENERIC: adjust-allowances ( salary w4 collector -- newsalary ) -GENERIC: withholding ( salary w4 collector -- x ) - -TUPLE: tax-table single married ; - -: ( single married class -- obj ) - >r tax-table boa r> construct-delegate ; - -: tax-bracket-range ( pair -- n ) dup second swap first - ; - -: tax-bracket ( tax salary triples -- tax salary ) - [ [ tax-bracket-range min ] keep third * + ] 2keep - tax-bracket-range [-] ; - -: tax ( salary triples -- x ) - 0 -rot [ tax-bracket ] each drop ; - -: marriage-table ( w4 tax-table -- triples ) - swap married?>> [ married>> ] [ single>> ] if ; - -: federal-tax ( salary w4 tax-table -- n ) - [ adjust-allowances ] 2keep marriage-table tax ; - -! http://www.irs.gov/pub/irs-pdf/p15.pdf -! Table 7 ANNUAL Payroll Period - -: federal-single ( -- triples ) - { - { 0 2650 DECIMAL: 0 } - { 2650 10300 DECIMAL: .10 } - { 10300 33960 DECIMAL: .15 } - { 33960 79725 DECIMAL: .25 } - { 79725 166500 DECIMAL: .28 } - { 166500 359650 DECIMAL: .33 } - { 359650 1/0. DECIMAL: .35 } - } ; - -: federal-married ( -- triples ) - { - { 0 8000 DECIMAL: 0 } - { 8000 23550 DECIMAL: .10 } - { 23550 72150 DECIMAL: .15 } - { 72150 137850 DECIMAL: .25 } - { 137850 207700 DECIMAL: .28 } - { 207700 365100 DECIMAL: .33 } - { 365100 1/0. DECIMAL: .35 } - } ; - -TUPLE: federal ; -INSTANCE: federal collector -: ( -- obj ) - federal-single federal-married federal ; - -M: federal adjust-allowances ( salary w4 collector -- newsalary ) - drop calculate-w4-allowances - ; - -M: federal withholding ( salary w4 tax-table -- x ) - [ federal-tax ] 3keep drop - [ fica-tax ] 2keep - medicare-tax + + ; - - -! Minnesota -: minnesota-single ( -- triples ) - { - { 0 1950 DECIMAL: 0 } - { 1950 23750 DECIMAL: .0535 } - { 23750 73540 DECIMAL: .0705 } - { 73540 1/0. DECIMAL: .0785 } - } ; - -: minnesota-married ( -- triples ) - { - { 0 7400 DECIMAL: 0 } - { 7400 39260 DECIMAL: .0535 } - { 39260 133980 DECIMAL: .0705 } - { 133980 1/0. DECIMAL: .0785 } - } ; - -TUPLE: minnesota ; -INSTANCE: minnesota collector -: ( -- obj ) - minnesota-single minnesota-married minnesota ; - -M: minnesota adjust-allowances ( salary w4 collector -- newsalary ) - drop calculate-w4-allowances - ; - -M: minnesota withholding ( salary w4 collector -- x ) - [ adjust-allowances ] 2keep marriage-table tax ; - -: employer-withhold ( salary w4 collector -- x ) - [ withholding ] 3keep - dup federal? [ 3drop ] [ drop withholding + ] if ; - -: net ( salary w4 collector -- x ) - >r dupd r> employer-withhold - ; From 1b7c0b78573feae5b812b9c13df6f2adbc08ec15 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 30 Sep 2008 13:33:32 -0500 Subject: [PATCH 007/244] remove lib usage --- extra/taxes/usa/federal/federal.factor | 4 ++-- extra/taxes/usa/fica/fica.factor | 2 +- extra/taxes/usa/futa/futa.factor | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/extra/taxes/usa/federal/federal.factor b/extra/taxes/usa/federal/federal.factor index 91d22ee828..5274535f81 100644 --- a/extra/taxes/usa/federal/federal.factor +++ b/extra/taxes/usa/federal/federal.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays assocs kernel math math.intervals -namespaces sequences combinators.lib money math.order -taxes.usa.fica taxes.usa.medicare taxes.usa taxes.usa.w4 ; +namespaces sequences money math.order taxes.usa.fica +taxes.usa.medicare taxes.usa taxes.usa.w4 ; IN: taxes.usa.federal ! http://www.irs.gov/pub/irs-pdf/p15.pdf diff --git a/extra/taxes/usa/fica/fica.factor b/extra/taxes/usa/fica/fica.factor index 69a62753f2..e71b2723a3 100644 --- a/extra/taxes/usa/fica/fica.factor +++ b/extra/taxes/usa/fica/fica.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors math math.order assocs.lib money ; +USING: accessors math math.order money ; IN: taxes.usa.fica : fica-tax-rate ( -- x ) DECIMAL: .062 ; inline diff --git a/extra/taxes/usa/futa/futa.factor b/extra/taxes/usa/futa/futa.factor index 36d3097007..7368aef825 100644 --- a/extra/taxes/usa/futa/futa.factor +++ b/extra/taxes/usa/futa/futa.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays assocs kernel math math.intervals -namespaces sequences combinators.lib money math.order ; +namespaces sequences money math.order ; IN: taxes.usa.futa ! Employer tax only, not withheld From 1b889d1f1b6b91162bc888d5270352928e74e04f Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 1 Oct 2008 23:02:25 -0500 Subject: [PATCH 008/244] Clear our next-method-quot-cache when deploying --- basis/tools/deploy/shaker/shaker.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index f8b0862c9d..b502a4b4a2 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -373,7 +373,8 @@ SYMBOL: deploy-vocab r> strip-words compress-byte-arrays compress-quotations - compress-strings ; + compress-strings + H{ } clone classes:next-method-quot-cache set-global ; : (deploy) ( final-image vocab config -- ) #! Does the actual work of a deployment in the slave From c7f5b0de813fb247fc78be2a6f6bb7aac2857146 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 1 Oct 2008 23:33:57 -0500 Subject: [PATCH 009/244] throw an error when all slots are IGNORE --- basis/db/queries/queries.factor | 3 +++ basis/db/tuples/tuples-tests.factor | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/basis/db/queries/queries.factor b/basis/db/queries/queries.factor index 0b206cea8f..768ec70185 100644 --- a/basis/db/queries/queries.factor +++ b/basis/db/queries/queries.factor @@ -145,10 +145,13 @@ M: db ( tuple table -- sql ) where-clause ] query-make ; +ERROR: all-slots-ignored class ; + M: db ( tuple class -- statement ) [ "select " 0% [ dupd filter-ignores ] dip + over empty? [ all-slots-ignored ] when over [ ", " 0% ] [ dup column-name>> 0% 2, ] interleave diff --git a/basis/db/tuples/tuples-tests.factor b/basis/db/tuples/tuples-tests.factor index 6114c7ebe1..406d4756a2 100755 --- a/basis/db/tuples/tuples-tests.factor +++ b/basis/db/tuples/tuples-tests.factor @@ -356,9 +356,7 @@ TUPLE: exam id name score ; [ f ] [ T{ exam { name IGNORE } { score IGNORE } } select-tuples first score>> ] unit-test - ! FIXME - ! [ f ] - ! [ T{ exam { name IGNORE } { score IGNORE } { id IGNORE } } select-tuples first score>> ] unit-test + [ T{ exam { name IGNORE } { score IGNORE } { id IGNORE } } select-tuples first score>> ] [ class>> "EXAM" = ] must-fail-with [ { From 47d884cf417675f3f8d129be899128765d82d4fa Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 1 Oct 2008 23:56:20 -0500 Subject: [PATCH 010/244] fix typos in db docs --- basis/db/tuples/tuples-docs.factor | 2 +- basis/db/types/types-docs.factor | 28 +++++++++++++++------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/basis/db/tuples/tuples-docs.factor b/basis/db/tuples/tuples-docs.factor index d7ee3a5ad2..497cc2e8c5 100644 --- a/basis/db/tuples/tuples-docs.factor +++ b/basis/db/tuples/tuples-docs.factor @@ -190,7 +190,7 @@ T{ book { $list "Make a new tuple to represent your data" { "Map the Factor types to the database types with " { $link define-persistent } } - { "Make a " { $link "db-custom-database-combinators" } " to open your database and run a " { $snippet "quotation" } } + { "Make a custom database combinator (see" { $link "db-custom-database-combinators" } ") to open your database and run a " { $link quotation } } { "Create a table with " { $link create-table } ", " { $link ensure-table } ", or " { $link recreate-table } } { "Start making and storing objects with " { $link insert-tuple } ", " { $link update-tuple } ", " { $link delete-tuples } ", and " { $link select-tuples } } } ; diff --git a/basis/db/types/types-docs.factor b/basis/db/types/types-docs.factor index 401bbbc4d7..f1a6ba6c6c 100644 --- a/basis/db/types/types-docs.factor +++ b/basis/db/types/types-docs.factor @@ -8,7 +8,7 @@ HELP: +autoincrement+ { $description "" } ; HELP: +db-assigned-id+ -{ $description "The database assigns a primary key to the object. The primary key is most likely a big integer, but is database-dependent." } ; +{ $description "The database assigns a primary key to the object. The primary key is most likely a big integer, but is database-dependent." } ; HELP: +default+ { $description "" } ; @@ -29,7 +29,7 @@ HELP: +primary-key+ { $description "" } ; HELP: +random-id+ -{ $description "Factor chooses a random number and tries to insert the tuple into the database with this number as its primary key. The default number of retries to find a unique random number is 10, though in practice it will almost certainly succeed on the first try." } ; +{ $description "Factor chooses a random number and tries to insert the tuple into the database with this number as its primary key. The default number of retries to find a unique random number is 10, though in practice it will almost certainly succeed on the first try." } ; HELP: +serial+ { $description "" } ; @@ -38,7 +38,7 @@ HELP: +unique+ { $description "" } ; 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+ } "." } ; +{ $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: { $description "" } ; @@ -53,7 +53,7 @@ HELP: BIG-INTEGER { $description "A 64-bit integer. Whether this number is signed or unsigned depends on the database backend." } ; HELP: BLOB -{ $description "A serialized Factor object. The database library automatically serializes the object for a SQL insert or update and deserializes it on a tuple query." } ; +{ $description "A byte array." } ; HELP: BOOLEAN { $description "Either true or false." } ; @@ -65,7 +65,7 @@ HELP: DATETIME { $description "A date and a time." } ; HELP: DOUBLE -{ $description "Corresponds to Factor's 64bit floating-point numbers." } ; +{ $description "Corresponds to Factor's 64-bit floating-point numbers." } ; HELP: FACTOR-BLOB { $description "A serialized Factor object." } ; @@ -77,30 +77,31 @@ HELP: NULL { $description "The SQL null type." } ; HELP: REAL -{ $description "" } ; +{ $description "A real number of unlimited precision. May not be supported on all databases." } ; HELP: SIGNED-BIG-INTEGER -{ $description "For portability, if a number is known to be 64bit and signed, then this datatype may be used. Some databases, like SQLite, cannot store arbitrary bignums as BIGINT types. If storing arbitrary bignums, use " { $link FACTOR-BLOB } "." } ; +{ $description "For portability, if a number is known to be 64bit and signed, then this datatype may be used. Some databases, like SQLite, cannot store arbitrary bignums as BIGINT types. If storing arbitrary bignums, use " { $link FACTOR-BLOB } "." } ; HELP: TEXT -{ $description "" } ; +{ $description "Stores a string that is longer than a " { $link VARCHAR } ". SQLite uses this type for strings; it does not handle " { $link VARCHAR } " strings." } ; HELP: TIME -{ $description "" } ; +{ $description "A timestamp without a date component." } ; HELP: TIMESTAMP { $description "A Factor timestamp." } ; HELP: UNSIGNED-BIG-INTEGER -{ $description "For portability, if a number is known to be 64bit, then this datatype may be used. Some databases, like SQLite, cannot store arbitrary bignums as BIGINT types. If storing arbitrary bignums, use " { $link FACTOR-BLOB } "." } ; +{ $description "For portability, if a number is known to be 64bit, then this datatype may be used. Some databases, like SQLite, cannot store arbitrary bignums as BIGINT types. If storing arbitrary bignums, use " { $link FACTOR-BLOB } "." } ; { INTEGER SIGNED-BIG-INTEGER UNSIGNED-BIG-INTEGER } related-words HELP: URL -{ $description "A Factor " { $link "urls" } " object." } ; +{ $description "A Factor " { $link "urls" } " object." } ; HELP: VARCHAR -{ $description "The SQL varchar type. This type can take an integer as an argument." } ; +{ $description "The SQL varchar type. This type can take an integer as an argument." } +{ $examples { $unchecked-example "{ VARCHAR 256 }" "" } } ; HELP: user-assigned-id-spec? { $values @@ -279,8 +280,9 @@ ARTICLE: "db.types" "Database types" { $subsection DATETIME } { $subsection TIME } { $subsection TIMESTAMP } -"Arbitrary Factor objects:" +"Factor byte-arrays:" { $subsection BLOB } +"Arbitrary Factor objects:" { $subsection FACTOR-BLOB } "Factor URLs:" { $subsection URL } ; From d4134a2ca1555b3554537231515c8111a8fd256a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 01:17:45 -0500 Subject: [PATCH 011/244] Fix loop detection bug --- basis/compiler/tests/optimizer.factor | 15 ++++++++++++ .../tree/recursive/recursive-tests.factor | 24 +++++++++++++++++++ .../compiler/tree/recursive/recursive.factor | 12 ++++++---- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/basis/compiler/tests/optimizer.factor b/basis/compiler/tests/optimizer.factor index 4c39da0479..f1b3e32eed 100755 --- a/basis/compiler/tests/optimizer.factor +++ b/basis/compiler/tests/optimizer.factor @@ -362,3 +362,18 @@ TUPLE: some-tuple x ; [ B{ 0 1 2 3 4 5 6 7 } ] [ [ 8 [ ] B{ } map-as ] compile-call ] unit-test [ 0 ] [ 1234 [ { fixnum } declare -64 shift ] compile-call ] unit-test + +! Loop detection problem found by doublec +SYMBOL: counter + +DEFER: loop-bbb + +: loop-aaa ( -- ) + counter inc counter get 2 < [ loop-bbb ] when ; inline recursive + +: loop-bbb ( -- ) + [ loop-aaa ] with-scope ; inline recursive + +: loop-ccc ( -- ) loop-bbb ; + +[ 0 ] [ 0 counter set loop-ccc counter get ] unit-test diff --git a/basis/compiler/tree/recursive/recursive-tests.factor b/basis/compiler/tree/recursive/recursive-tests.factor index c66c182869..b1f9406092 100644 --- a/basis/compiler/tree/recursive/recursive-tests.factor +++ b/basis/compiler/tree/recursive/recursive-tests.factor @@ -148,3 +148,27 @@ DEFER: a' [ a' ] build-tree analyze-recursive \ b' label-is-loop? ] unit-test + +DEFER: a'' + +: b'' ( -- ) + a'' ; inline recursive + +: a'' ( -- ) + b'' a'' ; inline recursive + +[ t ] [ + [ a'' ] build-tree analyze-recursive + \ a'' label-is-not-loop? +] unit-test + +: loop-in-non-loop ( x quot: ( i -- ) -- ) + over 0 > [ + [ [ 1 - ] dip loop-in-non-loop ] [ call ] 2bi + ] [ 2drop ] if ; inline recursive + +[ t ] [ + [ 10 [ [ drop ] each-integer ] loop-in-non-loop ] + build-tree analyze-recursive + \ (each-integer) label-is-loop? +] unit-test diff --git a/basis/compiler/tree/recursive/recursive.factor b/basis/compiler/tree/recursive/recursive.factor index d1e4c7c70e..d257cd6600 100644 --- a/basis/compiler/tree/recursive/recursive.factor +++ b/basis/compiler/tree/recursive/recursive.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel assocs namespaces accessors sequences deques +USING: kernel assocs arrays namespaces accessors sequences deques search-deques compiler.tree compiler.tree.combinators ; IN: compiler.tree.recursive @@ -50,11 +50,10 @@ GENERIC: collect-loop-info* ( tail? node -- ) loop-stack get length swap loop-heights get set-at ; M: #recursive collect-loop-info* - nip [ [ label>> - [ loop-stack [ swap suffix ] change ] + [ swap 2array loop-stack [ swap suffix ] change ] [ remember-loop-info ] [ t >>loop? drop ] tri @@ -62,7 +61,7 @@ M: #recursive collect-loop-info* [ t swap child>> (collect-loop-info) ] bi ] with-scope ; -: current-loop-nesting ( label -- labels ) +: current-loop-nesting ( label -- alist ) loop-stack get swap loop-heights get at tail ; : disqualify-loop ( label -- ) @@ -71,7 +70,10 @@ M: #recursive collect-loop-info* M: #call-recursive collect-loop-info* label>> swap [ dup disqualify-loop ] unless - dup current-loop-nesting [ loop-calls get push-at ] with each ; + dup current-loop-nesting + [ keys [ loop-calls get push-at ] with each ] + [ [ nip not ] assoc-filter keys [ disqualify-loop ] each ] + bi ; M: #if collect-loop-info* children>> [ (collect-loop-info) ] with each ; From 87c71ee3769896fafb8af3b9ced6902be45ee746 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 01:17:54 -0500 Subject: [PATCH 012/244] Rice --- basis/http/client/client.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/http/client/client.factor b/basis/http/client/client.factor index aa1e0771ba..9260f15a7b 100755 --- a/basis/http/client/client.factor +++ b/basis/http/client/client.factor @@ -120,7 +120,7 @@ SYMBOL: redirects ] if ; inline recursive : read-unchunked ( quot: ( chunk -- ) -- ) - 8192 read dup [ + 8192 read-partial dup [ [ swap call ] [ drop read-unchunked ] 2bi ] [ 2drop ] if ; inline recursive From 1ef5dbe3fb601e049d268a7f21915e5511c9b3ee Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 03:37:53 -0500 Subject: [PATCH 013/244] Move hsva to colors.hsv --- basis/colors/colors.factor | 49 ++++++---------- basis/colors/gray/gray.factor | 11 ++++ basis/colors/hsv/hsv-tests.factor | 26 +++++++++ basis/colors/hsv/hsv.factor | 65 ++++++++++----------- extra/benchmark/mandel/colors/colors.factor | 7 ++- extra/color-picker/color-picker.factor | 2 +- 6 files changed, 90 insertions(+), 70 deletions(-) create mode 100644 basis/colors/gray/gray.factor create mode 100644 basis/colors/hsv/hsv-tests.factor diff --git a/basis/colors/colors.factor b/basis/colors/colors.factor index 77a1f46c87..1183c2e46c 100644 --- a/basis/colors/colors.factor +++ b/basis/colors/colors.factor @@ -1,48 +1,33 @@ -! Copyright (C) 2003, 2007, 2008 Slava Pestov. +! Copyright (C) 2003, 2008 Slava Pestov. +! Copyright (C) 2008 Eduardo Cavazos. ! See http://factorcode.org/license.txt for BSD license. - -USING: kernel combinators sequences arrays classes.tuple accessors colors.hsv ; - +USING: kernel accessors ; IN: colors -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - TUPLE: color ; TUPLE: rgba < color red green blue alpha ; -TUPLE: hsva < color hue saturation value alpha ; - -TUPLE: gray < color gray alpha ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +C: rgba GENERIC: >rgba ( object -- rgba ) M: rgba >rgba ( rgba -- rgba ) ; -M: hsva >rgba ( hsva -- rgba ) - { [ hue>> ] [ saturation>> ] [ value>> ] [ alpha>> ] } cleave 4array - [ hsv>rgb ] [ peek ] bi suffix first4 rgba boa ; - -M: gray >rgba ( gray -- rgba ) [ gray>> dup dup ] [ alpha>> ] bi rgba boa ; - M: color red>> ( color -- red ) >rgba red>> ; M: color green>> ( color -- green ) >rgba green>> ; M: color blue>> ( color -- blue ) >rgba blue>> ; -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: black T{ rgba f 0.0 0.0 0.0 1.0 } ; -: blue T{ rgba f 0.0 0.0 1.0 1.0 } ; -: cyan T{ rgba f 0 0.941 0.941 1 } ; -: gray T{ rgba f 0.6 0.6 0.6 1.0 } ; -: green T{ rgba f 0.0 1.0 0.0 1.0 } ; -: light-gray T{ rgba f 0.95 0.95 0.95 0.95 } ; -: light-purple T{ rgba f 0.8 0.8 1.0 1.0 } ; -: magenta T{ rgba f 0.941 0 0.941 1 } ; -: orange T{ rgba f 0.941 0.627 0 1 } ; -: purple T{ rgba f 0.627 0 0.941 1 } ; -: red T{ rgba f 1.0 0.0 0.0 1.0 } ; -: white T{ rgba f 1.0 1.0 1.0 1.0 } ; -: yellow T{ rgba f 1.0 1.0 0.0 1.0 } ; +: black T{ rgba f 0.0 0.0 0.0 1.0 } ; inline +: blue T{ rgba f 0.0 0.0 1.0 1.0 } ; inline +: cyan T{ rgba f 0 0.941 0.941 1 } ; inline +: gray T{ rgba f 0.6 0.6 0.6 1.0 } ; inline +: green T{ rgba f 0.0 1.0 0.0 1.0 } ; inline +: light-gray T{ rgba f 0.95 0.95 0.95 0.95 } ; inline +: light-purple T{ rgba f 0.8 0.8 1.0 1.0 } ; inline +: magenta T{ rgba f 0.941 0 0.941 1 } ; inline +: orange T{ rgba f 0.941 0.627 0 1 } ; inline +: purple T{ rgba f 0.627 0 0.941 1 } ; inline +: red T{ rgba f 1.0 0.0 0.0 1.0 } ; inline +: white T{ rgba f 1.0 1.0 1.0 1.0 } ; inline +: yellow T{ rgba f 1.0 1.0 0.0 1.0 } ; inline diff --git a/basis/colors/gray/gray.factor b/basis/colors/gray/gray.factor new file mode 100644 index 0000000000..26ec1177b6 --- /dev/null +++ b/basis/colors/gray/gray.factor @@ -0,0 +1,11 @@ +! Copyright (C) 2008 Eduardo Cavazos. +! See http://factorcode.org/license.txt for BSD license. +USING: colors kernel accessors ; +IN: colors.gray + +TUPLE: gray < color gray alpha ; + +C: gray + +M: gray >rgba ( gray -- rgba ) + [ gray>> dup dup ] [ alpha>> ] bi ; diff --git a/basis/colors/hsv/hsv-tests.factor b/basis/colors/hsv/hsv-tests.factor new file mode 100644 index 0000000000..8a736553bb --- /dev/null +++ b/basis/colors/hsv/hsv-tests.factor @@ -0,0 +1,26 @@ +IN: colors.hsv.tests +USING: accessors kernel colors colors.hsv tools.test math ; + +: hsv>rgb ( h s v -- r g b ) + [ 360 * ] 2dip + 1 >rgba [ red>> ] [ green>> ] [ blue>> ] tri ; + +[ 1/2 1/2 1/2 ] [ 0 0 1/2 hsv>rgb ] unit-test + +[ 1/2 1/4 1/4 ] [ 0 1/2 1/2 hsv>rgb ] unit-test +[ 1/3 2/9 2/9 ] [ 0 1/3 1/3 hsv>rgb ] unit-test + +[ 24/125 1/5 4/25 ] [ 1/5 1/5 1/5 hsv>rgb ] unit-test +[ 29/180 1/6 5/36 ] [ 1/5 1/6 1/6 hsv>rgb ] unit-test + +[ 6/25 2/5 38/125 ] [ 2/5 2/5 2/5 hsv>rgb ] unit-test +[ 8/25 4/5 64/125 ] [ 2/5 3/5 4/5 hsv>rgb ] unit-test + +[ 6/25 48/125 3/5 ] [ 3/5 3/5 3/5 hsv>rgb ] unit-test +[ 0 0 0 ] [ 3/5 1/5 0 hsv>rgb ] unit-test + +[ 84/125 4/25 4/5 ] [ 4/5 4/5 4/5 hsv>rgb ] unit-test +[ 7/15 1/3 1/2 ] [ 4/5 1/3 1/2 hsv>rgb ] unit-test + +[ 5/6 5/36 5/6 ] [ 5/6 5/6 5/6 hsv>rgb ] unit-test +[ 1/6 0 1/6 ] [ 5/6 1 1/6 hsv>rgb ] unit-test diff --git a/basis/colors/hsv/hsv.factor b/basis/colors/hsv/hsv.factor index dd2811822b..6f658818a1 100644 --- a/basis/colors/hsv/hsv.factor +++ b/basis/colors/hsv/hsv.factor @@ -1,41 +1,38 @@ -! Copyright (C) 2007 Eduardo Cavazos +! Copyright (C) 2008 Eduardo Cavazos. ! See http://factorcode.org/license.txt for BSD license. - -USING: kernel combinators arrays sequences math math.functions ; - +USING: colors kernel combinators math math.functions accessors ; IN: colors.hsv - - ! h [0,360) ! s [0,1] ! v [0,1] +TUPLE: hsva < color hue saturation value alpha ; -: hsv>rgb ( hsv -- rgb ) -dup Hi -{ { 0 [ [ V ] [ t ] [ p ] tri ] } - { 1 [ [ q ] [ V ] [ p ] tri ] } - { 2 [ [ p ] [ V ] [ t ] tri ] } - { 3 [ [ p ] [ q ] [ V ] tri ] } - { 4 [ [ t ] [ p ] [ V ] tri ] } - { 5 [ [ V ] [ p ] [ q ] tri ] } } case 3array ; +C: hsva + +> 60 / floor 6 mod ; inline + +: f ( hsv -- f ) [ hue>> 60 / ] [ Hi ] bi - ; inline + +: p ( hsv -- p ) [ saturation>> 1 swap - ] [ value>> ] bi * ; inline + +: q ( hsv -- q ) [ [ f ] [ saturation>> ] bi * 1 swap - ] [ value>> ] bi * ; inline + +: t ( hsv -- t ) [ [ f 1 swap - ] [ saturation>> ] bi * 1 swap - ] [ value>> ] bi * ; inline + +PRIVATE> + +M: hsva >rgba ( hsva -- rgba ) + [ + dup Hi + { + { 0 [ [ value>> ] [ t ] [ p ] tri ] } + { 1 [ [ q ] [ value>> ] [ p ] tri ] } + { 2 [ [ p ] [ value>> ] [ t ] tri ] } + { 3 [ [ p ] [ q ] [ value>> ] tri ] } + { 4 [ [ t ] [ p ] [ value>> ] tri ] } + { 5 [ [ value>> ] [ p ] [ q ] tri ] } + } case + ] [ alpha>> ] bi ; diff --git a/extra/benchmark/mandel/colors/colors.factor b/extra/benchmark/mandel/colors/colors.factor index 7bbb25a47d..218f566eda 100644 --- a/extra/benchmark/mandel/colors/colors.factor +++ b/extra/benchmark/mandel/colors/colors.factor @@ -1,10 +1,11 @@ USING: math math.order kernel arrays byte-arrays sequences -colors.hsv benchmark.mandel.params ; +colors.hsv benchmark.mandel.params accessors colors ; IN: benchmark.mandel.colors : scale 255 * >fixnum ; inline -: scale-rgb ( r g b -- n ) [ scale ] tri@ 3byte-array ; +: scale-rgb ( rgba -- n ) + [ red>> scale ] [ green>> scale ] [ blue>> scale ] tri 3byte-array ; : sat 0.85 ; inline : val 0.85 ; inline @@ -12,7 +13,7 @@ IN: benchmark.mandel.colors : ( nb-cols -- map ) dup [ 360 * swap 1+ / sat val - 3array hsv>rgb first3 scale-rgb + 1 >rgba scale-rgb ] with map ; : color-map ( -- map ) diff --git a/extra/color-picker/color-picker.factor b/extra/color-picker/color-picker.factor index 4a0c148145..6ed8c1220c 100755 --- a/extra/color-picker/color-picker.factor +++ b/extra/color-picker/color-picker.factor @@ -23,7 +23,7 @@ M: color-preview model-changed swap value>> >>interior relayout-1 ; : ( model -- model ) - [ [ 256 /f ] map 1 suffix first4 rgba boa ] ; + [ first3 [ 256 /f ] tri@ 1 ] ; : ( -- model gadget ) 3 [ 0 0 0 255 ] replicate From 15eaf33ee83bd2e6a3b923edc4338341c10c703c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 03:38:09 -0500 Subject: [PATCH 014/244] Remove http.client => logging dependency --- basis/http/http.factor | 4 +--- basis/http/parsers/parsers.factor | 4 +--- basis/http/server/server.factor | 2 ++ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/basis/http/http.factor b/basis/http/http.factor index cfc205dbb5..c90a1872ce 100755 --- a/basis/http/http.factor +++ b/basis/http/http.factor @@ -3,7 +3,7 @@ USING: accessors kernel combinators math namespaces make assocs sequences splitting sorting sets debugger strings vectors hashtables quotations arrays byte-arrays -math.parser calendar calendar.format present urls logging +math.parser calendar calendar.format present urls io io.encodings io.encodings.iana io.encodings.binary io.encodings.8-bit @@ -96,8 +96,6 @@ TUPLE: cookie name value version comment path domain expires max-age http-only s drop ] { } make ; -\ parse-cookie DEBUG add-input-logging - : check-cookie-string ( string -- string' ) dup "=;'\"\r\n" intersect empty? [ "Bad cookie name or value" throw ] unless ; diff --git a/basis/http/parsers/parsers.factor b/basis/http/parsers/parsers.factor index ce8257dec5..8e8e7358d1 100644 --- a/basis/http/parsers/parsers.factor +++ b/basis/http/parsers/parsers.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: combinators.short-circuit math math.order math.parser kernel sequences sequences.deep peg peg.parsers assocs arrays -hashtables strings unicode.case namespaces make ascii logging ; +hashtables strings unicode.case namespaces make ascii ; IN: http.parsers : except ( quot -- parser ) @@ -61,8 +61,6 @@ PEG: parse-request-line ( string -- triple ) 'space' , ] seq* just ; -\ parse-request-line DEBUG add-input-logging - : 'text' ( -- parser ) [ ctl? ] except ; diff --git a/basis/http/server/server.factor b/basis/http/server/server.factor index 547e1b69fb..697dec24ce 100755 --- a/basis/http/server/server.factor +++ b/basis/http/server/server.factor @@ -24,6 +24,8 @@ html.elements html.streams ; IN: http.server +\ parse-cookie DEBUG add-input-logging + : check-absolute ( url -- url ) dup path>> "/" head? [ "Bad request: URL" throw ] unless ; inline From 2e48915f9c566ca1e2593432484134f4bac5dd26 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 03:38:36 -0500 Subject: [PATCH 015/244] Strip out C I/O if native I/O enabled --- basis/io/sockets/sockets.factor | 16 +++++++--- basis/io/unix/sockets/sockets.factor | 4 ++- basis/io/windows/nt/backend/backend.factor | 10 +++--- basis/io/windows/nt/sockets/sockets.factor | 4 +-- basis/tools/deploy/shaker/shaker.factor | 36 ++++++++++++---------- core/io/backend/backend.factor | 4 +++ core/io/streams/c/c.factor | 14 +++++---- 7 files changed, 53 insertions(+), 35 deletions(-) diff --git a/basis/io/sockets/sockets.factor b/basis/io/sockets/sockets.factor index 9bfcc7e310..c704382dd4 100755 --- a/basis/io/sockets/sockets.factor +++ b/basis/io/sockets/sockets.factor @@ -17,10 +17,12 @@ IN: io.sockets ! Addressing GENERIC: protocol-family ( addrspec -- af ) -GENERIC: sockaddr-type ( addrspec -- type ) +GENERIC: sockaddr-size ( addrspec -- n ) GENERIC: make-sockaddr ( addrspec -- sockaddr ) +GENERIC: empty-sockaddr ( addrspec -- sockaddr ) + GENERIC: address-size ( addrspec -- n ) GENERIC: inet-ntop ( data addrspec -- str ) @@ -28,10 +30,10 @@ GENERIC: inet-ntop ( data addrspec -- str ) GENERIC: inet-pton ( str addrspec -- data ) : make-sockaddr/size ( addrspec -- sockaddr size ) - [ make-sockaddr ] [ sockaddr-type heap-size ] bi ; + [ make-sockaddr ] [ sockaddr-size ] bi ; : empty-sockaddr/size ( addrspec -- sockaddr size ) - sockaddr-type [ ] [ heap-size ] bi ; + [ empty-sockaddr ] [ sockaddr-size ] bi ; GENERIC: parse-sockaddr ( sockaddr addrspec -- newaddrspec ) @@ -74,7 +76,9 @@ M: inet4 address-size drop 4 ; M: inet4 protocol-family drop PF_INET ; -M: inet4 sockaddr-type drop "sockaddr-in" c-type ; +M: inet4 sockaddr-size drop "sockaddr-in" heap-size ; + +M: inet4 empty-sockaddr drop "sockaddr-in" ; M: inet4 make-sockaddr ( inet -- sockaddr ) "sockaddr-in" @@ -128,7 +132,9 @@ M: inet6 address-size drop 16 ; M: inet6 protocol-family drop PF_INET6 ; -M: inet6 sockaddr-type drop "sockaddr-in6" c-type ; +M: inet6 sockaddr-size drop "sockaddr-in6" heap-size ; + +M: inet6 empty-sockaddr drop "sockaddr-in6" ; M: inet6 make-sockaddr ( inet -- sockaddr ) "sockaddr-in6" diff --git a/basis/io/unix/sockets/sockets.factor b/basis/io/unix/sockets/sockets.factor index 50952dd217..8f9ff4f066 100755 --- a/basis/io/unix/sockets/sockets.factor +++ b/basis/io/unix/sockets/sockets.factor @@ -139,7 +139,9 @@ M: unix (send) ( packet addrspec datagram -- ) ! Unix domain sockets M: local protocol-family drop PF_UNIX ; -M: local sockaddr-type drop "sockaddr-un" c-type ; +M: local sockaddr-size drop "sockaddr-un" heap-size ; + +M: local empty-sockaddr drop "sockaddr-un" ; M: local make-sockaddr path>> (normalize-path) diff --git a/basis/io/windows/nt/backend/backend.factor b/basis/io/windows/nt/backend/backend.factor index 7fbc1dbcf9..73b77508b7 100755 --- a/basis/io/windows/nt/backend/backend.factor +++ b/basis/io/windows/nt/backend/backend.factor @@ -1,9 +1,9 @@ USING: alien alien.c-types arrays assocs combinators continuations destructors io io.backend io.ports io.timeouts -io.windows io.windows.files libc kernel math namespaces -sequences threads windows windows.errors windows.kernel32 -strings splitting io.files io.buffers qualified ascii system -accessors locals ; +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 @@ -120,3 +120,5 @@ M: winnt (wait-to-read) ( port -- ) [ finish-read ] tri ] with-destructors ; + +M: winnt (init-stdio) init-c-stdio ; diff --git a/basis/io/windows/nt/sockets/sockets.factor b/basis/io/windows/nt/sockets/sockets.factor index 41c5e88f5f..5d94cf2d4a 100755 --- a/basis/io/windows/nt/sockets/sockets.factor +++ b/basis/io/windows/nt/sockets/sockets.factor @@ -71,7 +71,7 @@ TUPLE: AcceptEx-args port dwLocalAddressLength dwRemoteAddressLength lpdwBytesReceived lpOverlapped ; : init-accept-buffer ( addr AcceptEx -- ) - swap sockaddr-type heap-size 16 + + swap sockaddr-size 16 + [ >>dwLocalAddressLength ] [ >>dwRemoteAddressLength ] bi dup dwLocalAddressLength>> 2 * malloc &free >>lpOutputBuffer drop ; inline @@ -135,7 +135,7 @@ TUPLE: WSARecvFrom-args port WSARecvFrom-args new swap >>port dup port>> handle>> handle>> >>s - dup port>> addr>> sockaddr-type heap-size + dup port>> addr>> sockaddr-size [ malloc &free >>lpFrom ] [ malloc-int &free >>lpFromLen ] bi make-receive-buffer >>lpBuffers diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index b502a4b4a2..86393771de 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -1,19 +1,18 @@ ! Copyright (C) 2007, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors qualified io.streams.c init fry namespaces make -assocs kernel parser lexer strings.parser tools.deploy.config -vocabs sequences words words.private memory kernel.private -continuations io prettyprint vocabs.loader debugger system -strings sets vectors quotations byte-arrays sorting ; +USING: accessors qualified io.backend io.streams.c init fry +namespaces make assocs kernel parser lexer strings.parser +tools.deploy.config vocabs sequences words words.private memory +kernel.private continuations io prettyprint vocabs.loader +debugger system strings sets vectors quotations byte-arrays +sorting compiler.units definitions ; QUALIFIED: bootstrap.stage2 QUALIFIED: classes QUALIFIED: command-line QUALIFIED: compiler.errors.private -QUALIFIED: compiler.units QUALIFIED: continuations QUALIFIED: definitions QUALIFIED: init -QUALIFIED: io.backend QUALIFIED: io.thread QUALIFIED: layouts QUALIFIED: listener @@ -198,11 +197,6 @@ IN: tools.deploy.shaker strip-word-names? [ dup strip-word-names ] when 2drop ; -: strip-recompile-hook ( -- ) - [ [ f ] { } map>assoc ] - compiler.units:recompile-hook - set-global ; - : strip-vocab-globals ( except names -- words ) [ child-vocabs [ words ] map concat ] map concat swap diff ; @@ -233,7 +227,7 @@ IN: tools.deploy.shaker "initial-thread" "threads" lookup , ] unless - strip-io? [ io.backend:io-backend , ] when + strip-io? [ io-backend , ] when { } { "alarms" @@ -260,9 +254,9 @@ IN: tools.deploy.shaker command-line:main-vocab-hook compiled-crossref compiled-generic-crossref - compiler.units:recompile-hook - compiler.units:update-tuples-hook - compiler.units:definition-observers + recompile-hook + update-tuples-hook + definition-observers definitions:crossref interactive-vocabs layouts:num-tags @@ -326,6 +320,14 @@ IN: tools.deploy.shaker 21 setenv ] [ drop ] if ; +: strip-c-io ( -- ) + deploy-io get 2 = [ + [ + c-io-backend forget + "io.streams.c" forget-vocab + ] with-compilation-unit + ] unless ; + : compress ( pred string -- ) "Compressing " prepend show instances @@ -362,10 +364,10 @@ SYMBOL: deploy-vocab set-boot-quot ; : strip ( -- ) + strip-c-io strip-libc strip-cocoa strip-debugger - strip-recompile-hook strip-init-hooks deploy-vocab get vocab-main set-boot-quot* stripped-word-props >r diff --git a/core/io/backend/backend.factor b/core/io/backend/backend.factor index 0760063f0d..0c13277106 100755 --- a/core/io/backend/backend.factor +++ b/core/io/backend/backend.factor @@ -6,6 +6,10 @@ IN: io.backend SYMBOL: io-backend +SINGLETON: c-io-backend + +c-io-backend io-backend set-global + HOOK: init-io io-backend ( -- ) HOOK: (init-stdio) io-backend ( -- stdin stdout stderr ) diff --git a/core/io/streams/c/c.factor b/core/io/streams/c/c.factor index 780d892d2e..1e12d7e956 100755 --- a/core/io/streams/c/c.factor +++ b/core/io/streams/c/c.factor @@ -54,26 +54,28 @@ M: c-reader stream-read-until M: c-reader dispose* handle>> fclose ; -M: object init-io ; +M: c-io-backend init-io ; : stdin-handle 11 getenv ; : stdout-handle 12 getenv ; : stderr-handle 61 getenv ; -M: object (init-stdio) +: init-c-stdio ( -- stdin stdout stderr ) stdin-handle stdout-handle stderr-handle ; -M: object io-multiplex 60 60 * 1000 * or (sleep) ; +M: c-io-backend (init-stdio) init-c-stdio ; -M: object (file-reader) +M: c-io-backend io-multiplex 60 60 * 1000 * or (sleep) ; + +M: c-io-backend (file-reader) "rb" fopen ; -M: object (file-writer) +M: c-io-backend (file-writer) "wb" fopen ; -M: object (file-appender) +M: c-io-backend (file-appender) "ab" fopen ; : show ( msg -- ) From f539406ee1092541dfb3accffe924fd656e65187 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 05:12:38 -0500 Subject: [PATCH 016/244] Fold class predicates applied to literals --- .../tree/propagation/propagation-tests.factor | 4 +++- .../compiler/tree/propagation/simple/simple.factor | 14 +++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/basis/compiler/tree/propagation/propagation-tests.factor b/basis/compiler/tree/propagation/propagation-tests.factor index d73e8b7db1..19ee051ac6 100644 --- a/basis/compiler/tree/propagation/propagation-tests.factor +++ b/basis/compiler/tree/propagation/propagation-tests.factor @@ -8,7 +8,7 @@ math.functions math.private strings layouts compiler.tree.propagation.info compiler.tree.def-use compiler.tree.debugger compiler.tree.checker slots.private words hashtables classes assocs locals -float-arrays ; +float-arrays system ; IN: compiler.tree.propagation.tests \ propagate must-infer @@ -590,6 +590,8 @@ MIXIN: empty-mixin [ V{ float-array } ] [ [| | F{ } ] final-classes ] unit-test +[ V{ t } ] [ [ netbsd unix? ] final-literals ] unit-test + ! [ V{ string } ] [ ! [ dup string? t xor [ "A" throw ] [ ] if ] final-classes ! ] unit-test diff --git a/basis/compiler/tree/propagation/simple/simple.factor b/basis/compiler/tree/propagation/simple/simple.factor index 7fc38239f1..d586ff398f 100644 --- a/basis/compiler/tree/propagation/simple/simple.factor +++ b/basis/compiler/tree/propagation/simple/simple.factor @@ -76,13 +76,25 @@ M: #declare propagate-before : fold-call ( #call word -- ) [ (fold-call) ] [ drop out-d>> ] 2bi set-value-infos ; -: predicate-output-infos ( info class -- info ) +: predicate-output-infos/literal ( info class -- info ) + [ literal>> ] dip + '[ _ _ instance? ] + [ drop object-info ] + recover ; + +: predicate-output-infos/class ( info class -- info ) [ class>> ] dip { { [ 2dup class<= ] [ t ] } { [ 2dup classes-intersect? not ] [ f ] } [ object-info ] } cond 2nip ; +: predicate-output-infos ( info class -- info ) + over literal?>> + [ predicate-output-infos/literal ] + [ predicate-output-infos/class ] + if ; + : propagate-predicate ( #call word -- infos ) #! We need to force the caller word to recompile when the class #! is redefined, since now we're making assumptions but the From 7a2eb1d7b2397e3ee04437751d1c9ebeb7ea7dfa Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 05:13:22 -0500 Subject: [PATCH 017/244] Split off urls.secure for SSL support; reduces deployed image size --- basis/http/client/client-docs.factor | 2 ++ basis/urls/secure/secure.factor | 6 ++++++ basis/urls/urls.factor | 10 ++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 basis/urls/secure/secure.factor diff --git a/basis/http/client/client-docs.factor b/basis/http/client/client-docs.factor index a762d1a5ef..d4f277a7c3 100644 --- a/basis/http/client/client-docs.factor +++ b/basis/http/client/client-docs.factor @@ -95,6 +95,8 @@ ARTICLE: "http.client.errors" "HTTP client errors" ARTICLE: "http.client" "HTTP client" "The " { $vocab-link "http.client" } " vocabulary implements an HTTP and HTTPS client on top of " { $link "http" } "." $nl +"For HTTPS support, you must load the " { $vocab-link "urls.secure" } " vocab first. If you don't load it, HTTPS will not load and images generated by " { $vocab-link "tools.deploy" } " will be smaller as a result." +$nl "There are two primary usage patterns, data retrieval with GET requests and form submission with POST requests:" { $subsection "http.client.get" } { $subsection "http.client.post" } diff --git a/basis/urls/secure/secure.factor b/basis/urls/secure/secure.factor new file mode 100644 index 0000000000..d2fa55f7f3 --- /dev/null +++ b/basis/urls/secure/secure.factor @@ -0,0 +1,6 @@ +! Copyright (C) 2008 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: urls urls.private io.sockets io.sockets.secure ; +IN: urls.secure + +M: abstract-inet >secure-addr ; diff --git a/basis/urls/urls.factor b/basis/urls/urls.factor index 5cc8c9693b..30e8c68f9d 100644 --- a/basis/urls/urls.factor +++ b/basis/urls/urls.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: kernel ascii combinators combinators.short-circuit sequences splitting fry namespaces make assocs arrays strings -io.sockets io.sockets.secure io.encodings.string +io.sockets io.encodings.string io.encodings.utf8 math math.parser accessors parser strings.parser lexer prettyprint.backend hashtables present peg.ebnf urls.encoding ; @@ -159,6 +159,12 @@ PRIVATE> : secure-protocol? ( protocol -- ? ) "https" = ; +secure-addr ( addrspec -- addrspec' ) + +PRIVATE> + : url-addr ( url -- addr ) [ [ host>> ] @@ -166,7 +172,7 @@ PRIVATE> [ protocol>> protocol-port ] tri or ] [ protocol>> ] bi - secure-protocol? [ ] when ; + secure-protocol? [ >secure-addr ] when ; : ensure-port ( url -- url ) dup protocol>> '[ _ protocol-port or ] change-port ; From 2b420656d6448cee20062f1ab620d376048104b2 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 05:14:05 -0500 Subject: [PATCH 018/244] Tree shaker no longer loads threads into threadless images; 77kb improvement on hello-world size --- basis/tools/deploy/shaker/shaker.factor | 4 ++-- basis/tools/deploy/shaker/strip-debugger.factor | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index 86393771de..f3177a76e1 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -13,7 +13,6 @@ QUALIFIED: compiler.errors.private QUALIFIED: continuations QUALIFIED: definitions QUALIFIED: init -QUALIFIED: io.thread QUALIFIED: layouts QUALIFIED: listener QUALIFIED: prettyprint.config @@ -214,13 +213,14 @@ IN: tools.deploy.shaker continuations:restarts listener:error-hook init:init-hooks - io.thread:io-thread source-files:source-files input-stream output-stream error-stream } % + "io-thread" "io.thread" lookup , + "mallocs" "libc.private" lookup , deploy-threads? [ diff --git a/basis/tools/deploy/shaker/strip-debugger.factor b/basis/tools/deploy/shaker/strip-debugger.factor index 2302b61715..bdcc6c237e 100755 --- a/basis/tools/deploy/shaker/strip-debugger.factor +++ b/basis/tools/deploy/shaker/strip-debugger.factor @@ -1,8 +1,14 @@ -USING: kernel threads threads.private ; +USING: compiler.units words vocabs kernel threads.private ; IN: debugger : print-error ( error -- ) die drop ; : error. ( error -- ) die drop ; -M: thread error-in-thread ( error thread -- ) die 2drop ; +"threads" vocab [ + [ + "error-in-thread" "threads" lookup + [ die 2drop ] + define + ] with-compilation-unit +] when From e722698b1bc007c51e4ccd99e5ccd045b4f86318 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 05:15:05 -0500 Subject: [PATCH 019/244] os and cpu words now foldable; reduces deploy image size --- core/system/system.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/system/system.factor b/core/system/system.factor index 3c207c4ab5..6c9d838fa4 100755 --- a/core/system/system.factor +++ b/core/system/system.factor @@ -11,7 +11,7 @@ SINGLETON: ppc UNION: x86 x86.32 x86.64 ; -: cpu ( -- class ) \ cpu get ; +: cpu ( -- class ) \ cpu get-global ; foldable SINGLETON: winnt SINGLETON: wince @@ -29,7 +29,7 @@ UNION: bsd freebsd netbsd openbsd macosx ; UNION: unix bsd solaris linux ; -: os ( -- class ) \ os get ; +: os ( -- class ) \ os get-global ; foldable Date: Thu, 2 Oct 2008 06:41:17 -0500 Subject: [PATCH 020/244] Debugging tree shaker --- basis/tools/deploy/shaker/shaker.factor | 14 ++++++++++---- basis/tools/deploy/shaker/strip-cocoa.factor | 9 ++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index f3177a76e1..7c02e87209 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -85,8 +85,8 @@ IN: tools.deploy.shaker ] change-props drop ] each ] [ - "Remaining word properties:" print - [ props>> keys ] gather . + "Remaining word properties:\n" show + [ props>> keys ] gather unparse show ] [ H{ } clone '[ [ [ _ [ ] cache ] map ] change-props drop @@ -360,15 +360,21 @@ SYMBOL: deploy-vocab init-hooks get values concat % , strip-io? [ \ flush , ] unless - ] [ ] make "Boot quotation: " write dup . flush + ] [ ] make "Boot quotation: " show dup unparse show set-boot-quot ; +: init-stripper ( -- ) + t "quiet" set-global + f output-stream set-global ; + : strip ( -- ) - strip-c-io + init-stripper strip-libc strip-cocoa strip-debugger strip-init-hooks + strip-c-io + f 5 setenv ! we can't use the Factor debugger or Factor I/O anymore deploy-vocab get vocab-main set-boot-quot* stripped-word-props >r stripped-globals strip-globals diff --git a/basis/tools/deploy/shaker/strip-cocoa.factor b/basis/tools/deploy/shaker/strip-cocoa.factor index 2cf803e270..d5249dc20c 100755 --- a/basis/tools/deploy/shaker/strip-cocoa.factor +++ b/basis/tools/deploy/shaker/strip-cocoa.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: cocoa cocoa.messages cocoa.application cocoa.nibs assocs namespaces kernel kernel.private words compiler.units sequences -ui ui.cocoa init ; +init vocabs ; IN: tools.deploy.shaker.cocoa : pool ( obj -- obj' ) \ pool get [ ] cache ; @@ -23,9 +23,12 @@ IN: cocoa.application H{ } clone \ pool [ global [ - stop-after-last-window? set + "stop-after-last-window?" "ui" lookup set - [ "MiniFactor.nib" load-nib ] cocoa-init-hook set-global + "ui.cocoa" vocab [ + [ "MiniFactor.nib" load-nib ] + "cocoa-init-hook" "ui.cocoa" lookup set-global + ] when ! Only keeps those methods that we actually call sent-messages get super-sent-messages get assoc-union From 28d3654f61d1d38bb5d2710dbb6be49e5d3cba53 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 06:47:20 -0500 Subject: [PATCH 021/244] Small ricing --- core/sequences/sequences.factor | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 267238a502..63cc14d1d7 100755 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -27,7 +27,7 @@ M: sequence lengthen 2dup length > [ set-length ] [ 2drop ] if ; M: sequence shorten 2dup length < [ set-length ] [ 2drop ] if ; -: empty? ( seq -- ? ) length zero? ; inline +: empty? ( seq -- ? ) length 0 = ; inline : if-empty ( seq quot1 quot2 -- ) [ dup empty? ] [ [ drop ] prepose ] [ ] tri* if ; inline @@ -362,7 +362,7 @@ PRIVATE> prepose curry ; inline : (interleave) ( n elt between quot -- ) - roll zero? [ nip ] [ swapd 2slip ] if call ; inline + roll 0 = [ nip ] [ swapd 2slip ] if call ; inline PRIVATE> @@ -530,7 +530,7 @@ M: sequence <=> [ -rot 2nth-unsafe <=> ] [ [ length ] compare ] if* ; : sequence= ( seq1 seq2 -- ? ) - 2dup [ length ] bi@ number= + 2dup [ length ] bi@ = [ mismatch not ] [ 2drop f ] if ; inline : sequence-hashcode-step ( oldhash newpart -- newhash ) @@ -547,7 +547,7 @@ M: reversed equal? over reversed? [ sequence= ] [ 2drop f ] if ; M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ; : move ( to from seq -- ) - 2over number= + 2over = [ 3drop ] [ [ nth swap ] [ set-nth ] bi ] if ; inline r 2over + pick r> move >r 1+ r> ] keep @@ -590,7 +590,7 @@ PRIVATE> ] if ; : move-forward ( shift from to seq -- ) - 2over number= [ + 2over = [ 2drop 2drop ] [ [ >r pick >r dup dup r> + swap r> move 1- ] keep @@ -607,7 +607,7 @@ PRIVATE> PRIVATE> : open-slice ( shift from seq -- ) - pick zero? [ + pick 0 = [ 3drop ] [ pick over length + over >r >r @@ -680,7 +680,7 @@ PRIVATE> : padding ( seq n elt quot -- newseq ) [ - [ over length [-] dup zero? [ drop ] ] dip + [ over length [-] dup 0 = [ drop ] ] dip [ ] curry ] dip compose if ; inline From b45ee5b8be5ddc1ecfce65c3f6137d83fc3f5963 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 06:47:48 -0500 Subject: [PATCH 022/244] Fix bootstrap --- basis/ui/gadgets/theme/theme.factor | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/basis/ui/gadgets/theme/theme.factor b/basis/ui/gadgets/theme/theme.factor index 46fa0105a3..5e4a2fbf4c 100644 --- a/basis/ui/gadgets/theme/theme.factor +++ b/basis/ui/gadgets/theme/theme.factor @@ -2,7 +2,8 @@ ! 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 accessors ; +colors colors.gray qualified accessors ; +QUALIFIED: colors IN: ui.gadgets.theme : solid-interior ( gadget color -- gadget ) @@ -12,7 +13,7 @@ IN: ui.gadgets.theme >>boundary ; inline : faint-boundary ( gadget -- gadget ) - gray solid-boundary ; inline + colors:gray solid-boundary ; inline : selection-color ( -- color ) light-purple ; From b4d918caa529470b218d0acec3d644fee2337cac Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 07:10:22 -0500 Subject: [PATCH 023/244] Some minor new features for Cocoa binding --- basis/cocoa/application/application.factor | 2 +- basis/cocoa/cocoa-docs.factor | 9 ++++++++- basis/cocoa/cocoa.factor | 12 +++++++++++- basis/cocoa/messages/messages-docs.factor | 6 +----- basis/cocoa/messages/messages.factor | 3 ++- basis/cocoa/standalone/standalone.factor | 12 ++++++++++++ 6 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 basis/cocoa/standalone/standalone.factor diff --git a/basis/cocoa/application/application.factor b/basis/cocoa/application/application.factor index a28952ea33..065a4abc5a 100755 --- a/basis/cocoa/application/application.factor +++ b/basis/cocoa/application/application.factor @@ -30,7 +30,7 @@ IN: cocoa.application FUNCTION: void NSBeep ( ) ; : with-cocoa ( quot -- ) - [ NSApp drop call ] with-autorelease-pool ; + [ NSApp drop call ] with-autorelease-pool ; inline : next-event ( app -- event ) 0 f CFRunLoopDefaultMode 1 diff --git a/basis/cocoa/cocoa-docs.factor b/basis/cocoa/cocoa-docs.factor index a971288251..dd8d331b35 100644 --- a/basis/cocoa/cocoa-docs.factor +++ b/basis/cocoa/cocoa-docs.factor @@ -16,9 +16,16 @@ HELP: SUPER-> { send super-send POSTPONE: -> POSTPONE: SUPER-> } related-words +HELP: IMPORT: +{ $syntax "IMPORT: name" } +{ $description "Makes an Objective C class available for use." } +{ $examples + { $code "IMPORT: QTMovie" "QTMovie \"My Movie.mov\" f -> movieWithFile:error:" } +} ; + ARTICLE: "objc-calling" "Calling Objective C code" "Before an Objective C class can be used, it must be imported; by default, a small set of common classes are imported automatically, but additional classes can be imported as needed." -{ $subsection import-objc-class } +{ $subsection POSTPONE: IMPORT: } "Every imported Objective C class has as corresponding class word in the " { $vocab-link "cocoa.classes" } " vocabulary. Class words push the class object in the stack, allowing class methods to be invoked." $nl "Messages can be sent to classes and instances using a pair of parsing words:" diff --git a/basis/cocoa/cocoa.factor b/basis/cocoa/cocoa.factor index 744d577c0d..ab86796236 100755 --- a/basis/cocoa/cocoa.factor +++ b/basis/cocoa/cocoa.factor @@ -3,7 +3,7 @@ USING: compiler io kernel cocoa.runtime cocoa.subclassing cocoa.messages cocoa.types sequences words vocabs parser core-foundation namespaces assocs hashtables compiler.units -lexer ; +lexer init ; IN: cocoa : (remember-send) ( selector variable -- ) @@ -27,6 +27,16 @@ SYMBOL: super-sent-messages scan dup remember-super-send parsed \ super-send parsed ; parsing +SYMBOL: frameworks + +frameworks global [ V{ } clone or ] change-at + +[ frameworks get [ load-framework ] each ] "cocoa.messages" add-init-hook + +: FRAMEWORK: scan [ load-framework ] [ frameworks get push ] bi ; parsing + +: IMPORT: scan [ ] import-objc-class ; parsing + "Compiling Objective C bridge..." print "cocoa.classes" create-vocab drop diff --git a/basis/cocoa/messages/messages-docs.factor b/basis/cocoa/messages/messages-docs.factor index f78981c923..9b5e3fdfd9 100644 --- a/basis/cocoa/messages/messages-docs.factor +++ b/basis/cocoa/messages/messages-docs.factor @@ -32,11 +32,7 @@ HELP: alien>objc-types HELP: import-objc-class { $values { "name" string } { "quot" "a quotation with stack effect " { $snippet "( -- )" } } } -{ $description "If a class named " { $snippet "name" } " is already known to the Objective C interface, does nothing. Otherwise, first calls the quotation. The quotation should make the class available to the Objective C runtime if necessary, either by loading a framework or defining it directly. After the quotation returns, this word makes the class available to Factor programs by importing methods and creating a class word the class object in the " { $vocab-link "cocoa.classes" } " vocabulary." } -{ $notes "In most cases, the quotation should be " { $link f } "." } -{ $examples - { $code "\"QTMovie\" f import-objc-class" "QTMovie \"My Movie.mov\" f -> movieWithFile:error:" } -} ; +{ $description "If a class named " { $snippet "name" } " is already known to the Objective C interface, does nothing. Otherwise, first calls the quotation. The quotation should make the class available to the Objective C runtime if necessary, either by loading a framework or defining it directly. After the quotation returns, this word makes the class available to Factor programs by importing methods and creating a class word the class object in the " { $vocab-link "cocoa.classes" } " vocabulary." } ; HELP: root-class { $values { "class" alien } { "root" alien } } diff --git a/basis/cocoa/messages/messages.factor b/basis/cocoa/messages/messages.factor index 7977485b02..09601ef8cc 100755 --- a/basis/cocoa/messages/messages.factor +++ b/basis/cocoa/messages/messages.factor @@ -4,7 +4,8 @@ USING: accessors alien alien.c-types alien.strings arrays assocs combinators compiler kernel math namespaces make parser prettyprint prettyprint.sections quotations sequences strings words cocoa.runtime io macros memoize debugger -io.encodings.ascii effects compiler.generator libc libc.private ; +io.encodings.ascii effects compiler.generator libc libc.private +parser lexer init core-foundation ; IN: cocoa.messages : make-sender ( method function -- quot ) diff --git a/basis/cocoa/standalone/standalone.factor b/basis/cocoa/standalone/standalone.factor new file mode 100644 index 0000000000..528736f172 --- /dev/null +++ b/basis/cocoa/standalone/standalone.factor @@ -0,0 +1,12 @@ +! Copyright (C) 2008 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel cocoa.nibs cocoa.application cocoa ; +IN: cocoa.standalone + +: cocoa-app ( quot -- ) + [ + "MiniFactor.nib" load-nib + call + finish-launching + NSApp -> run + ] with-cocoa ; inline From 403d5207f06f9dfce922ca578d0a9d21b9155fb5 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 08:30:38 -0500 Subject: [PATCH 024/244] stop-server/stop-this-server split --- basis/concurrency/distributed/distributed.factor | 2 +- basis/http/http-tests.factor | 2 +- basis/io/encodings/ascii/ascii-docs.factor | 4 ++-- basis/io/servers/connection/connection-docs.factor | 13 ++++++++++--- basis/io/servers/connection/connection-tests.factor | 2 +- basis/io/servers/connection/connection.factor | 7 +++++-- basis/io/sockets/sockets-docs.factor | 2 +- basis/tools/deploy/deploy-tests.factor | 2 +- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/basis/concurrency/distributed/distributed.factor b/basis/concurrency/distributed/distributed.factor index 5e2f1bb6d1..99ad239011 100755 --- a/basis/concurrency/distributed/distributed.factor +++ b/basis/concurrency/distributed/distributed.factor @@ -10,7 +10,7 @@ SYMBOL: local-node : handle-node-client ( -- ) deserialize - [ first2 get-process send ] [ stop-server ] if* ; + [ first2 get-process send ] [ stop-this-server ] if* ; : ( addrspec -- threaded-server ) diff --git a/basis/http/http-tests.factor b/basis/http/http-tests.factor index 9a1421a3ad..49ef03543e 100755 --- a/basis/http/http-tests.factor +++ b/basis/http/http-tests.factor @@ -179,7 +179,7 @@ http.server.dispatchers db.tuples ; : add-quit-action - [ stop-server "Goodbye" "text/html" ] >>display + [ stop-this-server "Goodbye" "text/html" ] >>display "quit" add-responder ; : test-db "test.db" temp-file sqlite-db ; diff --git a/basis/io/encodings/ascii/ascii-docs.factor b/basis/io/encodings/ascii/ascii-docs.factor index fa496a3526..e0ab11f1a4 100644 --- a/basis/io/encodings/ascii/ascii-docs.factor +++ b/basis/io/encodings/ascii/ascii-docs.factor @@ -4,8 +4,8 @@ IN: io.encodings.ascii HELP: ascii { $class-description "ASCII encoding descriptor." } ; -ARTICLE: "ascii" "ASCII encoding" +ARTICLE: "io.encodings.ascii" "ASCII encoding" "By default, if there's a non-ASCII character in an input stream, it will be replaced with a replacement character (U+FFFD), and if a non-ASCII character is used in output, an exception is thrown." { $subsection ascii } ; -ABOUT: "ascii" +ABOUT: "io.encodings.ascii" diff --git a/basis/io/servers/connection/connection-docs.factor b/basis/io/servers/connection/connection-docs.factor index 839f3d8414..00711ce226 100755 --- a/basis/io/servers/connection/connection-docs.factor +++ b/basis/io/servers/connection/connection-docs.factor @@ -58,9 +58,11 @@ ARTICLE: "io.servers.connection" "Threaded servers" { $subsection start-server } { $subsection start-server* } { $subsection wait-for-server } +"Stopping the server:" +{ $subsection stop-server } "From within the dynamic scope of a client handler, several words can be used to interact with the threaded server:" { $subsection remote-address } -{ $subsection stop-server } +{ $subsection stop-this-server } { $subsection secure-port } { $subsection insecure-port } "Additionally, the " { $link local-address } " variable is set, as in " { $link with-client } "." ; @@ -88,7 +90,8 @@ HELP: handle-client* HELP: start-server { $values { "threaded-server" threaded-server } } -{ $description "Starts a threaded server, returning when a client handler calls " { $link stop-server } "." } ; +{ $description "Starts a threaded server." } +{ $notes "Use " { $link stop-server } " or " { $link stop-this-server } " to stop the server." } ; HELP: wait-for-server { $values { "threaded-server" threaded-server } } @@ -96,9 +99,13 @@ HELP: wait-for-server HELP: start-server* { $values { "threaded-server" threaded-server } } -{ $description "Starts a threaded server, returning as soon as it is accepting connections." } ; +{ $description "Starts a threaded server, returning as soon as it is ready to begin accepting connections." } ; HELP: stop-server +{ $values { "threaded-server" threaded-server } } +{ $description "Stops a threaded server, preventing it from accepting any more connections and returning to the caller of " { $link start-server } ". All client connections which have already been opened continue to be serviced." } ; + +HELP: stop-this-server { $description "Stops the current threaded server, preventing it from accepting any more connections and returning to the caller of " { $link start-server } ". All client connections which have already been opened continue to be serviced." } ; HELP: secure-port diff --git a/basis/io/servers/connection/connection-tests.factor b/basis/io/servers/connection/connection-tests.factor index aa8df0b16c..a3223ed2aa 100755 --- a/basis/io/servers/connection/connection-tests.factor +++ b/basis/io/servers/connection/connection-tests.factor @@ -33,7 +33,7 @@ concurrency.promises io.encodings.ascii io threads calendar ; 5 >>max-connections 1237 >>insecure - [ "Hello world." write stop-server ] >>handler + [ "Hello world." write stop-this-server ] >>handler "server" set ] unit-test diff --git a/basis/io/servers/connection/connection.factor b/basis/io/servers/connection/connection.factor index bde4e518ac..0516f24402 100755 --- a/basis/io/servers/connection/connection.factor +++ b/basis/io/servers/connection/connection.factor @@ -136,8 +136,11 @@ PRIVATE> [ wait-for-server ] bi ; -: stop-server ( -- ) - threaded-server get [ f ] change-sockets drop dispose-each ; +: stop-server ( threaded-server -- ) + [ f ] change-sockets drop dispose-each ; + +: stop-this-server ( -- ) + threaded-server get stop-server ; GENERIC: port ( addrspec -- n ) diff --git a/basis/io/sockets/sockets-docs.factor b/basis/io/sockets/sockets-docs.factor index 3c77be254c..3454f3384e 100755 --- a/basis/io/sockets/sockets-docs.factor +++ b/basis/io/sockets/sockets-docs.factor @@ -104,7 +104,7 @@ HELP: } ; HELP: with-client -{ $values { "remote" "an address specifier" } { "encoding" "an encding descriptor" } { "quot" quotation } } +{ $values { "remote" "an address specifier" } { "encoding" "an encoding descriptor" } { "quot" quotation } } { $description "Opens a network connection and calls the quotation in a new dynamic scope with " { $link input-stream } " and " { $link output-stream } " rebound to the network streams. The local address the socket is bound to is stored in the " { $link local-address } " variable." } { $errors "Throws an error if the connection cannot be established." } ; diff --git a/basis/tools/deploy/deploy-tests.factor b/basis/tools/deploy/deploy-tests.factor index 1d5b59bf0c..db4255cdb1 100755 --- a/basis/tools/deploy/deploy-tests.factor +++ b/basis/tools/deploy/deploy-tests.factor @@ -66,7 +66,7 @@ http.server.responses http.server.static io.servers.connection ; SINGLETON: quit-responder M: quit-responder call-responder* - 2drop stop-server "Goodbye" "text/html" ; + 2drop stop-this-server "Goodbye" "text/html" ; : add-quot-responder ( responder -- responder ) quit-responder "quit" add-responder ; From c8127d1e1b9d9cfe1e9adf5e72ac04d6490d058a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 08:30:49 -0500 Subject: [PATCH 025/244] Fix typo --- basis/present/present-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/present/present-docs.factor b/basis/present/present-docs.factor index f148d96b32..bda7723173 100644 --- a/basis/present/present-docs.factor +++ b/basis/present/present-docs.factor @@ -8,6 +8,6 @@ ARTICLE: "present" "Converting objects to human-readable strings" HELP: present { $values { "object" object } { "string" string } } { $contract "Outputs a human-readable string from an object." } -{ $notes "New methods can be defined by user code. Most often, this is done so that the object can be used with various words in the " { $link "html.components" } " or " { $link "urls" } " vocabularies." } ; +{ $notes "New methods can be defined by user code. Most often, this is done so that the object can be used with various words in the " { $vocab-link "html.components" } " or " { $link "urls" } " vocabularies." } ; ABOUT: "present" From c19f2257f470ca28d6dbed779ee499d8cdfa70ef Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 08:34:49 -0500 Subject: [PATCH 026/244] Fix permission bits --- basis/alarms/alarms-docs.factor | 0 basis/alarms/alarms-tests.factor | 0 basis/alarms/alarms.factor | 0 basis/alias/alias.factor | 0 basis/alien/arrays/arrays-docs.factor | 0 basis/alien/c-types/c-types-docs.factor | 0 basis/alien/c-types/c-types-tests.factor | 0 basis/alien/c-types/c-types.factor | 0 basis/alien/remote-control/remote-control.factor | 0 basis/alien/strings/strings.factor | 0 basis/alien/structs/structs-docs.factor | 0 basis/alien/structs/structs.factor | 0 basis/alien/syntax/syntax-docs.factor | 0 basis/alien/syntax/syntax.factor | 0 basis/ascii/ascii-docs.factor | 0 basis/ascii/ascii.factor | 0 basis/bit-arrays/bit-arrays-tests.factor | 0 basis/bit-arrays/bit-arrays.factor | 0 basis/bit-vectors/bit-vectors-docs.factor | 0 basis/bit-vectors/bit-vectors-tests.factor | 0 basis/bit-vectors/bit-vectors.factor | 0 basis/bootstrap/compiler/compiler.factor | 0 basis/bootstrap/handbook/handbook.factor | 0 basis/bootstrap/help/help.factor | 0 basis/bootstrap/image/image-tests.factor | 0 basis/bootstrap/image/image.factor | 0 basis/bootstrap/image/upload/upload.factor | 0 basis/bootstrap/io/io.factor | 0 basis/bootstrap/random/random.factor | 0 basis/bootstrap/stage2.factor | 0 basis/bootstrap/tools/tools.factor | 0 basis/bootstrap/ui/tools/tools.factor | 0 basis/bootstrap/unicode/unicode.factor | 0 basis/boxes/boxes-docs.factor | 0 basis/boxes/boxes-tests.factor | 0 basis/boxes/boxes.factor | 0 basis/calendar/calendar-tests.factor | 0 basis/calendar/calendar.factor | 0 basis/calendar/format/format-tests.factor | 0 basis/calendar/format/format.factor | 0 basis/calendar/model/model.factor | 0 basis/calendar/windows/windows.factor | 0 basis/channels/channels-tests.factor | 0 basis/channels/channels.factor | 0 basis/channels/examples/examples.factor | 0 basis/channels/remote/remote.factor | 0 basis/checksums/adler-32/adler-32-docs.factor | 0 basis/checksums/md5/md5-docs.factor | 0 basis/checksums/md5/md5-tests.factor | 0 basis/checksums/md5/md5.factor | 0 basis/checksums/sha1/sha1-tests.factor | 0 basis/checksums/sha1/sha1.factor | 0 basis/checksums/sha2/sha2-tests.factor | 0 basis/checksums/sha2/sha2.factor | 0 basis/circular/circular-tests.factor | 0 basis/circular/circular.factor | 0 basis/cocoa/application/application.factor | 0 basis/cocoa/cocoa.factor | 0 basis/cocoa/messages/messages.factor | 0 basis/cocoa/pasteboard/pasteboard.factor | 0 basis/cocoa/subclassing/subclassing.factor | 0 basis/cocoa/windows/windows.factor | 0 basis/combinators/short-circuit/short-circuit.factor | 0 basis/compiler/compiler-docs.factor | 0 basis/compiler/compiler.factor | 0 basis/compiler/constants/constants.factor | 0 basis/compiler/generator/fixup/fixup.factor | 0 basis/compiler/generator/generator-docs.factor | 0 basis/compiler/generator/generator.factor | 0 basis/compiler/generator/registers/registers.factor | 0 basis/compiler/tests/alien.factor | 0 basis/compiler/tests/curry.factor | 0 basis/compiler/tests/float.factor | 0 basis/compiler/tests/intrinsics.factor | 0 basis/compiler/tests/optimizer.factor | 0 basis/compiler/tests/simple.factor | 0 basis/compiler/tests/stack-trace.factor | 0 basis/compiler/tests/templates-early.factor | 0 basis/compiler/tests/templates.factor | 0 basis/compiler/tests/tuples.factor | 0 basis/compiler/tree/dead-code/simple/simple.factor | 0 basis/compiler/tree/def-use/def-use-tests.factor | 0 basis/compiler/tree/def-use/def-use.factor | 0 basis/compiler/tree/propagation/propagation.factor | 0 basis/compiler/tree/tree.factor | 0 basis/concurrency/combinators/combinators-docs.factor | 0 basis/concurrency/combinators/combinators-tests.factor | 0 basis/concurrency/combinators/combinators.factor | 0 basis/concurrency/conditions/conditions.factor | 0 basis/concurrency/count-downs/count-downs-docs.factor | 0 basis/concurrency/count-downs/count-downs-tests.factor | 0 basis/concurrency/count-downs/count-downs.factor | 0 basis/concurrency/distributed/distributed-docs.factor | 0 basis/concurrency/distributed/distributed-tests.factor | 0 basis/concurrency/distributed/distributed.factor | 0 basis/concurrency/exchangers/exchangers-docs.factor | 0 basis/concurrency/exchangers/exchangers-tests.factor | 0 basis/concurrency/exchangers/exchangers.factor | 0 basis/concurrency/flags/flags-tests.factor | 0 basis/concurrency/flags/flags.factor | 0 basis/concurrency/futures/futures-docs.factor | 0 basis/concurrency/futures/futures-tests.factor | 0 basis/concurrency/futures/futures.factor | 0 basis/concurrency/locks/locks-docs.factor | 0 basis/concurrency/locks/locks-tests.factor | 0 basis/concurrency/locks/locks.factor | 0 basis/concurrency/mailboxes/mailboxes-docs.factor | 0 basis/concurrency/mailboxes/mailboxes-tests.factor | 0 basis/concurrency/mailboxes/mailboxes.factor | 0 basis/concurrency/messaging/messaging-docs.factor | 0 basis/concurrency/messaging/messaging-tests.factor | 0 basis/concurrency/messaging/messaging.factor | 0 basis/concurrency/promises/promises-docs.factor | 0 basis/concurrency/promises/promises-tests.factor | 0 basis/concurrency/promises/promises.factor | 0 basis/concurrency/semaphores/semaphores-docs.factor | 0 basis/concurrency/semaphores/semaphores.factor | 0 basis/cpu/architecture/architecture.factor | 0 basis/cpu/ppc/allot/allot.factor | 0 basis/cpu/ppc/architecture/architecture.factor | 0 basis/cpu/ppc/assembler/assembler.factor | 0 basis/cpu/ppc/bootstrap.factor | 0 basis/cpu/ppc/intrinsics/intrinsics.factor | 0 basis/cpu/ppc/linux/bootstrap.factor | 0 basis/cpu/ppc/macosx/bootstrap.factor | 0 basis/cpu/ppc/ppc.factor | 0 basis/cpu/x86/32/32.factor | 0 basis/cpu/x86/32/bootstrap.factor | 0 basis/cpu/x86/64/64.factor | 0 basis/cpu/x86/64/bootstrap.factor | 0 basis/cpu/x86/allot/allot.factor | 0 basis/cpu/x86/architecture/architecture.factor | 0 basis/cpu/x86/assembler/assembler.factor | 0 basis/cpu/x86/bootstrap.factor | 0 basis/cpu/x86/intrinsics/intrinsics.factor | 0 basis/cpu/x86/sse2/sse2.factor | 0 basis/db/db-tests.factor | 0 basis/db/db.factor | 0 basis/db/postgresql/ffi/ffi.factor | 0 basis/db/postgresql/lib/lib.factor | 0 basis/db/postgresql/postgresql-tests.factor | 0 basis/db/postgresql/postgresql.factor | 0 basis/db/sqlite/ffi/ffi.factor | 0 basis/db/sqlite/lib/lib.factor | 0 basis/db/sqlite/sqlite-tests.factor | 0 basis/db/sqlite/sqlite.factor | 0 basis/db/tuples/tuples-tests.factor | 0 basis/db/tuples/tuples.factor | 0 basis/db/types/types.factor | 0 basis/debugger/debugger-docs.factor | 0 basis/debugger/debugger-tests.factor | 0 basis/debugger/debugger.factor | 0 basis/delegate/delegate-tests.factor | 0 basis/delegate/delegate.factor | 0 basis/delegate/protocols/protocols.factor | 0 basis/dlists/dlists-docs.factor | 0 basis/dlists/dlists-tests.factor | 0 basis/dlists/dlists.factor | 0 basis/documents/documents.factor | 0 basis/editors/editors.factor | 0 basis/editors/editpadpro/editpadpro.factor | 0 basis/editors/editplus/editplus.factor | 0 basis/editors/emacs/emacs.factor | 0 basis/editors/emeditor/emeditor.factor | 0 basis/editors/gvim/gvim.factor | 0 basis/editors/gvim/windows/windows.factor | 0 basis/editors/jedit/jedit.factor | 0 basis/editors/macvim/macvim.factor | 0 basis/editors/notepadpp/notepadpp.factor | 0 basis/editors/scite/scite.factor | 0 basis/editors/ted-notepad/ted-notepad.factor | 0 basis/editors/textedit/textedit.factor | 0 basis/editors/textmate/textmate.factor | 0 basis/editors/ultraedit/ultraedit.factor | 0 basis/editors/vim/vim.factor | 0 basis/editors/wordpad/wordpad.factor | 0 basis/float-arrays/float-arrays-tests.factor | 0 basis/float-arrays/float-arrays.factor | 0 basis/float-vectors/float-vectors-docs.factor | 0 basis/float-vectors/float-vectors-tests.factor | 0 basis/float-vectors/float-vectors.factor | 0 basis/freetype/freetype.factor | 0 basis/fry/fry-docs.factor | 0 basis/fry/fry-tests.factor | 0 basis/fry/fry.factor | 0 basis/furnace/actions/actions-tests.factor | 0 basis/furnace/actions/actions.factor | 0 basis/furnace/auth/auth.factor | 0 basis/furnace/auth/basic/basic.factor | 0 basis/furnace/auth/login/login-tests.factor | 0 basis/furnace/auth/login/login.factor | 0 basis/furnace/auth/providers/assoc/assoc-tests.factor | 0 basis/furnace/auth/providers/assoc/assoc.factor | 0 basis/furnace/auth/providers/db/db-tests.factor | 0 basis/furnace/auth/providers/db/db.factor | 0 basis/furnace/auth/providers/null/null.factor | 0 basis/furnace/auth/providers/providers.factor | 0 basis/furnace/db/db.factor | 0 basis/furnace/sessions/sessions-tests.factor | 0 basis/furnace/sessions/sessions.factor | 0 basis/generalizations/generalizations-docs.factor | 0 basis/generalizations/generalizations-tests.factor | 0 basis/generalizations/generalizations.factor | 0 basis/globs/globs.factor | 0 basis/hash2/hash2-tests.factor | 0 basis/heaps/heaps-docs.factor | 0 basis/heaps/heaps-tests.factor | 0 basis/heaps/heaps.factor | 0 basis/help/cookbook/cookbook.factor | 0 basis/help/crossref/crossref-tests.factor | 0 basis/help/definitions/definitions-tests.factor | 0 basis/help/definitions/definitions.factor | 0 basis/help/handbook/handbook.factor | 0 basis/help/help-docs.factor | 0 basis/help/help.factor | 0 basis/help/lint/lint.factor | 0 basis/help/markup/markup.factor | 0 basis/help/stylesheet/stylesheet.factor | 0 basis/help/syntax/syntax-tests.factor | 0 basis/help/syntax/syntax.factor | 0 basis/help/topics/topics.factor | 0 basis/help/tutorial/tutorial.factor | 0 basis/html/streams/streams.factor | 0 basis/html/templates/fhtml/fhtml-tests.factor | 0 basis/html/templates/fhtml/fhtml.factor | 0 basis/http/client/client-tests.factor | 0 basis/http/client/client.factor | 0 basis/http/http-tests.factor | 0 basis/http/http.factor | 0 basis/http/server/cgi/cgi.factor | 0 basis/http/server/server.factor | 0 basis/http/server/static/static.factor | 0 basis/inspector/inspector.factor | 0 basis/interval-maps/interval-maps-docs.factor | 0 basis/interval-maps/interval-maps-tests.factor | 0 basis/interval-maps/interval-maps.factor | 0 basis/io/buffers/buffers-docs.factor | 0 basis/io/buffers/buffers-tests.factor | 0 basis/io/buffers/buffers.factor | 0 basis/io/encodings/8-bit/8-bit.factor | 0 basis/io/encodings/ascii/ascii.factor | 0 basis/io/encodings/iana/iana.factor | 0 basis/io/encodings/utf16/utf16-tests.factor | 0 basis/io/encodings/utf16/utf16.factor | 0 basis/io/launcher/launcher-docs.factor | 0 basis/io/launcher/launcher-tests.factor | 0 basis/io/launcher/launcher.factor | 0 basis/io/mmap/mmap-docs.factor | 0 basis/io/mmap/mmap-tests.factor | 0 basis/io/mmap/mmap.factor | 0 basis/io/monitors/monitors-docs.factor | 0 basis/io/monitors/monitors-tests.factor | 0 basis/io/monitors/monitors.factor | 0 basis/io/pipes/pipes-tests.factor | 0 basis/io/ports/ports-docs.factor | 0 basis/io/ports/ports.factor | 0 basis/io/servers/connection/connection-docs.factor | 0 basis/io/servers/connection/connection-tests.factor | 0 basis/io/servers/connection/connection.factor | 0 basis/io/sockets/secure/secure-tests.factor | 0 basis/io/sockets/secure/secure.factor | 0 basis/io/sockets/sockets-docs.factor | 0 basis/io/sockets/sockets-tests.factor | 0 basis/io/sockets/sockets.factor | 0 basis/io/streams/duplex/duplex-docs.factor | 0 basis/io/streams/duplex/duplex-tests.factor | 0 basis/io/streams/duplex/duplex.factor | 0 basis/io/streams/null/null.factor | 0 basis/io/thread/thread.factor | 0 basis/io/timeouts/timeouts-docs.factor | 0 basis/io/timeouts/timeouts.factor | 0 basis/io/unix/backend/backend.factor | 0 basis/io/unix/bsd/bsd.factor | 0 basis/io/unix/files/files-tests.factor | 0 basis/io/unix/files/files.factor | 0 basis/io/unix/kqueue/kqueue.factor | 0 basis/io/unix/launcher/launcher-tests.factor | 0 basis/io/unix/launcher/launcher.factor | 0 basis/io/unix/launcher/parser/parser-tests.factor | 0 basis/io/unix/launcher/parser/parser.factor | 0 basis/io/unix/linux/linux.factor | 0 basis/io/unix/mmap/mmap.factor | 0 basis/io/unix/select/select.factor | 0 basis/io/unix/sockets/secure/secure.factor | 0 basis/io/unix/sockets/sockets.factor | 0 basis/io/unix/unix-tests.factor | 0 basis/io/unix/unix.factor | 0 basis/io/windows/files/files.factor | 0 basis/io/windows/files/unique/unique.factor | 0 basis/io/windows/launcher/launcher-tests.factor | 0 basis/io/windows/launcher/launcher.factor | 0 basis/io/windows/mmap/mmap.factor | 0 basis/io/windows/nt/backend/backend.factor | 0 basis/io/windows/nt/files/files-tests.factor | 0 basis/io/windows/nt/files/files.factor | 0 basis/io/windows/nt/launcher/launcher-tests.factor | 0 basis/io/windows/nt/launcher/launcher.factor | 0 basis/io/windows/nt/launcher/test/append.factor | 0 basis/io/windows/nt/launcher/test/env.factor | 0 basis/io/windows/nt/launcher/test/stderr.factor | 0 basis/io/windows/nt/monitors/monitors-tests.factor | 0 basis/io/windows/nt/monitors/monitors.factor | 0 basis/io/windows/nt/nt.factor | 0 basis/io/windows/nt/pipes/pipes.factor | 0 basis/io/windows/nt/privileges/privileges.factor | 0 basis/io/windows/nt/sockets/sockets.factor | 0 basis/io/windows/privileges/privileges.factor | 0 basis/io/windows/sockets/sockets.factor | 0 basis/io/windows/windows.factor | 0 basis/json/reader/reader.factor | 0 basis/lcs/lcs-docs.factor | 0 basis/lcs/lcs-tests.factor | 0 basis/lcs/lcs.factor | 0 basis/libc/libc-tests.factor | 0 basis/libc/libc.factor | 0 basis/listener/listener-docs.factor | 0 basis/listener/listener-tests.factor | 0 basis/listener/listener.factor | 0 basis/locals/locals-tests.factor | 0 basis/locals/locals.factor | 0 basis/logging/analysis/analysis.factor | 0 basis/logging/insomniac/insomniac-docs.factor | 0 basis/logging/insomniac/insomniac.factor | 0 basis/logging/logging-docs.factor | 0 basis/logging/logging.factor | 0 basis/logging/parser/parser.factor | 0 basis/logging/server/server.factor | 0 basis/macros/macros.factor | 0 basis/match/match-tests.factor | 0 basis/match/match.factor | 0 basis/math/bitwise/bitwise-tests.factor | 0 basis/math/complex/complex-docs.factor | 0 basis/math/complex/complex-tests.factor | 0 basis/math/complex/complex.factor | 0 basis/math/constants/constants-docs.factor | 0 basis/math/constants/constants.factor | 0 basis/math/functions/functions-docs.factor | 0 basis/math/functions/functions-tests.factor | 0 basis/math/functions/functions.factor | 0 basis/math/intervals/intervals-tests.factor | 0 basis/math/intervals/intervals.factor | 0 basis/math/libm/libm.factor | 0 basis/math/ranges/ranges.factor | 0 basis/math/ratios/ratios-docs.factor | 0 basis/math/ratios/ratios-tests.factor | 0 basis/math/ratios/ratios.factor | 0 basis/math/vectors/vectors-docs.factor | 0 basis/math/vectors/vectors.factor | 0 basis/memoize/memoize-docs.factor | 0 basis/memoize/memoize.factor | 0 basis/mime-types/mime-types.factor | 0 basis/mirrors/mirrors-docs.factor | 0 basis/mirrors/mirrors-tests.factor | 0 basis/mirrors/mirrors.factor | 0 basis/models/compose/compose-docs.factor | 0 basis/models/compose/compose-tests.factor | 0 basis/models/compose/compose.factor | 0 basis/models/delay/delay-docs.factor | 0 basis/models/delay/delay.factor | 0 basis/models/filter/filter-docs.factor | 0 basis/models/filter/filter-tests.factor | 0 basis/models/filter/filter.factor | 0 basis/models/history/history-docs.factor | 0 basis/models/history/history-tests.factor | 0 basis/models/history/history.factor | 0 basis/models/mapping/mapping-tests.factor | 0 basis/models/mapping/mapping.factor | 0 basis/models/models-docs.factor | 0 basis/models/models-tests.factor | 0 basis/models/models.factor | 0 basis/models/range/range-docs.factor | 0 basis/models/range/range-tests.factor | 0 basis/models/range/range.factor | 0 basis/multiline/multiline-tests.factor | 0 basis/multiline/multiline.factor | 0 basis/opengl/gl/windows/windows.factor | 0 basis/opengl/opengl.factor | 0 basis/openssl/libcrypto/libcrypto.factor | 0 basis/openssl/libssl/libssl.factor | 0 basis/openssl/openssl-tests.factor | 0 basis/openssl/openssl.factor | 0 basis/peg/parsers/parsers-docs.factor | 0 basis/peg/parsers/parsers.factor | 0 basis/peg/peg.factor | 0 basis/peg/search/search-docs.factor | 0 basis/peg/search/search-tests.factor | 0 basis/peg/search/search.factor | 0 basis/prettyprint/backend/backend-docs.factor | 0 basis/prettyprint/backend/backend.factor | 0 basis/prettyprint/prettyprint-docs.factor | 0 basis/prettyprint/prettyprint-tests.factor | 0 basis/prettyprint/prettyprint.factor | 0 basis/prettyprint/sections/sections-docs.factor | 0 basis/qualified/qualified-docs.factor | 0 basis/random/dummy/dummy.factor | 0 basis/random/mersenne-twister/mersenne-twister-tests.factor | 0 basis/random/mersenne-twister/mersenne-twister.factor | 0 basis/random/random.factor | 0 basis/sequences/deep/deep-tests.factor | 0 basis/sequences/next/next.factor | 0 basis/serialize/serialize-docs.factor | 0 basis/serialize/serialize-tests.factor | 0 basis/serialize/serialize.factor | 0 basis/shuffle/shuffle-tests.factor | 0 basis/smtp/server/server.factor | 0 basis/smtp/smtp-tests.factor | 0 basis/smtp/smtp.factor | 0 basis/stack-checker/backend/backend.factor | 0 basis/stack-checker/known-words/known-words.factor | 0 basis/stack-checker/stack-checker-docs.factor | 0 basis/stack-checker/stack-checker-tests.factor | 0 basis/stack-checker/stack-checker.factor | 0 basis/stack-checker/state/state.factor | 0 basis/stack-checker/transforms/transforms-docs.factor | 0 basis/stack-checker/transforms/transforms-tests.factor | 0 basis/stack-checker/transforms/transforms.factor | 0 basis/state-parser/state-parser-tests.factor | 0 basis/symbols/symbols-tests.factor | 0 basis/symbols/symbols.factor | 0 basis/syndication/syndication-tests.factor | 0 basis/threads/threads-docs.factor | 0 basis/threads/threads-tests.factor | 0 basis/threads/threads.factor | 0 basis/tools/annotations/annotations-docs.factor | 0 basis/tools/annotations/annotations-tests.factor | 0 basis/tools/annotations/annotations.factor | 0 basis/tools/completion/completion.factor | 0 basis/tools/crossref/crossref-tests.factor | 0 basis/tools/crossref/crossref.factor | 0 basis/tools/crossref/test/foo.factor | 0 basis/tools/deploy/backend/backend.factor | 0 basis/tools/deploy/config/config-docs.factor | 0 basis/tools/deploy/config/config.factor | 0 basis/tools/deploy/deploy-docs.factor | 0 basis/tools/deploy/deploy-tests.factor | 0 basis/tools/deploy/deploy.factor | 0 basis/tools/deploy/macosx/macosx.factor | 0 basis/tools/deploy/shaker/shaker.factor | 0 basis/tools/deploy/shaker/strip-cocoa.factor | 0 basis/tools/deploy/shaker/strip-debugger.factor | 0 basis/tools/deploy/shaker/strip-libc.factor | 0 basis/tools/deploy/test/1/1.factor | 0 basis/tools/deploy/test/1/deploy.factor | 0 basis/tools/deploy/test/2/2.factor | 0 basis/tools/deploy/test/2/deploy.factor | 0 basis/tools/deploy/test/3/3.factor | 0 basis/tools/deploy/test/3/deploy.factor | 0 basis/tools/deploy/windows/windows-tests.factor | 0 basis/tools/deploy/windows/windows.factor | 0 basis/tools/disassembler/disassembler-docs.factor | 0 basis/tools/disassembler/disassembler-tests.factor | 0 basis/tools/disassembler/disassembler.factor | 0 basis/tools/memory/memory-docs.factor | 0 basis/tools/memory/memory.factor | 0 basis/tools/profiler/profiler-docs.factor | 0 basis/tools/profiler/profiler-tests.factor | 0 basis/tools/profiler/profiler.factor | 0 basis/tools/test/test-docs.factor | 0 basis/tools/test/test.factor | 0 basis/tools/test/ui/ui.factor | 0 basis/tools/threads/threads.factor | 0 basis/tools/time/time-docs.factor | 0 basis/tools/vocabs/browser/browser-docs.factor | 0 basis/tools/vocabs/browser/browser-tests.factor | 0 basis/tools/vocabs/browser/browser.factor | 0 basis/tools/vocabs/monitor/monitor.factor | 0 basis/tools/vocabs/vocabs-docs.factor | 0 basis/tools/vocabs/vocabs.factor | 0 basis/tools/walker/debug/debug.factor | 0 basis/tools/walker/walker-tests.factor | 0 basis/tools/walker/walker.factor | 0 basis/tuple-arrays/tuple-arrays-tests.factor | 0 basis/ui/backend/backend.factor | 0 basis/ui/cocoa/cocoa.factor | 0 basis/ui/cocoa/tools/tools.factor | 0 basis/ui/cocoa/views/views.factor | 0 basis/ui/commands/commands.factor | 0 basis/ui/freetype/freetype-docs.factor | 0 basis/ui/freetype/freetype.factor | 0 basis/ui/gadgets/books/books-docs.factor | 0 basis/ui/gadgets/books/books-tests.factor | 0 basis/ui/gadgets/books/books.factor | 0 basis/ui/gadgets/buttons/buttons-docs.factor | 0 basis/ui/gadgets/buttons/buttons-tests.factor | 0 basis/ui/gadgets/buttons/buttons.factor | 0 basis/ui/gadgets/canvas/canvas-tests.factor | 0 basis/ui/gadgets/canvas/canvas.factor | 0 basis/ui/gadgets/editors/editors-docs.factor | 0 basis/ui/gadgets/editors/editors-tests.factor | 0 basis/ui/gadgets/editors/editors.factor | 0 basis/ui/gadgets/frames/frames-docs.factor | 0 basis/ui/gadgets/gadgets-docs.factor | 0 basis/ui/gadgets/gadgets-tests.factor | 0 basis/ui/gadgets/gadgets.factor | 0 basis/ui/gadgets/grid-lines/grid-lines-docs.factor | 0 basis/ui/gadgets/grid-lines/grid-lines.factor | 0 basis/ui/gadgets/grids/grids-docs.factor | 0 basis/ui/gadgets/incremental/incremental-docs.factor | 0 basis/ui/gadgets/incremental/incremental.factor | 0 basis/ui/gadgets/labelled/labelled-docs.factor | 0 basis/ui/gadgets/labelled/labelled.factor | 0 basis/ui/gadgets/labels/labels-docs.factor | 0 basis/ui/gadgets/labels/labels.factor | 0 basis/ui/gadgets/lists/lists-docs.factor | 0 basis/ui/gadgets/lists/lists.factor | 0 basis/ui/gadgets/menus/menus-docs.factor | 0 basis/ui/gadgets/packs/packs-docs.factor | 0 basis/ui/gadgets/packs/packs.factor | 0 basis/ui/gadgets/panes/panes-docs.factor | 0 basis/ui/gadgets/panes/panes-tests.factor | 0 basis/ui/gadgets/panes/panes.factor | 0 basis/ui/gadgets/presentations/presentations-docs.factor | 0 basis/ui/gadgets/scrollers/scrollers-docs.factor | 0 basis/ui/gadgets/scrollers/scrollers-tests.factor | 0 basis/ui/gadgets/scrollers/scrollers.factor | 0 basis/ui/gadgets/sliders/sliders-docs.factor | 0 basis/ui/gadgets/sliders/sliders.factor | 0 basis/ui/gadgets/slots/slots.factor | 0 basis/ui/gadgets/status-bar/status-bar-docs.factor | 0 basis/ui/gadgets/status-bar/status-bar.factor | 0 basis/ui/gadgets/tracks/tracks-docs.factor | 0 basis/ui/gadgets/viewports/viewports-docs.factor | 0 basis/ui/gadgets/viewports/viewports.factor | 0 basis/ui/gadgets/worlds/worlds-docs.factor | 0 basis/ui/gadgets/worlds/worlds.factor | 0 basis/ui/gestures/gestures.factor | 0 basis/ui/operations/operations-tests.factor | 0 basis/ui/operations/operations.factor | 0 basis/ui/render/render-docs.factor | 0 basis/ui/tools/browser/browser-tests.factor | 0 basis/ui/tools/browser/browser.factor | 0 basis/ui/tools/debugger/debugger-docs.factor | 0 basis/ui/tools/deploy/deploy-docs.factor | 0 basis/ui/tools/deploy/deploy.factor | 0 basis/ui/tools/interactor/interactor-docs.factor | 0 basis/ui/tools/interactor/interactor-tests.factor | 0 basis/ui/tools/interactor/interactor.factor | 0 basis/ui/tools/listener/listener-tests.factor | 0 basis/ui/tools/listener/listener.factor | 0 basis/ui/tools/operations/operations.factor | 0 basis/ui/tools/profiler/profiler.factor | 0 basis/ui/tools/search/search-tests.factor | 0 basis/ui/tools/search/search.factor | 0 basis/ui/tools/tools-docs.factor | 0 basis/ui/tools/tools-tests.factor | 0 basis/ui/tools/tools.factor | 0 basis/ui/tools/traceback/traceback.factor | 0 basis/ui/tools/walker/walker-docs.factor | 0 basis/ui/tools/walker/walker-tests.factor | 0 basis/ui/tools/walker/walker.factor | 0 basis/ui/tools/workspace/workspace-tests.factor | 0 basis/ui/tools/workspace/workspace.factor | 0 basis/ui/traverse/traverse-tests.factor | 0 basis/ui/ui-docs.factor | 0 basis/ui/ui.factor | 0 basis/ui/windows/windows.factor | 0 basis/ui/x11/x11.factor | 0 basis/unicode/breaks/breaks-tests.factor | 0 basis/unicode/breaks/breaks.factor | 0 basis/unicode/case/case-tests.factor | 0 basis/unicode/case/case.factor | 0 basis/unicode/collation/collation-tests.factor | 0 basis/unicode/collation/collation.factor | 0 basis/unicode/data/data.factor | 0 basis/unicode/normalize/normalize-tests.factor | 0 basis/unicode/normalize/normalize.factor | 0 basis/unicode/script/script-docs.factor | 0 basis/unicode/script/script-tests.factor | 0 basis/unicode/script/script.factor | 0 basis/unicode/syntax/syntax.factor | 0 basis/unix/bsd/bsd.factor | 0 basis/unix/linux/ifreq/ifreq.factor | 0 basis/unix/linux/linux.factor | 0 basis/unix/process/process.factor | 0 basis/unix/types/freebsd/freebsd.factor | 0 basis/unix/types/netbsd/32/32.factor | 0 basis/unix/types/netbsd/64/64.factor | 0 basis/unix/types/netbsd/netbsd.factor | 0 basis/unix/types/openbsd/openbsd.factor | 0 basis/unix/unix.factor | 0 basis/values/values-docs.factor | 0 basis/values/values-tests.factor | 0 basis/values/values.factor | 0 basis/windows/advapi32/advapi32.factor | 0 basis/windows/com/com-tests.factor | 0 basis/windows/com/com.factor | 0 basis/windows/com/syntax/syntax-docs.factor | 0 basis/windows/com/syntax/syntax.factor | 0 basis/windows/com/wrapper/wrapper-docs.factor | 0 basis/windows/com/wrapper/wrapper.factor | 0 basis/windows/dinput/constants/constants.factor | 0 basis/windows/dinput/dinput.factor | 0 basis/windows/gdi32/gdi32.factor | 0 basis/windows/kernel32/kernel32.factor | 0 basis/windows/messages/messages.factor | 0 basis/windows/ole32/ole32.factor | 0 basis/windows/opengl32/opengl32.factor | 0 basis/windows/user32/user32.factor | 0 basis/windows/winsock/winsock.factor | 0 basis/x11/clipboard/clipboard.factor | 0 basis/x11/windows/windows.factor | 0 basis/x11/xim/xim.factor | 0 basis/x11/xlib/xlib.factor | 0 basis/xml-rpc/xml-rpc.factor | 0 basis/xml/char-classes/char-classes.factor | 0 basis/xml/data/data.factor | 0 basis/xml/errors/errors-tests.factor | 0 basis/xml/tests/soap.factor | 0 basis/xml/utilities/utilities.factor | 0 basis/xmode/catalog/catalog.factor | 0 basis/xmode/code2html/code2html.factor | 0 basis/xmode/code2html/responder/responder.factor | 0 basis/xmode/loader/loader.factor | 0 basis/xmode/marker/marker-tests.factor | 0 basis/xmode/marker/marker.factor | 0 basis/xmode/marker/state/state.factor | 0 basis/xmode/rules/rules.factor | 0 basis/xmode/tokens/tokens.factor | 0 basis/xmode/utilities/utilities-tests.factor | 0 core/alien/alien-docs.factor | 0 core/alien/alien-tests.factor | 0 core/alien/alien.factor | 0 core/arrays/arrays-docs.factor | 0 core/arrays/arrays-tests.factor | 0 core/arrays/arrays.factor | 0 core/assocs/assocs-docs.factor | 0 core/assocs/assocs-tests.factor | 0 core/assocs/assocs.factor | 0 core/bootstrap/layouts/layouts.factor | 0 core/bootstrap/primitives.factor | 0 core/bootstrap/stage1.factor | 0 core/bootstrap/syntax.factor | 0 core/byte-arrays/byte-arrays-docs.factor | 0 core/byte-arrays/byte-arrays-tests.factor | 0 core/byte-arrays/byte-arrays.factor | 0 core/byte-vectors/byte-vectors-docs.factor | 0 core/byte-vectors/byte-vectors-tests.factor | 0 core/byte-vectors/byte-vectors.factor | 0 core/checksums/crc32/crc32.factor | 0 core/classes/algebra/algebra-docs.factor | 0 core/classes/algebra/algebra-tests.factor | 0 core/classes/algebra/algebra.factor | 0 core/classes/classes-docs.factor | 0 core/classes/classes-tests.factor | 0 core/classes/classes.factor | 0 core/classes/mixin/mixin-docs.factor | 0 core/classes/mixin/mixin.factor | 0 core/classes/predicate/predicate-docs.factor | 0 core/classes/predicate/predicate.factor | 0 core/classes/singleton/singleton.factor | 0 core/classes/tuple/tuple-docs.factor | 0 core/classes/tuple/tuple-tests.factor | 0 core/classes/tuple/tuple.factor | 0 core/classes/union/union-docs.factor | 0 core/classes/union/union.factor | 0 core/combinators/combinators-docs.factor | 0 core/combinators/combinators-tests.factor | 0 core/combinators/combinators.factor | 0 core/compiler/errors/errors-docs.factor | 0 core/compiler/errors/errors.factor | 0 core/compiler/units/units-docs.factor | 0 core/compiler/units/units.factor | 0 core/continuations/continuations-docs.factor | 0 core/continuations/continuations-tests.factor | 0 core/continuations/continuations.factor | 0 core/definitions/definitions-docs.factor | 0 core/definitions/definitions-tests.factor | 0 core/definitions/definitions.factor | 0 core/destructors/destructors-docs.factor | 0 core/destructors/destructors-tests.factor | 0 core/destructors/destructors.factor | 0 core/effects/effects.factor | 0 core/generic/generic-docs.factor | 0 core/generic/generic-tests.factor | 0 core/generic/generic.factor | 0 core/generic/math/math-docs.factor | 0 core/generic/math/math.factor | 0 core/growable/growable-docs.factor | 0 core/growable/growable-tests.factor | 0 core/hashtables/hashtables-docs.factor | 0 core/hashtables/hashtables-tests.factor | 0 core/hashtables/hashtables.factor | 0 core/init/init.factor | 0 core/io/backend/backend-tests.factor | 0 core/io/backend/backend.factor | 0 core/io/binary/binary-tests.factor | 0 core/io/binary/binary.factor | 0 core/io/encodings/binary/binary.factor | 0 core/io/encodings/encodings-tests.factor | 0 core/io/encodings/encodings.factor | 0 core/io/encodings/utf8/utf8-docs.factor | 0 core/io/encodings/utf8/utf8-tests.factor | 0 core/io/encodings/utf8/utf8.factor | 0 core/io/files/files-docs.factor | 0 core/io/files/files-tests.factor | 0 core/io/files/files.factor | 0 core/io/io-docs.factor | 0 core/io/io-tests.factor | 0 core/io/io.factor | 0 core/io/streams/c/c-docs.factor | 0 core/io/streams/c/c-tests.factor | 0 core/io/streams/c/c.factor | 0 core/io/streams/nested/nested.factor | 0 core/io/streams/string/string.factor | 0 core/kernel/kernel-docs.factor | 0 core/kernel/kernel-tests.factor | 0 core/kernel/kernel.factor | 0 core/layouts/layouts-docs.factor | 0 core/layouts/layouts-tests.factor | 0 core/layouts/layouts.factor | 0 core/math/floats/floats-tests.factor | 0 core/math/floats/floats.factor | 0 core/math/integers/integers-docs.factor | 0 core/math/integers/integers-tests.factor | 0 core/math/integers/integers.factor | 0 core/math/math-docs.factor | 0 core/math/math.factor | 0 core/math/parser/parser-tests.factor | 0 core/math/parser/parser.factor | 0 core/memory/memory-docs.factor | 0 core/memory/memory-tests.factor | 0 core/namespaces/namespaces-docs.factor | 0 core/parser/parser-docs.factor | 0 core/parser/parser-tests.factor | 0 core/parser/parser.factor | 0 core/parser/test/assert-depth.factor | 0 core/quotations/quotations-docs.factor | 0 core/quotations/quotations-tests.factor | 0 core/quotations/quotations.factor | 0 core/sbufs/sbufs.factor | 0 core/sequences/sequences-docs.factor | 0 core/sequences/sequences-tests.factor | 0 core/sequences/sequences.factor | 0 core/slots/slots-docs.factor | 0 core/slots/slots.factor | 0 core/sorting/sorting-tests.factor | 0 core/sorting/sorting.factor | 0 core/source-files/source-files-docs.factor | 0 core/source-files/source-files.factor | 0 core/splitting/splitting.factor | 0 core/strings/strings-docs.factor | 0 core/strings/strings-tests.factor | 0 core/strings/strings.factor | 0 core/syntax/syntax-docs.factor | 0 core/syntax/syntax.factor | 0 core/system/system-docs.factor | 0 core/system/system-tests.factor | 0 core/system/system.factor | 0 core/vectors/vectors-docs.factor | 0 core/vectors/vectors-tests.factor | 0 core/vectors/vectors.factor | 0 core/vocabs/loader/loader-docs.factor | 0 core/vocabs/loader/loader-tests.factor | 0 core/vocabs/loader/loader.factor | 0 core/vocabs/loader/test/a/a.factor | 0 core/vocabs/loader/test/b/b.factor | 0 core/vocabs/vocabs-docs.factor | 0 core/vocabs/vocabs.factor | 0 core/words/words-docs.factor | 0 core/words/words-tests.factor | 0 core/words/words.factor | 0 761 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 basis/alarms/alarms-docs.factor mode change 100755 => 100644 basis/alarms/alarms-tests.factor mode change 100755 => 100644 basis/alarms/alarms.factor mode change 100755 => 100644 basis/alias/alias.factor mode change 100755 => 100644 basis/alien/arrays/arrays-docs.factor mode change 100755 => 100644 basis/alien/c-types/c-types-docs.factor mode change 100755 => 100644 basis/alien/c-types/c-types-tests.factor mode change 100755 => 100644 basis/alien/c-types/c-types.factor mode change 100755 => 100644 basis/alien/remote-control/remote-control.factor mode change 100755 => 100644 basis/alien/strings/strings.factor mode change 100755 => 100644 basis/alien/structs/structs-docs.factor mode change 100755 => 100644 basis/alien/structs/structs.factor mode change 100755 => 100644 basis/alien/syntax/syntax-docs.factor mode change 100755 => 100644 basis/alien/syntax/syntax.factor mode change 100755 => 100644 basis/ascii/ascii-docs.factor mode change 100755 => 100644 basis/ascii/ascii.factor mode change 100755 => 100644 basis/bit-arrays/bit-arrays-tests.factor mode change 100755 => 100644 basis/bit-arrays/bit-arrays.factor mode change 100755 => 100644 basis/bit-vectors/bit-vectors-docs.factor mode change 100755 => 100644 basis/bit-vectors/bit-vectors-tests.factor mode change 100755 => 100644 basis/bit-vectors/bit-vectors.factor mode change 100755 => 100644 basis/bootstrap/compiler/compiler.factor mode change 100755 => 100644 basis/bootstrap/handbook/handbook.factor mode change 100755 => 100644 basis/bootstrap/help/help.factor mode change 100755 => 100644 basis/bootstrap/image/image-tests.factor mode change 100755 => 100644 basis/bootstrap/image/image.factor mode change 100755 => 100644 basis/bootstrap/image/upload/upload.factor mode change 100755 => 100644 basis/bootstrap/io/io.factor mode change 100755 => 100644 basis/bootstrap/random/random.factor mode change 100755 => 100644 basis/bootstrap/stage2.factor mode change 100755 => 100644 basis/bootstrap/tools/tools.factor mode change 100755 => 100644 basis/bootstrap/ui/tools/tools.factor mode change 100755 => 100644 basis/bootstrap/unicode/unicode.factor mode change 100755 => 100644 basis/boxes/boxes-docs.factor mode change 100755 => 100644 basis/boxes/boxes-tests.factor mode change 100755 => 100644 basis/boxes/boxes.factor mode change 100755 => 100644 basis/calendar/calendar-tests.factor mode change 100755 => 100644 basis/calendar/calendar.factor mode change 100755 => 100644 basis/calendar/format/format-tests.factor mode change 100755 => 100644 basis/calendar/format/format.factor mode change 100755 => 100644 basis/calendar/model/model.factor mode change 100755 => 100644 basis/calendar/windows/windows.factor mode change 100755 => 100644 basis/channels/channels-tests.factor mode change 100755 => 100644 basis/channels/channels.factor mode change 100755 => 100644 basis/channels/examples/examples.factor mode change 100755 => 100644 basis/channels/remote/remote.factor mode change 100755 => 100644 basis/checksums/adler-32/adler-32-docs.factor mode change 100755 => 100644 basis/checksums/md5/md5-docs.factor mode change 100755 => 100644 basis/checksums/md5/md5-tests.factor mode change 100755 => 100644 basis/checksums/md5/md5.factor mode change 100755 => 100644 basis/checksums/sha1/sha1-tests.factor mode change 100755 => 100644 basis/checksums/sha1/sha1.factor mode change 100755 => 100644 basis/checksums/sha2/sha2-tests.factor mode change 100755 => 100644 basis/checksums/sha2/sha2.factor mode change 100755 => 100644 basis/circular/circular-tests.factor mode change 100755 => 100644 basis/circular/circular.factor mode change 100755 => 100644 basis/cocoa/application/application.factor mode change 100755 => 100644 basis/cocoa/cocoa.factor mode change 100755 => 100644 basis/cocoa/messages/messages.factor mode change 100755 => 100644 basis/cocoa/pasteboard/pasteboard.factor mode change 100755 => 100644 basis/cocoa/subclassing/subclassing.factor mode change 100755 => 100644 basis/cocoa/windows/windows.factor mode change 100755 => 100644 basis/combinators/short-circuit/short-circuit.factor mode change 100755 => 100644 basis/compiler/compiler-docs.factor mode change 100755 => 100644 basis/compiler/compiler.factor mode change 100755 => 100644 basis/compiler/constants/constants.factor mode change 100755 => 100644 basis/compiler/generator/fixup/fixup.factor mode change 100755 => 100644 basis/compiler/generator/generator-docs.factor mode change 100755 => 100644 basis/compiler/generator/generator.factor mode change 100755 => 100644 basis/compiler/generator/registers/registers.factor mode change 100755 => 100644 basis/compiler/tests/alien.factor mode change 100755 => 100644 basis/compiler/tests/curry.factor mode change 100755 => 100644 basis/compiler/tests/float.factor mode change 100755 => 100644 basis/compiler/tests/intrinsics.factor mode change 100755 => 100644 basis/compiler/tests/optimizer.factor mode change 100755 => 100644 basis/compiler/tests/simple.factor mode change 100755 => 100644 basis/compiler/tests/stack-trace.factor mode change 100755 => 100644 basis/compiler/tests/templates-early.factor mode change 100755 => 100644 basis/compiler/tests/templates.factor mode change 100755 => 100644 basis/compiler/tests/tuples.factor mode change 100755 => 100644 basis/compiler/tree/dead-code/simple/simple.factor mode change 100755 => 100644 basis/compiler/tree/def-use/def-use-tests.factor mode change 100755 => 100644 basis/compiler/tree/def-use/def-use.factor mode change 100755 => 100644 basis/compiler/tree/propagation/propagation.factor mode change 100755 => 100644 basis/compiler/tree/tree.factor mode change 100755 => 100644 basis/concurrency/combinators/combinators-docs.factor mode change 100755 => 100644 basis/concurrency/combinators/combinators-tests.factor mode change 100755 => 100644 basis/concurrency/combinators/combinators.factor mode change 100755 => 100644 basis/concurrency/conditions/conditions.factor mode change 100755 => 100644 basis/concurrency/count-downs/count-downs-docs.factor mode change 100755 => 100644 basis/concurrency/count-downs/count-downs-tests.factor mode change 100755 => 100644 basis/concurrency/count-downs/count-downs.factor mode change 100755 => 100644 basis/concurrency/distributed/distributed-docs.factor mode change 100755 => 100644 basis/concurrency/distributed/distributed-tests.factor mode change 100755 => 100644 basis/concurrency/distributed/distributed.factor mode change 100755 => 100644 basis/concurrency/exchangers/exchangers-docs.factor mode change 100755 => 100644 basis/concurrency/exchangers/exchangers-tests.factor mode change 100755 => 100644 basis/concurrency/exchangers/exchangers.factor mode change 100755 => 100644 basis/concurrency/flags/flags-tests.factor mode change 100755 => 100644 basis/concurrency/flags/flags.factor mode change 100755 => 100644 basis/concurrency/futures/futures-docs.factor mode change 100755 => 100644 basis/concurrency/futures/futures-tests.factor mode change 100755 => 100644 basis/concurrency/futures/futures.factor mode change 100755 => 100644 basis/concurrency/locks/locks-docs.factor mode change 100755 => 100644 basis/concurrency/locks/locks-tests.factor mode change 100755 => 100644 basis/concurrency/locks/locks.factor mode change 100755 => 100644 basis/concurrency/mailboxes/mailboxes-docs.factor mode change 100755 => 100644 basis/concurrency/mailboxes/mailboxes-tests.factor mode change 100755 => 100644 basis/concurrency/mailboxes/mailboxes.factor mode change 100755 => 100644 basis/concurrency/messaging/messaging-docs.factor mode change 100755 => 100644 basis/concurrency/messaging/messaging-tests.factor mode change 100755 => 100644 basis/concurrency/messaging/messaging.factor mode change 100755 => 100644 basis/concurrency/promises/promises-docs.factor mode change 100755 => 100644 basis/concurrency/promises/promises-tests.factor mode change 100755 => 100644 basis/concurrency/promises/promises.factor mode change 100755 => 100644 basis/concurrency/semaphores/semaphores-docs.factor mode change 100755 => 100644 basis/concurrency/semaphores/semaphores.factor mode change 100755 => 100644 basis/cpu/architecture/architecture.factor mode change 100755 => 100644 basis/cpu/ppc/allot/allot.factor mode change 100755 => 100644 basis/cpu/ppc/architecture/architecture.factor mode change 100755 => 100644 basis/cpu/ppc/assembler/assembler.factor mode change 100755 => 100644 basis/cpu/ppc/bootstrap.factor mode change 100755 => 100644 basis/cpu/ppc/intrinsics/intrinsics.factor mode change 100755 => 100644 basis/cpu/ppc/linux/bootstrap.factor mode change 100755 => 100644 basis/cpu/ppc/macosx/bootstrap.factor mode change 100755 => 100644 basis/cpu/ppc/ppc.factor mode change 100755 => 100644 basis/cpu/x86/32/32.factor mode change 100755 => 100644 basis/cpu/x86/32/bootstrap.factor mode change 100755 => 100644 basis/cpu/x86/64/64.factor mode change 100755 => 100644 basis/cpu/x86/64/bootstrap.factor mode change 100755 => 100644 basis/cpu/x86/allot/allot.factor mode change 100755 => 100644 basis/cpu/x86/architecture/architecture.factor mode change 100755 => 100644 basis/cpu/x86/assembler/assembler.factor mode change 100755 => 100644 basis/cpu/x86/bootstrap.factor mode change 100755 => 100644 basis/cpu/x86/intrinsics/intrinsics.factor mode change 100755 => 100644 basis/cpu/x86/sse2/sse2.factor mode change 100755 => 100644 basis/db/db-tests.factor mode change 100755 => 100644 basis/db/db.factor mode change 100755 => 100644 basis/db/postgresql/ffi/ffi.factor mode change 100755 => 100644 basis/db/postgresql/lib/lib.factor mode change 100755 => 100644 basis/db/postgresql/postgresql-tests.factor mode change 100755 => 100644 basis/db/postgresql/postgresql.factor mode change 100755 => 100644 basis/db/sqlite/ffi/ffi.factor mode change 100755 => 100644 basis/db/sqlite/lib/lib.factor mode change 100755 => 100644 basis/db/sqlite/sqlite-tests.factor mode change 100755 => 100644 basis/db/sqlite/sqlite.factor mode change 100755 => 100644 basis/db/tuples/tuples-tests.factor mode change 100755 => 100644 basis/db/tuples/tuples.factor mode change 100755 => 100644 basis/db/types/types.factor mode change 100755 => 100644 basis/debugger/debugger-docs.factor mode change 100755 => 100644 basis/debugger/debugger-tests.factor mode change 100755 => 100644 basis/debugger/debugger.factor mode change 100755 => 100644 basis/delegate/delegate-tests.factor mode change 100755 => 100644 basis/delegate/delegate.factor mode change 100755 => 100644 basis/delegate/protocols/protocols.factor mode change 100755 => 100644 basis/dlists/dlists-docs.factor mode change 100755 => 100644 basis/dlists/dlists-tests.factor mode change 100755 => 100644 basis/dlists/dlists.factor mode change 100755 => 100644 basis/documents/documents.factor mode change 100755 => 100644 basis/editors/editors.factor mode change 100755 => 100644 basis/editors/editpadpro/editpadpro.factor mode change 100755 => 100644 basis/editors/editplus/editplus.factor mode change 100755 => 100644 basis/editors/emacs/emacs.factor mode change 100755 => 100644 basis/editors/emeditor/emeditor.factor mode change 100755 => 100644 basis/editors/gvim/gvim.factor mode change 100755 => 100644 basis/editors/gvim/windows/windows.factor mode change 100755 => 100644 basis/editors/jedit/jedit.factor mode change 100755 => 100644 basis/editors/macvim/macvim.factor mode change 100755 => 100644 basis/editors/notepadpp/notepadpp.factor mode change 100755 => 100644 basis/editors/scite/scite.factor mode change 100755 => 100644 basis/editors/ted-notepad/ted-notepad.factor mode change 100755 => 100644 basis/editors/textedit/textedit.factor mode change 100755 => 100644 basis/editors/textmate/textmate.factor mode change 100755 => 100644 basis/editors/ultraedit/ultraedit.factor mode change 100755 => 100644 basis/editors/vim/vim.factor mode change 100755 => 100644 basis/editors/wordpad/wordpad.factor mode change 100755 => 100644 basis/float-arrays/float-arrays-tests.factor mode change 100755 => 100644 basis/float-arrays/float-arrays.factor mode change 100755 => 100644 basis/float-vectors/float-vectors-docs.factor mode change 100755 => 100644 basis/float-vectors/float-vectors-tests.factor mode change 100755 => 100644 basis/float-vectors/float-vectors.factor mode change 100755 => 100644 basis/freetype/freetype.factor mode change 100755 => 100644 basis/fry/fry-docs.factor mode change 100755 => 100644 basis/fry/fry-tests.factor mode change 100755 => 100644 basis/fry/fry.factor mode change 100755 => 100644 basis/furnace/actions/actions-tests.factor mode change 100755 => 100644 basis/furnace/actions/actions.factor mode change 100755 => 100644 basis/furnace/auth/auth.factor mode change 100755 => 100644 basis/furnace/auth/basic/basic.factor mode change 100755 => 100644 basis/furnace/auth/login/login-tests.factor mode change 100755 => 100644 basis/furnace/auth/login/login.factor mode change 100755 => 100644 basis/furnace/auth/providers/assoc/assoc-tests.factor mode change 100755 => 100644 basis/furnace/auth/providers/assoc/assoc.factor mode change 100755 => 100644 basis/furnace/auth/providers/db/db-tests.factor mode change 100755 => 100644 basis/furnace/auth/providers/db/db.factor mode change 100755 => 100644 basis/furnace/auth/providers/null/null.factor mode change 100755 => 100644 basis/furnace/auth/providers/providers.factor mode change 100755 => 100644 basis/furnace/db/db.factor mode change 100755 => 100644 basis/furnace/sessions/sessions-tests.factor mode change 100755 => 100644 basis/furnace/sessions/sessions.factor mode change 100755 => 100644 basis/generalizations/generalizations-docs.factor mode change 100755 => 100644 basis/generalizations/generalizations-tests.factor mode change 100755 => 100644 basis/generalizations/generalizations.factor mode change 100755 => 100644 basis/globs/globs.factor mode change 100755 => 100644 basis/hash2/hash2-tests.factor mode change 100755 => 100644 basis/heaps/heaps-docs.factor mode change 100755 => 100644 basis/heaps/heaps-tests.factor mode change 100755 => 100644 basis/heaps/heaps.factor mode change 100755 => 100644 basis/help/cookbook/cookbook.factor mode change 100755 => 100644 basis/help/crossref/crossref-tests.factor mode change 100755 => 100644 basis/help/definitions/definitions-tests.factor mode change 100755 => 100644 basis/help/definitions/definitions.factor mode change 100755 => 100644 basis/help/handbook/handbook.factor mode change 100755 => 100644 basis/help/help-docs.factor mode change 100755 => 100644 basis/help/help.factor mode change 100755 => 100644 basis/help/lint/lint.factor mode change 100755 => 100644 basis/help/markup/markup.factor mode change 100755 => 100644 basis/help/stylesheet/stylesheet.factor mode change 100755 => 100644 basis/help/syntax/syntax-tests.factor mode change 100755 => 100644 basis/help/syntax/syntax.factor mode change 100755 => 100644 basis/help/topics/topics.factor mode change 100755 => 100644 basis/help/tutorial/tutorial.factor mode change 100755 => 100644 basis/html/streams/streams.factor mode change 100755 => 100644 basis/html/templates/fhtml/fhtml-tests.factor mode change 100755 => 100644 basis/html/templates/fhtml/fhtml.factor mode change 100755 => 100644 basis/http/client/client-tests.factor mode change 100755 => 100644 basis/http/client/client.factor mode change 100755 => 100644 basis/http/http-tests.factor mode change 100755 => 100644 basis/http/http.factor mode change 100755 => 100644 basis/http/server/cgi/cgi.factor mode change 100755 => 100644 basis/http/server/server.factor mode change 100755 => 100644 basis/http/server/static/static.factor mode change 100755 => 100644 basis/inspector/inspector.factor mode change 100755 => 100644 basis/interval-maps/interval-maps-docs.factor mode change 100755 => 100644 basis/interval-maps/interval-maps-tests.factor mode change 100755 => 100644 basis/interval-maps/interval-maps.factor mode change 100755 => 100644 basis/io/buffers/buffers-docs.factor mode change 100755 => 100644 basis/io/buffers/buffers-tests.factor mode change 100755 => 100644 basis/io/buffers/buffers.factor mode change 100755 => 100644 basis/io/encodings/8-bit/8-bit.factor mode change 100755 => 100644 basis/io/encodings/ascii/ascii.factor mode change 100755 => 100644 basis/io/encodings/iana/iana.factor mode change 100755 => 100644 basis/io/encodings/utf16/utf16-tests.factor mode change 100755 => 100644 basis/io/encodings/utf16/utf16.factor mode change 100755 => 100644 basis/io/launcher/launcher-docs.factor mode change 100755 => 100644 basis/io/launcher/launcher-tests.factor mode change 100755 => 100644 basis/io/launcher/launcher.factor mode change 100755 => 100644 basis/io/mmap/mmap-docs.factor mode change 100755 => 100644 basis/io/mmap/mmap-tests.factor mode change 100755 => 100644 basis/io/mmap/mmap.factor mode change 100755 => 100644 basis/io/monitors/monitors-docs.factor mode change 100755 => 100644 basis/io/monitors/monitors-tests.factor mode change 100755 => 100644 basis/io/monitors/monitors.factor mode change 100755 => 100644 basis/io/pipes/pipes-tests.factor mode change 100755 => 100644 basis/io/ports/ports-docs.factor mode change 100755 => 100644 basis/io/ports/ports.factor mode change 100755 => 100644 basis/io/servers/connection/connection-docs.factor mode change 100755 => 100644 basis/io/servers/connection/connection-tests.factor mode change 100755 => 100644 basis/io/servers/connection/connection.factor mode change 100755 => 100644 basis/io/sockets/secure/secure-tests.factor mode change 100755 => 100644 basis/io/sockets/secure/secure.factor mode change 100755 => 100644 basis/io/sockets/sockets-docs.factor mode change 100755 => 100644 basis/io/sockets/sockets-tests.factor mode change 100755 => 100644 basis/io/sockets/sockets.factor mode change 100755 => 100644 basis/io/streams/duplex/duplex-docs.factor mode change 100755 => 100644 basis/io/streams/duplex/duplex-tests.factor mode change 100755 => 100644 basis/io/streams/duplex/duplex.factor mode change 100755 => 100644 basis/io/streams/null/null.factor mode change 100755 => 100644 basis/io/thread/thread.factor mode change 100755 => 100644 basis/io/timeouts/timeouts-docs.factor mode change 100755 => 100644 basis/io/timeouts/timeouts.factor mode change 100755 => 100644 basis/io/unix/backend/backend.factor mode change 100755 => 100644 basis/io/unix/bsd/bsd.factor mode change 100755 => 100644 basis/io/unix/files/files-tests.factor mode change 100755 => 100644 basis/io/unix/files/files.factor mode change 100755 => 100644 basis/io/unix/kqueue/kqueue.factor mode change 100755 => 100644 basis/io/unix/launcher/launcher-tests.factor mode change 100755 => 100644 basis/io/unix/launcher/launcher.factor mode change 100755 => 100644 basis/io/unix/launcher/parser/parser-tests.factor mode change 100755 => 100644 basis/io/unix/launcher/parser/parser.factor mode change 100755 => 100644 basis/io/unix/linux/linux.factor mode change 100755 => 100644 basis/io/unix/mmap/mmap.factor mode change 100755 => 100644 basis/io/unix/select/select.factor mode change 100755 => 100644 basis/io/unix/sockets/secure/secure.factor mode change 100755 => 100644 basis/io/unix/sockets/sockets.factor mode change 100755 => 100644 basis/io/unix/unix-tests.factor mode change 100755 => 100644 basis/io/unix/unix.factor mode change 100755 => 100644 basis/io/windows/files/files.factor mode change 100755 => 100644 basis/io/windows/files/unique/unique.factor mode change 100755 => 100644 basis/io/windows/launcher/launcher-tests.factor mode change 100755 => 100644 basis/io/windows/launcher/launcher.factor mode change 100755 => 100644 basis/io/windows/mmap/mmap.factor mode change 100755 => 100644 basis/io/windows/nt/backend/backend.factor mode change 100755 => 100644 basis/io/windows/nt/files/files-tests.factor mode change 100755 => 100644 basis/io/windows/nt/files/files.factor mode change 100755 => 100644 basis/io/windows/nt/launcher/launcher-tests.factor mode change 100755 => 100644 basis/io/windows/nt/launcher/launcher.factor mode change 100755 => 100644 basis/io/windows/nt/launcher/test/append.factor mode change 100755 => 100644 basis/io/windows/nt/launcher/test/env.factor mode change 100755 => 100644 basis/io/windows/nt/launcher/test/stderr.factor mode change 100755 => 100644 basis/io/windows/nt/monitors/monitors-tests.factor mode change 100755 => 100644 basis/io/windows/nt/monitors/monitors.factor mode change 100755 => 100644 basis/io/windows/nt/nt.factor mode change 100755 => 100644 basis/io/windows/nt/pipes/pipes.factor mode change 100755 => 100644 basis/io/windows/nt/privileges/privileges.factor mode change 100755 => 100644 basis/io/windows/nt/sockets/sockets.factor mode change 100755 => 100644 basis/io/windows/privileges/privileges.factor mode change 100755 => 100644 basis/io/windows/sockets/sockets.factor mode change 100755 => 100644 basis/io/windows/windows.factor mode change 100755 => 100644 basis/json/reader/reader.factor mode change 100755 => 100644 basis/lcs/lcs-docs.factor mode change 100755 => 100644 basis/lcs/lcs-tests.factor mode change 100755 => 100644 basis/lcs/lcs.factor mode change 100755 => 100644 basis/libc/libc-tests.factor mode change 100755 => 100644 basis/libc/libc.factor mode change 100755 => 100644 basis/listener/listener-docs.factor mode change 100755 => 100644 basis/listener/listener-tests.factor mode change 100755 => 100644 basis/listener/listener.factor mode change 100755 => 100644 basis/locals/locals-tests.factor mode change 100755 => 100644 basis/locals/locals.factor mode change 100755 => 100644 basis/logging/analysis/analysis.factor mode change 100755 => 100644 basis/logging/insomniac/insomniac-docs.factor mode change 100755 => 100644 basis/logging/insomniac/insomniac.factor mode change 100755 => 100644 basis/logging/logging-docs.factor mode change 100755 => 100644 basis/logging/logging.factor mode change 100755 => 100644 basis/logging/parser/parser.factor mode change 100755 => 100644 basis/logging/server/server.factor mode change 100755 => 100644 basis/macros/macros.factor mode change 100755 => 100644 basis/match/match-tests.factor mode change 100755 => 100644 basis/match/match.factor mode change 100755 => 100644 basis/math/bitwise/bitwise-tests.factor mode change 100755 => 100644 basis/math/complex/complex-docs.factor mode change 100755 => 100644 basis/math/complex/complex-tests.factor mode change 100755 => 100644 basis/math/complex/complex.factor mode change 100755 => 100644 basis/math/constants/constants-docs.factor mode change 100755 => 100644 basis/math/constants/constants.factor mode change 100755 => 100644 basis/math/functions/functions-docs.factor mode change 100755 => 100644 basis/math/functions/functions-tests.factor mode change 100755 => 100644 basis/math/functions/functions.factor mode change 100755 => 100644 basis/math/intervals/intervals-tests.factor mode change 100755 => 100644 basis/math/intervals/intervals.factor mode change 100755 => 100644 basis/math/libm/libm.factor mode change 100755 => 100644 basis/math/ranges/ranges.factor mode change 100755 => 100644 basis/math/ratios/ratios-docs.factor mode change 100755 => 100644 basis/math/ratios/ratios-tests.factor mode change 100755 => 100644 basis/math/ratios/ratios.factor mode change 100755 => 100644 basis/math/vectors/vectors-docs.factor mode change 100755 => 100644 basis/math/vectors/vectors.factor mode change 100755 => 100644 basis/memoize/memoize-docs.factor mode change 100755 => 100644 basis/memoize/memoize.factor mode change 100755 => 100644 basis/mime-types/mime-types.factor mode change 100755 => 100644 basis/mirrors/mirrors-docs.factor mode change 100755 => 100644 basis/mirrors/mirrors-tests.factor mode change 100755 => 100644 basis/mirrors/mirrors.factor mode change 100755 => 100644 basis/models/compose/compose-docs.factor mode change 100755 => 100644 basis/models/compose/compose-tests.factor mode change 100755 => 100644 basis/models/compose/compose.factor mode change 100755 => 100644 basis/models/delay/delay-docs.factor mode change 100755 => 100644 basis/models/delay/delay.factor mode change 100755 => 100644 basis/models/filter/filter-docs.factor mode change 100755 => 100644 basis/models/filter/filter-tests.factor mode change 100755 => 100644 basis/models/filter/filter.factor mode change 100755 => 100644 basis/models/history/history-docs.factor mode change 100755 => 100644 basis/models/history/history-tests.factor mode change 100755 => 100644 basis/models/history/history.factor mode change 100755 => 100644 basis/models/mapping/mapping-tests.factor mode change 100755 => 100644 basis/models/mapping/mapping.factor mode change 100755 => 100644 basis/models/models-docs.factor mode change 100755 => 100644 basis/models/models-tests.factor mode change 100755 => 100644 basis/models/models.factor mode change 100755 => 100644 basis/models/range/range-docs.factor mode change 100755 => 100644 basis/models/range/range-tests.factor mode change 100755 => 100644 basis/models/range/range.factor mode change 100755 => 100644 basis/multiline/multiline-tests.factor mode change 100755 => 100644 basis/multiline/multiline.factor mode change 100755 => 100644 basis/opengl/gl/windows/windows.factor mode change 100755 => 100644 basis/opengl/opengl.factor mode change 100755 => 100644 basis/openssl/libcrypto/libcrypto.factor mode change 100755 => 100644 basis/openssl/libssl/libssl.factor mode change 100755 => 100644 basis/openssl/openssl-tests.factor mode change 100755 => 100644 basis/openssl/openssl.factor mode change 100755 => 100644 basis/peg/parsers/parsers-docs.factor mode change 100755 => 100644 basis/peg/parsers/parsers.factor mode change 100755 => 100644 basis/peg/peg.factor mode change 100755 => 100644 basis/peg/search/search-docs.factor mode change 100755 => 100644 basis/peg/search/search-tests.factor mode change 100755 => 100644 basis/peg/search/search.factor mode change 100755 => 100644 basis/prettyprint/backend/backend-docs.factor mode change 100755 => 100644 basis/prettyprint/backend/backend.factor mode change 100755 => 100644 basis/prettyprint/prettyprint-docs.factor mode change 100755 => 100644 basis/prettyprint/prettyprint-tests.factor mode change 100755 => 100644 basis/prettyprint/prettyprint.factor mode change 100755 => 100644 basis/prettyprint/sections/sections-docs.factor mode change 100755 => 100644 basis/qualified/qualified-docs.factor mode change 100755 => 100644 basis/random/dummy/dummy.factor mode change 100755 => 100644 basis/random/mersenne-twister/mersenne-twister-tests.factor mode change 100755 => 100644 basis/random/mersenne-twister/mersenne-twister.factor mode change 100755 => 100644 basis/random/random.factor mode change 100755 => 100644 basis/sequences/deep/deep-tests.factor mode change 100755 => 100644 basis/sequences/next/next.factor mode change 100755 => 100644 basis/serialize/serialize-docs.factor mode change 100755 => 100644 basis/serialize/serialize-tests.factor mode change 100755 => 100644 basis/serialize/serialize.factor mode change 100755 => 100644 basis/shuffle/shuffle-tests.factor mode change 100755 => 100644 basis/smtp/server/server.factor mode change 100755 => 100644 basis/smtp/smtp-tests.factor mode change 100755 => 100644 basis/smtp/smtp.factor mode change 100755 => 100644 basis/stack-checker/backend/backend.factor mode change 100755 => 100644 basis/stack-checker/known-words/known-words.factor mode change 100755 => 100644 basis/stack-checker/stack-checker-docs.factor mode change 100755 => 100644 basis/stack-checker/stack-checker-tests.factor mode change 100755 => 100644 basis/stack-checker/stack-checker.factor mode change 100755 => 100644 basis/stack-checker/state/state.factor mode change 100755 => 100644 basis/stack-checker/transforms/transforms-docs.factor mode change 100755 => 100644 basis/stack-checker/transforms/transforms-tests.factor mode change 100755 => 100644 basis/stack-checker/transforms/transforms.factor mode change 100755 => 100644 basis/state-parser/state-parser-tests.factor mode change 100755 => 100644 basis/symbols/symbols-tests.factor mode change 100755 => 100644 basis/symbols/symbols.factor mode change 100755 => 100644 basis/syndication/syndication-tests.factor mode change 100755 => 100644 basis/threads/threads-docs.factor mode change 100755 => 100644 basis/threads/threads-tests.factor mode change 100755 => 100644 basis/threads/threads.factor mode change 100755 => 100644 basis/tools/annotations/annotations-docs.factor mode change 100755 => 100644 basis/tools/annotations/annotations-tests.factor mode change 100755 => 100644 basis/tools/annotations/annotations.factor mode change 100755 => 100644 basis/tools/completion/completion.factor mode change 100755 => 100644 basis/tools/crossref/crossref-tests.factor mode change 100755 => 100644 basis/tools/crossref/crossref.factor mode change 100755 => 100644 basis/tools/crossref/test/foo.factor mode change 100755 => 100644 basis/tools/deploy/backend/backend.factor mode change 100755 => 100644 basis/tools/deploy/config/config-docs.factor mode change 100755 => 100644 basis/tools/deploy/config/config.factor mode change 100755 => 100644 basis/tools/deploy/deploy-docs.factor mode change 100755 => 100644 basis/tools/deploy/deploy-tests.factor mode change 100755 => 100644 basis/tools/deploy/deploy.factor mode change 100755 => 100644 basis/tools/deploy/macosx/macosx.factor mode change 100755 => 100644 basis/tools/deploy/shaker/shaker.factor mode change 100755 => 100644 basis/tools/deploy/shaker/strip-cocoa.factor mode change 100755 => 100644 basis/tools/deploy/shaker/strip-debugger.factor mode change 100755 => 100644 basis/tools/deploy/shaker/strip-libc.factor mode change 100755 => 100644 basis/tools/deploy/test/1/1.factor mode change 100755 => 100644 basis/tools/deploy/test/1/deploy.factor mode change 100755 => 100644 basis/tools/deploy/test/2/2.factor mode change 100755 => 100644 basis/tools/deploy/test/2/deploy.factor mode change 100755 => 100644 basis/tools/deploy/test/3/3.factor mode change 100755 => 100644 basis/tools/deploy/test/3/deploy.factor mode change 100755 => 100644 basis/tools/deploy/windows/windows-tests.factor mode change 100755 => 100644 basis/tools/deploy/windows/windows.factor mode change 100755 => 100644 basis/tools/disassembler/disassembler-docs.factor mode change 100755 => 100644 basis/tools/disassembler/disassembler-tests.factor mode change 100755 => 100644 basis/tools/disassembler/disassembler.factor mode change 100755 => 100644 basis/tools/memory/memory-docs.factor mode change 100755 => 100644 basis/tools/memory/memory.factor mode change 100755 => 100644 basis/tools/profiler/profiler-docs.factor mode change 100755 => 100644 basis/tools/profiler/profiler-tests.factor mode change 100755 => 100644 basis/tools/profiler/profiler.factor mode change 100755 => 100644 basis/tools/test/test-docs.factor mode change 100755 => 100644 basis/tools/test/test.factor mode change 100755 => 100644 basis/tools/test/ui/ui.factor mode change 100755 => 100644 basis/tools/threads/threads.factor mode change 100755 => 100644 basis/tools/time/time-docs.factor mode change 100755 => 100644 basis/tools/vocabs/browser/browser-docs.factor mode change 100755 => 100644 basis/tools/vocabs/browser/browser-tests.factor mode change 100755 => 100644 basis/tools/vocabs/browser/browser.factor mode change 100755 => 100644 basis/tools/vocabs/monitor/monitor.factor mode change 100755 => 100644 basis/tools/vocabs/vocabs-docs.factor mode change 100755 => 100644 basis/tools/vocabs/vocabs.factor mode change 100755 => 100644 basis/tools/walker/debug/debug.factor mode change 100755 => 100644 basis/tools/walker/walker-tests.factor mode change 100755 => 100644 basis/tools/walker/walker.factor mode change 100755 => 100644 basis/tuple-arrays/tuple-arrays-tests.factor mode change 100755 => 100644 basis/ui/backend/backend.factor mode change 100755 => 100644 basis/ui/cocoa/cocoa.factor mode change 100755 => 100644 basis/ui/cocoa/tools/tools.factor mode change 100755 => 100644 basis/ui/cocoa/views/views.factor mode change 100755 => 100644 basis/ui/commands/commands.factor mode change 100755 => 100644 basis/ui/freetype/freetype-docs.factor mode change 100755 => 100644 basis/ui/freetype/freetype.factor mode change 100755 => 100644 basis/ui/gadgets/books/books-docs.factor mode change 100755 => 100644 basis/ui/gadgets/books/books-tests.factor mode change 100755 => 100644 basis/ui/gadgets/books/books.factor mode change 100755 => 100644 basis/ui/gadgets/buttons/buttons-docs.factor mode change 100755 => 100644 basis/ui/gadgets/buttons/buttons-tests.factor mode change 100755 => 100644 basis/ui/gadgets/buttons/buttons.factor mode change 100755 => 100644 basis/ui/gadgets/canvas/canvas-tests.factor mode change 100755 => 100644 basis/ui/gadgets/canvas/canvas.factor mode change 100755 => 100644 basis/ui/gadgets/editors/editors-docs.factor mode change 100755 => 100644 basis/ui/gadgets/editors/editors-tests.factor mode change 100755 => 100644 basis/ui/gadgets/editors/editors.factor mode change 100755 => 100644 basis/ui/gadgets/frames/frames-docs.factor mode change 100755 => 100644 basis/ui/gadgets/gadgets-docs.factor mode change 100755 => 100644 basis/ui/gadgets/gadgets-tests.factor mode change 100755 => 100644 basis/ui/gadgets/gadgets.factor mode change 100755 => 100644 basis/ui/gadgets/grid-lines/grid-lines-docs.factor mode change 100755 => 100644 basis/ui/gadgets/grid-lines/grid-lines.factor mode change 100755 => 100644 basis/ui/gadgets/grids/grids-docs.factor mode change 100755 => 100644 basis/ui/gadgets/incremental/incremental-docs.factor mode change 100755 => 100644 basis/ui/gadgets/incremental/incremental.factor mode change 100755 => 100644 basis/ui/gadgets/labelled/labelled-docs.factor mode change 100755 => 100644 basis/ui/gadgets/labelled/labelled.factor mode change 100755 => 100644 basis/ui/gadgets/labels/labels-docs.factor mode change 100755 => 100644 basis/ui/gadgets/labels/labels.factor mode change 100755 => 100644 basis/ui/gadgets/lists/lists-docs.factor mode change 100755 => 100644 basis/ui/gadgets/lists/lists.factor mode change 100755 => 100644 basis/ui/gadgets/menus/menus-docs.factor mode change 100755 => 100644 basis/ui/gadgets/packs/packs-docs.factor mode change 100755 => 100644 basis/ui/gadgets/packs/packs.factor mode change 100755 => 100644 basis/ui/gadgets/panes/panes-docs.factor mode change 100755 => 100644 basis/ui/gadgets/panes/panes-tests.factor mode change 100755 => 100644 basis/ui/gadgets/panes/panes.factor mode change 100755 => 100644 basis/ui/gadgets/presentations/presentations-docs.factor mode change 100755 => 100644 basis/ui/gadgets/scrollers/scrollers-docs.factor mode change 100755 => 100644 basis/ui/gadgets/scrollers/scrollers-tests.factor mode change 100755 => 100644 basis/ui/gadgets/scrollers/scrollers.factor mode change 100755 => 100644 basis/ui/gadgets/sliders/sliders-docs.factor mode change 100755 => 100644 basis/ui/gadgets/sliders/sliders.factor mode change 100755 => 100644 basis/ui/gadgets/slots/slots.factor mode change 100755 => 100644 basis/ui/gadgets/status-bar/status-bar-docs.factor mode change 100755 => 100644 basis/ui/gadgets/status-bar/status-bar.factor mode change 100755 => 100644 basis/ui/gadgets/tracks/tracks-docs.factor mode change 100755 => 100644 basis/ui/gadgets/viewports/viewports-docs.factor mode change 100755 => 100644 basis/ui/gadgets/viewports/viewports.factor mode change 100755 => 100644 basis/ui/gadgets/worlds/worlds-docs.factor mode change 100755 => 100644 basis/ui/gadgets/worlds/worlds.factor mode change 100755 => 100644 basis/ui/gestures/gestures.factor mode change 100755 => 100644 basis/ui/operations/operations-tests.factor mode change 100755 => 100644 basis/ui/operations/operations.factor mode change 100755 => 100644 basis/ui/render/render-docs.factor mode change 100755 => 100644 basis/ui/tools/browser/browser-tests.factor mode change 100755 => 100644 basis/ui/tools/browser/browser.factor mode change 100755 => 100644 basis/ui/tools/debugger/debugger-docs.factor mode change 100755 => 100644 basis/ui/tools/deploy/deploy-docs.factor mode change 100755 => 100644 basis/ui/tools/deploy/deploy.factor mode change 100755 => 100644 basis/ui/tools/interactor/interactor-docs.factor mode change 100755 => 100644 basis/ui/tools/interactor/interactor-tests.factor mode change 100755 => 100644 basis/ui/tools/interactor/interactor.factor mode change 100755 => 100644 basis/ui/tools/listener/listener-tests.factor mode change 100755 => 100644 basis/ui/tools/listener/listener.factor mode change 100755 => 100644 basis/ui/tools/operations/operations.factor mode change 100755 => 100644 basis/ui/tools/profiler/profiler.factor mode change 100755 => 100644 basis/ui/tools/search/search-tests.factor mode change 100755 => 100644 basis/ui/tools/search/search.factor mode change 100755 => 100644 basis/ui/tools/tools-docs.factor mode change 100755 => 100644 basis/ui/tools/tools-tests.factor mode change 100755 => 100644 basis/ui/tools/tools.factor mode change 100755 => 100644 basis/ui/tools/traceback/traceback.factor mode change 100755 => 100644 basis/ui/tools/walker/walker-docs.factor mode change 100755 => 100644 basis/ui/tools/walker/walker-tests.factor mode change 100755 => 100644 basis/ui/tools/walker/walker.factor mode change 100755 => 100644 basis/ui/tools/workspace/workspace-tests.factor mode change 100755 => 100644 basis/ui/tools/workspace/workspace.factor mode change 100755 => 100644 basis/ui/traverse/traverse-tests.factor mode change 100755 => 100644 basis/ui/ui-docs.factor mode change 100755 => 100644 basis/ui/ui.factor mode change 100755 => 100644 basis/ui/windows/windows.factor mode change 100755 => 100644 basis/ui/x11/x11.factor mode change 100755 => 100644 basis/unicode/breaks/breaks-tests.factor mode change 100755 => 100644 basis/unicode/breaks/breaks.factor mode change 100755 => 100644 basis/unicode/case/case-tests.factor mode change 100755 => 100644 basis/unicode/case/case.factor mode change 100755 => 100644 basis/unicode/collation/collation-tests.factor mode change 100755 => 100644 basis/unicode/collation/collation.factor mode change 100755 => 100644 basis/unicode/data/data.factor mode change 100755 => 100644 basis/unicode/normalize/normalize-tests.factor mode change 100755 => 100644 basis/unicode/normalize/normalize.factor mode change 100755 => 100644 basis/unicode/script/script-docs.factor mode change 100755 => 100644 basis/unicode/script/script-tests.factor mode change 100755 => 100644 basis/unicode/script/script.factor mode change 100755 => 100644 basis/unicode/syntax/syntax.factor mode change 100755 => 100644 basis/unix/bsd/bsd.factor mode change 100755 => 100644 basis/unix/linux/ifreq/ifreq.factor mode change 100755 => 100644 basis/unix/linux/linux.factor mode change 100755 => 100644 basis/unix/process/process.factor mode change 100755 => 100644 basis/unix/types/freebsd/freebsd.factor mode change 100755 => 100644 basis/unix/types/netbsd/32/32.factor mode change 100755 => 100644 basis/unix/types/netbsd/64/64.factor mode change 100755 => 100644 basis/unix/types/netbsd/netbsd.factor mode change 100755 => 100644 basis/unix/types/openbsd/openbsd.factor mode change 100755 => 100644 basis/unix/unix.factor mode change 100755 => 100644 basis/values/values-docs.factor mode change 100755 => 100644 basis/values/values-tests.factor mode change 100755 => 100644 basis/values/values.factor mode change 100755 => 100644 basis/windows/advapi32/advapi32.factor mode change 100755 => 100644 basis/windows/com/com-tests.factor mode change 100755 => 100644 basis/windows/com/com.factor mode change 100755 => 100644 basis/windows/com/syntax/syntax-docs.factor mode change 100755 => 100644 basis/windows/com/syntax/syntax.factor mode change 100755 => 100644 basis/windows/com/wrapper/wrapper-docs.factor mode change 100755 => 100644 basis/windows/com/wrapper/wrapper.factor mode change 100755 => 100644 basis/windows/dinput/constants/constants.factor mode change 100755 => 100644 basis/windows/dinput/dinput.factor mode change 100755 => 100644 basis/windows/gdi32/gdi32.factor mode change 100755 => 100644 basis/windows/kernel32/kernel32.factor mode change 100755 => 100644 basis/windows/messages/messages.factor mode change 100755 => 100644 basis/windows/ole32/ole32.factor mode change 100755 => 100644 basis/windows/opengl32/opengl32.factor mode change 100755 => 100644 basis/windows/user32/user32.factor mode change 100755 => 100644 basis/windows/winsock/winsock.factor mode change 100755 => 100644 basis/x11/clipboard/clipboard.factor mode change 100755 => 100644 basis/x11/windows/windows.factor mode change 100755 => 100644 basis/x11/xim/xim.factor mode change 100755 => 100644 basis/x11/xlib/xlib.factor mode change 100755 => 100644 basis/xml-rpc/xml-rpc.factor mode change 100755 => 100644 basis/xml/char-classes/char-classes.factor mode change 100755 => 100644 basis/xml/data/data.factor mode change 100755 => 100644 basis/xml/errors/errors-tests.factor mode change 100755 => 100644 basis/xml/tests/soap.factor mode change 100755 => 100644 basis/xml/utilities/utilities.factor mode change 100755 => 100644 basis/xmode/catalog/catalog.factor mode change 100755 => 100644 basis/xmode/code2html/code2html.factor mode change 100755 => 100644 basis/xmode/code2html/responder/responder.factor mode change 100755 => 100644 basis/xmode/loader/loader.factor mode change 100755 => 100644 basis/xmode/marker/marker-tests.factor mode change 100755 => 100644 basis/xmode/marker/marker.factor mode change 100755 => 100644 basis/xmode/marker/state/state.factor mode change 100755 => 100644 basis/xmode/rules/rules.factor mode change 100755 => 100644 basis/xmode/tokens/tokens.factor mode change 100755 => 100644 basis/xmode/utilities/utilities-tests.factor mode change 100755 => 100644 core/alien/alien-docs.factor mode change 100755 => 100644 core/alien/alien-tests.factor mode change 100755 => 100644 core/alien/alien.factor mode change 100755 => 100644 core/arrays/arrays-docs.factor mode change 100755 => 100644 core/arrays/arrays-tests.factor mode change 100755 => 100644 core/arrays/arrays.factor mode change 100755 => 100644 core/assocs/assocs-docs.factor mode change 100755 => 100644 core/assocs/assocs-tests.factor mode change 100755 => 100644 core/assocs/assocs.factor mode change 100755 => 100644 core/bootstrap/layouts/layouts.factor mode change 100755 => 100644 core/bootstrap/primitives.factor mode change 100755 => 100644 core/bootstrap/stage1.factor mode change 100755 => 100644 core/bootstrap/syntax.factor mode change 100755 => 100644 core/byte-arrays/byte-arrays-docs.factor mode change 100755 => 100644 core/byte-arrays/byte-arrays-tests.factor mode change 100755 => 100644 core/byte-arrays/byte-arrays.factor mode change 100755 => 100644 core/byte-vectors/byte-vectors-docs.factor mode change 100755 => 100644 core/byte-vectors/byte-vectors-tests.factor mode change 100755 => 100644 core/byte-vectors/byte-vectors.factor mode change 100755 => 100644 core/checksums/crc32/crc32.factor mode change 100755 => 100644 core/classes/algebra/algebra-docs.factor mode change 100755 => 100644 core/classes/algebra/algebra-tests.factor mode change 100755 => 100644 core/classes/algebra/algebra.factor mode change 100755 => 100644 core/classes/classes-docs.factor mode change 100755 => 100644 core/classes/classes-tests.factor mode change 100755 => 100644 core/classes/classes.factor mode change 100755 => 100644 core/classes/mixin/mixin-docs.factor mode change 100755 => 100644 core/classes/mixin/mixin.factor mode change 100755 => 100644 core/classes/predicate/predicate-docs.factor mode change 100755 => 100644 core/classes/predicate/predicate.factor mode change 100755 => 100644 core/classes/singleton/singleton.factor mode change 100755 => 100644 core/classes/tuple/tuple-docs.factor mode change 100755 => 100644 core/classes/tuple/tuple-tests.factor mode change 100755 => 100644 core/classes/tuple/tuple.factor mode change 100755 => 100644 core/classes/union/union-docs.factor mode change 100755 => 100644 core/classes/union/union.factor mode change 100755 => 100644 core/combinators/combinators-docs.factor mode change 100755 => 100644 core/combinators/combinators-tests.factor mode change 100755 => 100644 core/combinators/combinators.factor mode change 100755 => 100644 core/compiler/errors/errors-docs.factor mode change 100755 => 100644 core/compiler/errors/errors.factor mode change 100755 => 100644 core/compiler/units/units-docs.factor mode change 100755 => 100644 core/compiler/units/units.factor mode change 100755 => 100644 core/continuations/continuations-docs.factor mode change 100755 => 100644 core/continuations/continuations-tests.factor mode change 100755 => 100644 core/continuations/continuations.factor mode change 100755 => 100644 core/definitions/definitions-docs.factor mode change 100755 => 100644 core/definitions/definitions-tests.factor mode change 100755 => 100644 core/definitions/definitions.factor mode change 100755 => 100644 core/destructors/destructors-docs.factor mode change 100755 => 100644 core/destructors/destructors-tests.factor mode change 100755 => 100644 core/destructors/destructors.factor mode change 100755 => 100644 core/effects/effects.factor mode change 100755 => 100644 core/generic/generic-docs.factor mode change 100755 => 100644 core/generic/generic-tests.factor mode change 100755 => 100644 core/generic/generic.factor mode change 100755 => 100644 core/generic/math/math-docs.factor mode change 100755 => 100644 core/generic/math/math.factor mode change 100755 => 100644 core/growable/growable-docs.factor mode change 100755 => 100644 core/growable/growable-tests.factor mode change 100755 => 100644 core/hashtables/hashtables-docs.factor mode change 100755 => 100644 core/hashtables/hashtables-tests.factor mode change 100755 => 100644 core/hashtables/hashtables.factor mode change 100755 => 100644 core/init/init.factor mode change 100755 => 100644 core/io/backend/backend-tests.factor mode change 100755 => 100644 core/io/backend/backend.factor mode change 100755 => 100644 core/io/binary/binary-tests.factor mode change 100755 => 100644 core/io/binary/binary.factor mode change 100755 => 100644 core/io/encodings/binary/binary.factor mode change 100755 => 100644 core/io/encodings/encodings-tests.factor mode change 100755 => 100644 core/io/encodings/encodings.factor mode change 100755 => 100644 core/io/encodings/utf8/utf8-docs.factor mode change 100755 => 100644 core/io/encodings/utf8/utf8-tests.factor mode change 100755 => 100644 core/io/encodings/utf8/utf8.factor mode change 100755 => 100644 core/io/files/files-docs.factor mode change 100755 => 100644 core/io/files/files-tests.factor mode change 100755 => 100644 core/io/files/files.factor mode change 100755 => 100644 core/io/io-docs.factor mode change 100755 => 100644 core/io/io-tests.factor mode change 100755 => 100644 core/io/io.factor mode change 100755 => 100644 core/io/streams/c/c-docs.factor mode change 100755 => 100644 core/io/streams/c/c-tests.factor mode change 100755 => 100644 core/io/streams/c/c.factor mode change 100755 => 100644 core/io/streams/nested/nested.factor mode change 100755 => 100644 core/io/streams/string/string.factor mode change 100755 => 100644 core/kernel/kernel-docs.factor mode change 100755 => 100644 core/kernel/kernel-tests.factor mode change 100755 => 100644 core/kernel/kernel.factor mode change 100755 => 100644 core/layouts/layouts-docs.factor mode change 100755 => 100644 core/layouts/layouts-tests.factor mode change 100755 => 100644 core/layouts/layouts.factor mode change 100755 => 100644 core/math/floats/floats-tests.factor mode change 100755 => 100644 core/math/floats/floats.factor mode change 100755 => 100644 core/math/integers/integers-docs.factor mode change 100755 => 100644 core/math/integers/integers-tests.factor mode change 100755 => 100644 core/math/integers/integers.factor mode change 100755 => 100644 core/math/math-docs.factor mode change 100755 => 100644 core/math/math.factor mode change 100755 => 100644 core/math/parser/parser-tests.factor mode change 100755 => 100644 core/math/parser/parser.factor mode change 100755 => 100644 core/memory/memory-docs.factor mode change 100755 => 100644 core/memory/memory-tests.factor mode change 100755 => 100644 core/namespaces/namespaces-docs.factor mode change 100755 => 100644 core/parser/parser-docs.factor mode change 100755 => 100644 core/parser/parser-tests.factor mode change 100755 => 100644 core/parser/parser.factor mode change 100755 => 100644 core/parser/test/assert-depth.factor mode change 100755 => 100644 core/quotations/quotations-docs.factor mode change 100755 => 100644 core/quotations/quotations-tests.factor mode change 100755 => 100644 core/quotations/quotations.factor mode change 100755 => 100644 core/sbufs/sbufs.factor mode change 100755 => 100644 core/sequences/sequences-docs.factor mode change 100755 => 100644 core/sequences/sequences-tests.factor mode change 100755 => 100644 core/sequences/sequences.factor mode change 100755 => 100644 core/slots/slots-docs.factor mode change 100755 => 100644 core/slots/slots.factor mode change 100755 => 100644 core/sorting/sorting-tests.factor mode change 100755 => 100644 core/sorting/sorting.factor mode change 100755 => 100644 core/source-files/source-files-docs.factor mode change 100755 => 100644 core/source-files/source-files.factor mode change 100755 => 100644 core/splitting/splitting.factor mode change 100755 => 100644 core/strings/strings-docs.factor mode change 100755 => 100644 core/strings/strings-tests.factor mode change 100755 => 100644 core/strings/strings.factor mode change 100755 => 100644 core/syntax/syntax-docs.factor mode change 100755 => 100644 core/syntax/syntax.factor mode change 100755 => 100644 core/system/system-docs.factor mode change 100755 => 100644 core/system/system-tests.factor mode change 100755 => 100644 core/system/system.factor mode change 100755 => 100644 core/vectors/vectors-docs.factor mode change 100755 => 100644 core/vectors/vectors-tests.factor mode change 100755 => 100644 core/vectors/vectors.factor mode change 100755 => 100644 core/vocabs/loader/loader-docs.factor mode change 100755 => 100644 core/vocabs/loader/loader-tests.factor mode change 100755 => 100644 core/vocabs/loader/loader.factor mode change 100755 => 100644 core/vocabs/loader/test/a/a.factor mode change 100755 => 100644 core/vocabs/loader/test/b/b.factor mode change 100755 => 100644 core/vocabs/vocabs-docs.factor mode change 100755 => 100644 core/vocabs/vocabs.factor mode change 100755 => 100644 core/words/words-docs.factor mode change 100755 => 100644 core/words/words-tests.factor mode change 100755 => 100644 core/words/words.factor diff --git a/basis/alarms/alarms-docs.factor b/basis/alarms/alarms-docs.factor old mode 100755 new mode 100644 diff --git a/basis/alarms/alarms-tests.factor b/basis/alarms/alarms-tests.factor old mode 100755 new mode 100644 diff --git a/basis/alarms/alarms.factor b/basis/alarms/alarms.factor old mode 100755 new mode 100644 diff --git a/basis/alias/alias.factor b/basis/alias/alias.factor old mode 100755 new mode 100644 diff --git a/basis/alien/arrays/arrays-docs.factor b/basis/alien/arrays/arrays-docs.factor old mode 100755 new mode 100644 diff --git a/basis/alien/c-types/c-types-docs.factor b/basis/alien/c-types/c-types-docs.factor old mode 100755 new mode 100644 diff --git a/basis/alien/c-types/c-types-tests.factor b/basis/alien/c-types/c-types-tests.factor old mode 100755 new mode 100644 diff --git a/basis/alien/c-types/c-types.factor b/basis/alien/c-types/c-types.factor old mode 100755 new mode 100644 diff --git a/basis/alien/remote-control/remote-control.factor b/basis/alien/remote-control/remote-control.factor old mode 100755 new mode 100644 diff --git a/basis/alien/strings/strings.factor b/basis/alien/strings/strings.factor old mode 100755 new mode 100644 diff --git a/basis/alien/structs/structs-docs.factor b/basis/alien/structs/structs-docs.factor old mode 100755 new mode 100644 diff --git a/basis/alien/structs/structs.factor b/basis/alien/structs/structs.factor old mode 100755 new mode 100644 diff --git a/basis/alien/syntax/syntax-docs.factor b/basis/alien/syntax/syntax-docs.factor old mode 100755 new mode 100644 diff --git a/basis/alien/syntax/syntax.factor b/basis/alien/syntax/syntax.factor old mode 100755 new mode 100644 diff --git a/basis/ascii/ascii-docs.factor b/basis/ascii/ascii-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ascii/ascii.factor b/basis/ascii/ascii.factor old mode 100755 new mode 100644 diff --git a/basis/bit-arrays/bit-arrays-tests.factor b/basis/bit-arrays/bit-arrays-tests.factor old mode 100755 new mode 100644 diff --git a/basis/bit-arrays/bit-arrays.factor b/basis/bit-arrays/bit-arrays.factor old mode 100755 new mode 100644 diff --git a/basis/bit-vectors/bit-vectors-docs.factor b/basis/bit-vectors/bit-vectors-docs.factor old mode 100755 new mode 100644 diff --git a/basis/bit-vectors/bit-vectors-tests.factor b/basis/bit-vectors/bit-vectors-tests.factor old mode 100755 new mode 100644 diff --git a/basis/bit-vectors/bit-vectors.factor b/basis/bit-vectors/bit-vectors.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/compiler/compiler.factor b/basis/bootstrap/compiler/compiler.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/handbook/handbook.factor b/basis/bootstrap/handbook/handbook.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/help/help.factor b/basis/bootstrap/help/help.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/image/image-tests.factor b/basis/bootstrap/image/image-tests.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/image/image.factor b/basis/bootstrap/image/image.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/image/upload/upload.factor b/basis/bootstrap/image/upload/upload.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/io/io.factor b/basis/bootstrap/io/io.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/random/random.factor b/basis/bootstrap/random/random.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/stage2.factor b/basis/bootstrap/stage2.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/tools/tools.factor b/basis/bootstrap/tools/tools.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/ui/tools/tools.factor b/basis/bootstrap/ui/tools/tools.factor old mode 100755 new mode 100644 diff --git a/basis/bootstrap/unicode/unicode.factor b/basis/bootstrap/unicode/unicode.factor old mode 100755 new mode 100644 diff --git a/basis/boxes/boxes-docs.factor b/basis/boxes/boxes-docs.factor old mode 100755 new mode 100644 diff --git a/basis/boxes/boxes-tests.factor b/basis/boxes/boxes-tests.factor old mode 100755 new mode 100644 diff --git a/basis/boxes/boxes.factor b/basis/boxes/boxes.factor old mode 100755 new mode 100644 diff --git a/basis/calendar/calendar-tests.factor b/basis/calendar/calendar-tests.factor old mode 100755 new mode 100644 diff --git a/basis/calendar/calendar.factor b/basis/calendar/calendar.factor old mode 100755 new mode 100644 diff --git a/basis/calendar/format/format-tests.factor b/basis/calendar/format/format-tests.factor old mode 100755 new mode 100644 diff --git a/basis/calendar/format/format.factor b/basis/calendar/format/format.factor old mode 100755 new mode 100644 diff --git a/basis/calendar/model/model.factor b/basis/calendar/model/model.factor old mode 100755 new mode 100644 diff --git a/basis/calendar/windows/windows.factor b/basis/calendar/windows/windows.factor old mode 100755 new mode 100644 diff --git a/basis/channels/channels-tests.factor b/basis/channels/channels-tests.factor old mode 100755 new mode 100644 diff --git a/basis/channels/channels.factor b/basis/channels/channels.factor old mode 100755 new mode 100644 diff --git a/basis/channels/examples/examples.factor b/basis/channels/examples/examples.factor old mode 100755 new mode 100644 diff --git a/basis/channels/remote/remote.factor b/basis/channels/remote/remote.factor old mode 100755 new mode 100644 diff --git a/basis/checksums/adler-32/adler-32-docs.factor b/basis/checksums/adler-32/adler-32-docs.factor old mode 100755 new mode 100644 diff --git a/basis/checksums/md5/md5-docs.factor b/basis/checksums/md5/md5-docs.factor old mode 100755 new mode 100644 diff --git a/basis/checksums/md5/md5-tests.factor b/basis/checksums/md5/md5-tests.factor old mode 100755 new mode 100644 diff --git a/basis/checksums/md5/md5.factor b/basis/checksums/md5/md5.factor old mode 100755 new mode 100644 diff --git a/basis/checksums/sha1/sha1-tests.factor b/basis/checksums/sha1/sha1-tests.factor old mode 100755 new mode 100644 diff --git a/basis/checksums/sha1/sha1.factor b/basis/checksums/sha1/sha1.factor old mode 100755 new mode 100644 diff --git a/basis/checksums/sha2/sha2-tests.factor b/basis/checksums/sha2/sha2-tests.factor old mode 100755 new mode 100644 diff --git a/basis/checksums/sha2/sha2.factor b/basis/checksums/sha2/sha2.factor old mode 100755 new mode 100644 diff --git a/basis/circular/circular-tests.factor b/basis/circular/circular-tests.factor old mode 100755 new mode 100644 diff --git a/basis/circular/circular.factor b/basis/circular/circular.factor old mode 100755 new mode 100644 diff --git a/basis/cocoa/application/application.factor b/basis/cocoa/application/application.factor old mode 100755 new mode 100644 diff --git a/basis/cocoa/cocoa.factor b/basis/cocoa/cocoa.factor old mode 100755 new mode 100644 diff --git a/basis/cocoa/messages/messages.factor b/basis/cocoa/messages/messages.factor old mode 100755 new mode 100644 diff --git a/basis/cocoa/pasteboard/pasteboard.factor b/basis/cocoa/pasteboard/pasteboard.factor old mode 100755 new mode 100644 diff --git a/basis/cocoa/subclassing/subclassing.factor b/basis/cocoa/subclassing/subclassing.factor old mode 100755 new mode 100644 diff --git a/basis/cocoa/windows/windows.factor b/basis/cocoa/windows/windows.factor old mode 100755 new mode 100644 diff --git a/basis/combinators/short-circuit/short-circuit.factor b/basis/combinators/short-circuit/short-circuit.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/compiler-docs.factor b/basis/compiler/compiler-docs.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/compiler.factor b/basis/compiler/compiler.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/constants/constants.factor b/basis/compiler/constants/constants.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/generator/fixup/fixup.factor b/basis/compiler/generator/fixup/fixup.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/generator/generator-docs.factor b/basis/compiler/generator/generator-docs.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/generator/generator.factor b/basis/compiler/generator/generator.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/generator/registers/registers.factor b/basis/compiler/generator/registers/registers.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/alien.factor b/basis/compiler/tests/alien.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/curry.factor b/basis/compiler/tests/curry.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/float.factor b/basis/compiler/tests/float.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/intrinsics.factor b/basis/compiler/tests/intrinsics.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/optimizer.factor b/basis/compiler/tests/optimizer.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/simple.factor b/basis/compiler/tests/simple.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/stack-trace.factor b/basis/compiler/tests/stack-trace.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/templates-early.factor b/basis/compiler/tests/templates-early.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/templates.factor b/basis/compiler/tests/templates.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tests/tuples.factor b/basis/compiler/tests/tuples.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tree/dead-code/simple/simple.factor b/basis/compiler/tree/dead-code/simple/simple.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tree/def-use/def-use-tests.factor b/basis/compiler/tree/def-use/def-use-tests.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tree/def-use/def-use.factor b/basis/compiler/tree/def-use/def-use.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tree/propagation/propagation.factor b/basis/compiler/tree/propagation/propagation.factor old mode 100755 new mode 100644 diff --git a/basis/compiler/tree/tree.factor b/basis/compiler/tree/tree.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/combinators/combinators-docs.factor b/basis/concurrency/combinators/combinators-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/combinators/combinators-tests.factor b/basis/concurrency/combinators/combinators-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/combinators/combinators.factor b/basis/concurrency/combinators/combinators.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/conditions/conditions.factor b/basis/concurrency/conditions/conditions.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/count-downs/count-downs-docs.factor b/basis/concurrency/count-downs/count-downs-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/count-downs/count-downs-tests.factor b/basis/concurrency/count-downs/count-downs-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/count-downs/count-downs.factor b/basis/concurrency/count-downs/count-downs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/distributed/distributed-docs.factor b/basis/concurrency/distributed/distributed-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/distributed/distributed-tests.factor b/basis/concurrency/distributed/distributed-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/distributed/distributed.factor b/basis/concurrency/distributed/distributed.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/exchangers/exchangers-docs.factor b/basis/concurrency/exchangers/exchangers-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/exchangers/exchangers-tests.factor b/basis/concurrency/exchangers/exchangers-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/exchangers/exchangers.factor b/basis/concurrency/exchangers/exchangers.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/flags/flags-tests.factor b/basis/concurrency/flags/flags-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/flags/flags.factor b/basis/concurrency/flags/flags.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/futures/futures-docs.factor b/basis/concurrency/futures/futures-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/futures/futures-tests.factor b/basis/concurrency/futures/futures-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/futures/futures.factor b/basis/concurrency/futures/futures.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/locks/locks-docs.factor b/basis/concurrency/locks/locks-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/locks/locks-tests.factor b/basis/concurrency/locks/locks-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/locks/locks.factor b/basis/concurrency/locks/locks.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/mailboxes/mailboxes-docs.factor b/basis/concurrency/mailboxes/mailboxes-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/mailboxes/mailboxes-tests.factor b/basis/concurrency/mailboxes/mailboxes-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/mailboxes/mailboxes.factor b/basis/concurrency/mailboxes/mailboxes.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/messaging/messaging-docs.factor b/basis/concurrency/messaging/messaging-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/messaging/messaging-tests.factor b/basis/concurrency/messaging/messaging-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/messaging/messaging.factor b/basis/concurrency/messaging/messaging.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/promises/promises-docs.factor b/basis/concurrency/promises/promises-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/promises/promises-tests.factor b/basis/concurrency/promises/promises-tests.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/promises/promises.factor b/basis/concurrency/promises/promises.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/semaphores/semaphores-docs.factor b/basis/concurrency/semaphores/semaphores-docs.factor old mode 100755 new mode 100644 diff --git a/basis/concurrency/semaphores/semaphores.factor b/basis/concurrency/semaphores/semaphores.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/architecture/architecture.factor b/basis/cpu/architecture/architecture.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/ppc/allot/allot.factor b/basis/cpu/ppc/allot/allot.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/ppc/architecture/architecture.factor b/basis/cpu/ppc/architecture/architecture.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/ppc/assembler/assembler.factor b/basis/cpu/ppc/assembler/assembler.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/ppc/bootstrap.factor b/basis/cpu/ppc/bootstrap.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/ppc/intrinsics/intrinsics.factor b/basis/cpu/ppc/intrinsics/intrinsics.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/ppc/linux/bootstrap.factor b/basis/cpu/ppc/linux/bootstrap.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/ppc/macosx/bootstrap.factor b/basis/cpu/ppc/macosx/bootstrap.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/ppc/ppc.factor b/basis/cpu/ppc/ppc.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/32/32.factor b/basis/cpu/x86/32/32.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/32/bootstrap.factor b/basis/cpu/x86/32/bootstrap.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/64/64.factor b/basis/cpu/x86/64/64.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/64/bootstrap.factor b/basis/cpu/x86/64/bootstrap.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/allot/allot.factor b/basis/cpu/x86/allot/allot.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/architecture/architecture.factor b/basis/cpu/x86/architecture/architecture.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/assembler/assembler.factor b/basis/cpu/x86/assembler/assembler.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/bootstrap.factor b/basis/cpu/x86/bootstrap.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/intrinsics/intrinsics.factor b/basis/cpu/x86/intrinsics/intrinsics.factor old mode 100755 new mode 100644 diff --git a/basis/cpu/x86/sse2/sse2.factor b/basis/cpu/x86/sse2/sse2.factor old mode 100755 new mode 100644 diff --git a/basis/db/db-tests.factor b/basis/db/db-tests.factor old mode 100755 new mode 100644 diff --git a/basis/db/db.factor b/basis/db/db.factor old mode 100755 new mode 100644 diff --git a/basis/db/postgresql/ffi/ffi.factor b/basis/db/postgresql/ffi/ffi.factor old mode 100755 new mode 100644 diff --git a/basis/db/postgresql/lib/lib.factor b/basis/db/postgresql/lib/lib.factor old mode 100755 new mode 100644 diff --git a/basis/db/postgresql/postgresql-tests.factor b/basis/db/postgresql/postgresql-tests.factor old mode 100755 new mode 100644 diff --git a/basis/db/postgresql/postgresql.factor b/basis/db/postgresql/postgresql.factor old mode 100755 new mode 100644 diff --git a/basis/db/sqlite/ffi/ffi.factor b/basis/db/sqlite/ffi/ffi.factor old mode 100755 new mode 100644 diff --git a/basis/db/sqlite/lib/lib.factor b/basis/db/sqlite/lib/lib.factor old mode 100755 new mode 100644 diff --git a/basis/db/sqlite/sqlite-tests.factor b/basis/db/sqlite/sqlite-tests.factor old mode 100755 new mode 100644 diff --git a/basis/db/sqlite/sqlite.factor b/basis/db/sqlite/sqlite.factor old mode 100755 new mode 100644 diff --git a/basis/db/tuples/tuples-tests.factor b/basis/db/tuples/tuples-tests.factor old mode 100755 new mode 100644 diff --git a/basis/db/tuples/tuples.factor b/basis/db/tuples/tuples.factor old mode 100755 new mode 100644 diff --git a/basis/db/types/types.factor b/basis/db/types/types.factor old mode 100755 new mode 100644 diff --git a/basis/debugger/debugger-docs.factor b/basis/debugger/debugger-docs.factor old mode 100755 new mode 100644 diff --git a/basis/debugger/debugger-tests.factor b/basis/debugger/debugger-tests.factor old mode 100755 new mode 100644 diff --git a/basis/debugger/debugger.factor b/basis/debugger/debugger.factor old mode 100755 new mode 100644 diff --git a/basis/delegate/delegate-tests.factor b/basis/delegate/delegate-tests.factor old mode 100755 new mode 100644 diff --git a/basis/delegate/delegate.factor b/basis/delegate/delegate.factor old mode 100755 new mode 100644 diff --git a/basis/delegate/protocols/protocols.factor b/basis/delegate/protocols/protocols.factor old mode 100755 new mode 100644 diff --git a/basis/dlists/dlists-docs.factor b/basis/dlists/dlists-docs.factor old mode 100755 new mode 100644 diff --git a/basis/dlists/dlists-tests.factor b/basis/dlists/dlists-tests.factor old mode 100755 new mode 100644 diff --git a/basis/dlists/dlists.factor b/basis/dlists/dlists.factor old mode 100755 new mode 100644 diff --git a/basis/documents/documents.factor b/basis/documents/documents.factor old mode 100755 new mode 100644 diff --git a/basis/editors/editors.factor b/basis/editors/editors.factor old mode 100755 new mode 100644 diff --git a/basis/editors/editpadpro/editpadpro.factor b/basis/editors/editpadpro/editpadpro.factor old mode 100755 new mode 100644 diff --git a/basis/editors/editplus/editplus.factor b/basis/editors/editplus/editplus.factor old mode 100755 new mode 100644 diff --git a/basis/editors/emacs/emacs.factor b/basis/editors/emacs/emacs.factor old mode 100755 new mode 100644 diff --git a/basis/editors/emeditor/emeditor.factor b/basis/editors/emeditor/emeditor.factor old mode 100755 new mode 100644 diff --git a/basis/editors/gvim/gvim.factor b/basis/editors/gvim/gvim.factor old mode 100755 new mode 100644 diff --git a/basis/editors/gvim/windows/windows.factor b/basis/editors/gvim/windows/windows.factor old mode 100755 new mode 100644 diff --git a/basis/editors/jedit/jedit.factor b/basis/editors/jedit/jedit.factor old mode 100755 new mode 100644 diff --git a/basis/editors/macvim/macvim.factor b/basis/editors/macvim/macvim.factor old mode 100755 new mode 100644 diff --git a/basis/editors/notepadpp/notepadpp.factor b/basis/editors/notepadpp/notepadpp.factor old mode 100755 new mode 100644 diff --git a/basis/editors/scite/scite.factor b/basis/editors/scite/scite.factor old mode 100755 new mode 100644 diff --git a/basis/editors/ted-notepad/ted-notepad.factor b/basis/editors/ted-notepad/ted-notepad.factor old mode 100755 new mode 100644 diff --git a/basis/editors/textedit/textedit.factor b/basis/editors/textedit/textedit.factor old mode 100755 new mode 100644 diff --git a/basis/editors/textmate/textmate.factor b/basis/editors/textmate/textmate.factor old mode 100755 new mode 100644 diff --git a/basis/editors/ultraedit/ultraedit.factor b/basis/editors/ultraedit/ultraedit.factor old mode 100755 new mode 100644 diff --git a/basis/editors/vim/vim.factor b/basis/editors/vim/vim.factor old mode 100755 new mode 100644 diff --git a/basis/editors/wordpad/wordpad.factor b/basis/editors/wordpad/wordpad.factor old mode 100755 new mode 100644 diff --git a/basis/float-arrays/float-arrays-tests.factor b/basis/float-arrays/float-arrays-tests.factor old mode 100755 new mode 100644 diff --git a/basis/float-arrays/float-arrays.factor b/basis/float-arrays/float-arrays.factor old mode 100755 new mode 100644 diff --git a/basis/float-vectors/float-vectors-docs.factor b/basis/float-vectors/float-vectors-docs.factor old mode 100755 new mode 100644 diff --git a/basis/float-vectors/float-vectors-tests.factor b/basis/float-vectors/float-vectors-tests.factor old mode 100755 new mode 100644 diff --git a/basis/float-vectors/float-vectors.factor b/basis/float-vectors/float-vectors.factor old mode 100755 new mode 100644 diff --git a/basis/freetype/freetype.factor b/basis/freetype/freetype.factor old mode 100755 new mode 100644 diff --git a/basis/fry/fry-docs.factor b/basis/fry/fry-docs.factor old mode 100755 new mode 100644 diff --git a/basis/fry/fry-tests.factor b/basis/fry/fry-tests.factor old mode 100755 new mode 100644 diff --git a/basis/fry/fry.factor b/basis/fry/fry.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/actions/actions-tests.factor b/basis/furnace/actions/actions-tests.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/actions/actions.factor b/basis/furnace/actions/actions.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/auth.factor b/basis/furnace/auth/auth.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/basic/basic.factor b/basis/furnace/auth/basic/basic.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/login/login-tests.factor b/basis/furnace/auth/login/login-tests.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/login/login.factor b/basis/furnace/auth/login/login.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/providers/assoc/assoc-tests.factor b/basis/furnace/auth/providers/assoc/assoc-tests.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/providers/assoc/assoc.factor b/basis/furnace/auth/providers/assoc/assoc.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/providers/db/db-tests.factor b/basis/furnace/auth/providers/db/db-tests.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/providers/db/db.factor b/basis/furnace/auth/providers/db/db.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/providers/null/null.factor b/basis/furnace/auth/providers/null/null.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/auth/providers/providers.factor b/basis/furnace/auth/providers/providers.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/db/db.factor b/basis/furnace/db/db.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/sessions/sessions-tests.factor b/basis/furnace/sessions/sessions-tests.factor old mode 100755 new mode 100644 diff --git a/basis/furnace/sessions/sessions.factor b/basis/furnace/sessions/sessions.factor old mode 100755 new mode 100644 diff --git a/basis/generalizations/generalizations-docs.factor b/basis/generalizations/generalizations-docs.factor old mode 100755 new mode 100644 diff --git a/basis/generalizations/generalizations-tests.factor b/basis/generalizations/generalizations-tests.factor old mode 100755 new mode 100644 diff --git a/basis/generalizations/generalizations.factor b/basis/generalizations/generalizations.factor old mode 100755 new mode 100644 diff --git a/basis/globs/globs.factor b/basis/globs/globs.factor old mode 100755 new mode 100644 diff --git a/basis/hash2/hash2-tests.factor b/basis/hash2/hash2-tests.factor old mode 100755 new mode 100644 diff --git a/basis/heaps/heaps-docs.factor b/basis/heaps/heaps-docs.factor old mode 100755 new mode 100644 diff --git a/basis/heaps/heaps-tests.factor b/basis/heaps/heaps-tests.factor old mode 100755 new mode 100644 diff --git a/basis/heaps/heaps.factor b/basis/heaps/heaps.factor old mode 100755 new mode 100644 diff --git a/basis/help/cookbook/cookbook.factor b/basis/help/cookbook/cookbook.factor old mode 100755 new mode 100644 diff --git a/basis/help/crossref/crossref-tests.factor b/basis/help/crossref/crossref-tests.factor old mode 100755 new mode 100644 diff --git a/basis/help/definitions/definitions-tests.factor b/basis/help/definitions/definitions-tests.factor old mode 100755 new mode 100644 diff --git a/basis/help/definitions/definitions.factor b/basis/help/definitions/definitions.factor old mode 100755 new mode 100644 diff --git a/basis/help/handbook/handbook.factor b/basis/help/handbook/handbook.factor old mode 100755 new mode 100644 diff --git a/basis/help/help-docs.factor b/basis/help/help-docs.factor old mode 100755 new mode 100644 diff --git a/basis/help/help.factor b/basis/help/help.factor old mode 100755 new mode 100644 diff --git a/basis/help/lint/lint.factor b/basis/help/lint/lint.factor old mode 100755 new mode 100644 diff --git a/basis/help/markup/markup.factor b/basis/help/markup/markup.factor old mode 100755 new mode 100644 diff --git a/basis/help/stylesheet/stylesheet.factor b/basis/help/stylesheet/stylesheet.factor old mode 100755 new mode 100644 diff --git a/basis/help/syntax/syntax-tests.factor b/basis/help/syntax/syntax-tests.factor old mode 100755 new mode 100644 diff --git a/basis/help/syntax/syntax.factor b/basis/help/syntax/syntax.factor old mode 100755 new mode 100644 diff --git a/basis/help/topics/topics.factor b/basis/help/topics/topics.factor old mode 100755 new mode 100644 diff --git a/basis/help/tutorial/tutorial.factor b/basis/help/tutorial/tutorial.factor old mode 100755 new mode 100644 diff --git a/basis/html/streams/streams.factor b/basis/html/streams/streams.factor old mode 100755 new mode 100644 diff --git a/basis/html/templates/fhtml/fhtml-tests.factor b/basis/html/templates/fhtml/fhtml-tests.factor old mode 100755 new mode 100644 diff --git a/basis/html/templates/fhtml/fhtml.factor b/basis/html/templates/fhtml/fhtml.factor old mode 100755 new mode 100644 diff --git a/basis/http/client/client-tests.factor b/basis/http/client/client-tests.factor old mode 100755 new mode 100644 diff --git a/basis/http/client/client.factor b/basis/http/client/client.factor old mode 100755 new mode 100644 diff --git a/basis/http/http-tests.factor b/basis/http/http-tests.factor old mode 100755 new mode 100644 diff --git a/basis/http/http.factor b/basis/http/http.factor old mode 100755 new mode 100644 diff --git a/basis/http/server/cgi/cgi.factor b/basis/http/server/cgi/cgi.factor old mode 100755 new mode 100644 diff --git a/basis/http/server/server.factor b/basis/http/server/server.factor old mode 100755 new mode 100644 diff --git a/basis/http/server/static/static.factor b/basis/http/server/static/static.factor old mode 100755 new mode 100644 diff --git a/basis/inspector/inspector.factor b/basis/inspector/inspector.factor old mode 100755 new mode 100644 diff --git a/basis/interval-maps/interval-maps-docs.factor b/basis/interval-maps/interval-maps-docs.factor old mode 100755 new mode 100644 diff --git a/basis/interval-maps/interval-maps-tests.factor b/basis/interval-maps/interval-maps-tests.factor old mode 100755 new mode 100644 diff --git a/basis/interval-maps/interval-maps.factor b/basis/interval-maps/interval-maps.factor old mode 100755 new mode 100644 diff --git a/basis/io/buffers/buffers-docs.factor b/basis/io/buffers/buffers-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/buffers/buffers-tests.factor b/basis/io/buffers/buffers-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/buffers/buffers.factor b/basis/io/buffers/buffers.factor old mode 100755 new mode 100644 diff --git a/basis/io/encodings/8-bit/8-bit.factor b/basis/io/encodings/8-bit/8-bit.factor old mode 100755 new mode 100644 diff --git a/basis/io/encodings/ascii/ascii.factor b/basis/io/encodings/ascii/ascii.factor old mode 100755 new mode 100644 diff --git a/basis/io/encodings/iana/iana.factor b/basis/io/encodings/iana/iana.factor old mode 100755 new mode 100644 diff --git a/basis/io/encodings/utf16/utf16-tests.factor b/basis/io/encodings/utf16/utf16-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/encodings/utf16/utf16.factor b/basis/io/encodings/utf16/utf16.factor old mode 100755 new mode 100644 diff --git a/basis/io/launcher/launcher-docs.factor b/basis/io/launcher/launcher-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/launcher/launcher-tests.factor b/basis/io/launcher/launcher-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/launcher/launcher.factor b/basis/io/launcher/launcher.factor old mode 100755 new mode 100644 diff --git a/basis/io/mmap/mmap-docs.factor b/basis/io/mmap/mmap-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/mmap/mmap-tests.factor b/basis/io/mmap/mmap-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/mmap/mmap.factor b/basis/io/mmap/mmap.factor old mode 100755 new mode 100644 diff --git a/basis/io/monitors/monitors-docs.factor b/basis/io/monitors/monitors-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/monitors/monitors-tests.factor b/basis/io/monitors/monitors-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/monitors/monitors.factor b/basis/io/monitors/monitors.factor old mode 100755 new mode 100644 diff --git a/basis/io/pipes/pipes-tests.factor b/basis/io/pipes/pipes-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/ports/ports-docs.factor b/basis/io/ports/ports-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/ports/ports.factor b/basis/io/ports/ports.factor old mode 100755 new mode 100644 diff --git a/basis/io/servers/connection/connection-docs.factor b/basis/io/servers/connection/connection-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/servers/connection/connection-tests.factor b/basis/io/servers/connection/connection-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/servers/connection/connection.factor b/basis/io/servers/connection/connection.factor old mode 100755 new mode 100644 diff --git a/basis/io/sockets/secure/secure-tests.factor b/basis/io/sockets/secure/secure-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/sockets/secure/secure.factor b/basis/io/sockets/secure/secure.factor old mode 100755 new mode 100644 diff --git a/basis/io/sockets/sockets-docs.factor b/basis/io/sockets/sockets-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/sockets/sockets-tests.factor b/basis/io/sockets/sockets-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/sockets/sockets.factor b/basis/io/sockets/sockets.factor old mode 100755 new mode 100644 diff --git a/basis/io/streams/duplex/duplex-docs.factor b/basis/io/streams/duplex/duplex-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/streams/duplex/duplex-tests.factor b/basis/io/streams/duplex/duplex-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/streams/duplex/duplex.factor b/basis/io/streams/duplex/duplex.factor old mode 100755 new mode 100644 diff --git a/basis/io/streams/null/null.factor b/basis/io/streams/null/null.factor old mode 100755 new mode 100644 diff --git a/basis/io/thread/thread.factor b/basis/io/thread/thread.factor old mode 100755 new mode 100644 diff --git a/basis/io/timeouts/timeouts-docs.factor b/basis/io/timeouts/timeouts-docs.factor old mode 100755 new mode 100644 diff --git a/basis/io/timeouts/timeouts.factor b/basis/io/timeouts/timeouts.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/backend/backend.factor b/basis/io/unix/backend/backend.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/bsd/bsd.factor b/basis/io/unix/bsd/bsd.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/files/files-tests.factor b/basis/io/unix/files/files-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/files/files.factor b/basis/io/unix/files/files.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/kqueue/kqueue.factor b/basis/io/unix/kqueue/kqueue.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/launcher/launcher-tests.factor b/basis/io/unix/launcher/launcher-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/launcher/launcher.factor b/basis/io/unix/launcher/launcher.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/launcher/parser/parser-tests.factor b/basis/io/unix/launcher/parser/parser-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/launcher/parser/parser.factor b/basis/io/unix/launcher/parser/parser.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/linux/linux.factor b/basis/io/unix/linux/linux.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/mmap/mmap.factor b/basis/io/unix/mmap/mmap.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/select/select.factor b/basis/io/unix/select/select.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/sockets/secure/secure.factor b/basis/io/unix/sockets/secure/secure.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/sockets/sockets.factor b/basis/io/unix/sockets/sockets.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/unix-tests.factor b/basis/io/unix/unix-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/unix/unix.factor b/basis/io/unix/unix.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/files/files.factor b/basis/io/windows/files/files.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/files/unique/unique.factor b/basis/io/windows/files/unique/unique.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/launcher/launcher-tests.factor b/basis/io/windows/launcher/launcher-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/launcher/launcher.factor b/basis/io/windows/launcher/launcher.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/mmap/mmap.factor b/basis/io/windows/mmap/mmap.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/backend/backend.factor b/basis/io/windows/nt/backend/backend.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/files/files-tests.factor b/basis/io/windows/nt/files/files-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/files/files.factor b/basis/io/windows/nt/files/files.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/launcher/launcher-tests.factor b/basis/io/windows/nt/launcher/launcher-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/launcher/launcher.factor b/basis/io/windows/nt/launcher/launcher.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/launcher/test/append.factor b/basis/io/windows/nt/launcher/test/append.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/launcher/test/env.factor b/basis/io/windows/nt/launcher/test/env.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/launcher/test/stderr.factor b/basis/io/windows/nt/launcher/test/stderr.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/monitors/monitors-tests.factor b/basis/io/windows/nt/monitors/monitors-tests.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/monitors/monitors.factor b/basis/io/windows/nt/monitors/monitors.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/nt.factor b/basis/io/windows/nt/nt.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/pipes/pipes.factor b/basis/io/windows/nt/pipes/pipes.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/privileges/privileges.factor b/basis/io/windows/nt/privileges/privileges.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/nt/sockets/sockets.factor b/basis/io/windows/nt/sockets/sockets.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/privileges/privileges.factor b/basis/io/windows/privileges/privileges.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/sockets/sockets.factor b/basis/io/windows/sockets/sockets.factor old mode 100755 new mode 100644 diff --git a/basis/io/windows/windows.factor b/basis/io/windows/windows.factor old mode 100755 new mode 100644 diff --git a/basis/json/reader/reader.factor b/basis/json/reader/reader.factor old mode 100755 new mode 100644 diff --git a/basis/lcs/lcs-docs.factor b/basis/lcs/lcs-docs.factor old mode 100755 new mode 100644 diff --git a/basis/lcs/lcs-tests.factor b/basis/lcs/lcs-tests.factor old mode 100755 new mode 100644 diff --git a/basis/lcs/lcs.factor b/basis/lcs/lcs.factor old mode 100755 new mode 100644 diff --git a/basis/libc/libc-tests.factor b/basis/libc/libc-tests.factor old mode 100755 new mode 100644 diff --git a/basis/libc/libc.factor b/basis/libc/libc.factor old mode 100755 new mode 100644 diff --git a/basis/listener/listener-docs.factor b/basis/listener/listener-docs.factor old mode 100755 new mode 100644 diff --git a/basis/listener/listener-tests.factor b/basis/listener/listener-tests.factor old mode 100755 new mode 100644 diff --git a/basis/listener/listener.factor b/basis/listener/listener.factor old mode 100755 new mode 100644 diff --git a/basis/locals/locals-tests.factor b/basis/locals/locals-tests.factor old mode 100755 new mode 100644 diff --git a/basis/locals/locals.factor b/basis/locals/locals.factor old mode 100755 new mode 100644 diff --git a/basis/logging/analysis/analysis.factor b/basis/logging/analysis/analysis.factor old mode 100755 new mode 100644 diff --git a/basis/logging/insomniac/insomniac-docs.factor b/basis/logging/insomniac/insomniac-docs.factor old mode 100755 new mode 100644 diff --git a/basis/logging/insomniac/insomniac.factor b/basis/logging/insomniac/insomniac.factor old mode 100755 new mode 100644 diff --git a/basis/logging/logging-docs.factor b/basis/logging/logging-docs.factor old mode 100755 new mode 100644 diff --git a/basis/logging/logging.factor b/basis/logging/logging.factor old mode 100755 new mode 100644 diff --git a/basis/logging/parser/parser.factor b/basis/logging/parser/parser.factor old mode 100755 new mode 100644 diff --git a/basis/logging/server/server.factor b/basis/logging/server/server.factor old mode 100755 new mode 100644 diff --git a/basis/macros/macros.factor b/basis/macros/macros.factor old mode 100755 new mode 100644 diff --git a/basis/match/match-tests.factor b/basis/match/match-tests.factor old mode 100755 new mode 100644 diff --git a/basis/match/match.factor b/basis/match/match.factor old mode 100755 new mode 100644 diff --git a/basis/math/bitwise/bitwise-tests.factor b/basis/math/bitwise/bitwise-tests.factor old mode 100755 new mode 100644 diff --git a/basis/math/complex/complex-docs.factor b/basis/math/complex/complex-docs.factor old mode 100755 new mode 100644 diff --git a/basis/math/complex/complex-tests.factor b/basis/math/complex/complex-tests.factor old mode 100755 new mode 100644 diff --git a/basis/math/complex/complex.factor b/basis/math/complex/complex.factor old mode 100755 new mode 100644 diff --git a/basis/math/constants/constants-docs.factor b/basis/math/constants/constants-docs.factor old mode 100755 new mode 100644 diff --git a/basis/math/constants/constants.factor b/basis/math/constants/constants.factor old mode 100755 new mode 100644 diff --git a/basis/math/functions/functions-docs.factor b/basis/math/functions/functions-docs.factor old mode 100755 new mode 100644 diff --git a/basis/math/functions/functions-tests.factor b/basis/math/functions/functions-tests.factor old mode 100755 new mode 100644 diff --git a/basis/math/functions/functions.factor b/basis/math/functions/functions.factor old mode 100755 new mode 100644 diff --git a/basis/math/intervals/intervals-tests.factor b/basis/math/intervals/intervals-tests.factor old mode 100755 new mode 100644 diff --git a/basis/math/intervals/intervals.factor b/basis/math/intervals/intervals.factor old mode 100755 new mode 100644 diff --git a/basis/math/libm/libm.factor b/basis/math/libm/libm.factor old mode 100755 new mode 100644 diff --git a/basis/math/ranges/ranges.factor b/basis/math/ranges/ranges.factor old mode 100755 new mode 100644 diff --git a/basis/math/ratios/ratios-docs.factor b/basis/math/ratios/ratios-docs.factor old mode 100755 new mode 100644 diff --git a/basis/math/ratios/ratios-tests.factor b/basis/math/ratios/ratios-tests.factor old mode 100755 new mode 100644 diff --git a/basis/math/ratios/ratios.factor b/basis/math/ratios/ratios.factor old mode 100755 new mode 100644 diff --git a/basis/math/vectors/vectors-docs.factor b/basis/math/vectors/vectors-docs.factor old mode 100755 new mode 100644 diff --git a/basis/math/vectors/vectors.factor b/basis/math/vectors/vectors.factor old mode 100755 new mode 100644 diff --git a/basis/memoize/memoize-docs.factor b/basis/memoize/memoize-docs.factor old mode 100755 new mode 100644 diff --git a/basis/memoize/memoize.factor b/basis/memoize/memoize.factor old mode 100755 new mode 100644 diff --git a/basis/mime-types/mime-types.factor b/basis/mime-types/mime-types.factor old mode 100755 new mode 100644 diff --git a/basis/mirrors/mirrors-docs.factor b/basis/mirrors/mirrors-docs.factor old mode 100755 new mode 100644 diff --git a/basis/mirrors/mirrors-tests.factor b/basis/mirrors/mirrors-tests.factor old mode 100755 new mode 100644 diff --git a/basis/mirrors/mirrors.factor b/basis/mirrors/mirrors.factor old mode 100755 new mode 100644 diff --git a/basis/models/compose/compose-docs.factor b/basis/models/compose/compose-docs.factor old mode 100755 new mode 100644 diff --git a/basis/models/compose/compose-tests.factor b/basis/models/compose/compose-tests.factor old mode 100755 new mode 100644 diff --git a/basis/models/compose/compose.factor b/basis/models/compose/compose.factor old mode 100755 new mode 100644 diff --git a/basis/models/delay/delay-docs.factor b/basis/models/delay/delay-docs.factor old mode 100755 new mode 100644 diff --git a/basis/models/delay/delay.factor b/basis/models/delay/delay.factor old mode 100755 new mode 100644 diff --git a/basis/models/filter/filter-docs.factor b/basis/models/filter/filter-docs.factor old mode 100755 new mode 100644 diff --git a/basis/models/filter/filter-tests.factor b/basis/models/filter/filter-tests.factor old mode 100755 new mode 100644 diff --git a/basis/models/filter/filter.factor b/basis/models/filter/filter.factor old mode 100755 new mode 100644 diff --git a/basis/models/history/history-docs.factor b/basis/models/history/history-docs.factor old mode 100755 new mode 100644 diff --git a/basis/models/history/history-tests.factor b/basis/models/history/history-tests.factor old mode 100755 new mode 100644 diff --git a/basis/models/history/history.factor b/basis/models/history/history.factor old mode 100755 new mode 100644 diff --git a/basis/models/mapping/mapping-tests.factor b/basis/models/mapping/mapping-tests.factor old mode 100755 new mode 100644 diff --git a/basis/models/mapping/mapping.factor b/basis/models/mapping/mapping.factor old mode 100755 new mode 100644 diff --git a/basis/models/models-docs.factor b/basis/models/models-docs.factor old mode 100755 new mode 100644 diff --git a/basis/models/models-tests.factor b/basis/models/models-tests.factor old mode 100755 new mode 100644 diff --git a/basis/models/models.factor b/basis/models/models.factor old mode 100755 new mode 100644 diff --git a/basis/models/range/range-docs.factor b/basis/models/range/range-docs.factor old mode 100755 new mode 100644 diff --git a/basis/models/range/range-tests.factor b/basis/models/range/range-tests.factor old mode 100755 new mode 100644 diff --git a/basis/models/range/range.factor b/basis/models/range/range.factor old mode 100755 new mode 100644 diff --git a/basis/multiline/multiline-tests.factor b/basis/multiline/multiline-tests.factor old mode 100755 new mode 100644 diff --git a/basis/multiline/multiline.factor b/basis/multiline/multiline.factor old mode 100755 new mode 100644 diff --git a/basis/opengl/gl/windows/windows.factor b/basis/opengl/gl/windows/windows.factor old mode 100755 new mode 100644 diff --git a/basis/opengl/opengl.factor b/basis/opengl/opengl.factor old mode 100755 new mode 100644 diff --git a/basis/openssl/libcrypto/libcrypto.factor b/basis/openssl/libcrypto/libcrypto.factor old mode 100755 new mode 100644 diff --git a/basis/openssl/libssl/libssl.factor b/basis/openssl/libssl/libssl.factor old mode 100755 new mode 100644 diff --git a/basis/openssl/openssl-tests.factor b/basis/openssl/openssl-tests.factor old mode 100755 new mode 100644 diff --git a/basis/openssl/openssl.factor b/basis/openssl/openssl.factor old mode 100755 new mode 100644 diff --git a/basis/peg/parsers/parsers-docs.factor b/basis/peg/parsers/parsers-docs.factor old mode 100755 new mode 100644 diff --git a/basis/peg/parsers/parsers.factor b/basis/peg/parsers/parsers.factor old mode 100755 new mode 100644 diff --git a/basis/peg/peg.factor b/basis/peg/peg.factor old mode 100755 new mode 100644 diff --git a/basis/peg/search/search-docs.factor b/basis/peg/search/search-docs.factor old mode 100755 new mode 100644 diff --git a/basis/peg/search/search-tests.factor b/basis/peg/search/search-tests.factor old mode 100755 new mode 100644 diff --git a/basis/peg/search/search.factor b/basis/peg/search/search.factor old mode 100755 new mode 100644 diff --git a/basis/prettyprint/backend/backend-docs.factor b/basis/prettyprint/backend/backend-docs.factor old mode 100755 new mode 100644 diff --git a/basis/prettyprint/backend/backend.factor b/basis/prettyprint/backend/backend.factor old mode 100755 new mode 100644 diff --git a/basis/prettyprint/prettyprint-docs.factor b/basis/prettyprint/prettyprint-docs.factor old mode 100755 new mode 100644 diff --git a/basis/prettyprint/prettyprint-tests.factor b/basis/prettyprint/prettyprint-tests.factor old mode 100755 new mode 100644 diff --git a/basis/prettyprint/prettyprint.factor b/basis/prettyprint/prettyprint.factor old mode 100755 new mode 100644 diff --git a/basis/prettyprint/sections/sections-docs.factor b/basis/prettyprint/sections/sections-docs.factor old mode 100755 new mode 100644 diff --git a/basis/qualified/qualified-docs.factor b/basis/qualified/qualified-docs.factor old mode 100755 new mode 100644 diff --git a/basis/random/dummy/dummy.factor b/basis/random/dummy/dummy.factor old mode 100755 new mode 100644 diff --git a/basis/random/mersenne-twister/mersenne-twister-tests.factor b/basis/random/mersenne-twister/mersenne-twister-tests.factor old mode 100755 new mode 100644 diff --git a/basis/random/mersenne-twister/mersenne-twister.factor b/basis/random/mersenne-twister/mersenne-twister.factor old mode 100755 new mode 100644 diff --git a/basis/random/random.factor b/basis/random/random.factor old mode 100755 new mode 100644 diff --git a/basis/sequences/deep/deep-tests.factor b/basis/sequences/deep/deep-tests.factor old mode 100755 new mode 100644 diff --git a/basis/sequences/next/next.factor b/basis/sequences/next/next.factor old mode 100755 new mode 100644 diff --git a/basis/serialize/serialize-docs.factor b/basis/serialize/serialize-docs.factor old mode 100755 new mode 100644 diff --git a/basis/serialize/serialize-tests.factor b/basis/serialize/serialize-tests.factor old mode 100755 new mode 100644 diff --git a/basis/serialize/serialize.factor b/basis/serialize/serialize.factor old mode 100755 new mode 100644 diff --git a/basis/shuffle/shuffle-tests.factor b/basis/shuffle/shuffle-tests.factor old mode 100755 new mode 100644 diff --git a/basis/smtp/server/server.factor b/basis/smtp/server/server.factor old mode 100755 new mode 100644 diff --git a/basis/smtp/smtp-tests.factor b/basis/smtp/smtp-tests.factor old mode 100755 new mode 100644 diff --git a/basis/smtp/smtp.factor b/basis/smtp/smtp.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/backend/backend.factor b/basis/stack-checker/backend/backend.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/known-words/known-words.factor b/basis/stack-checker/known-words/known-words.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/stack-checker-docs.factor b/basis/stack-checker/stack-checker-docs.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/stack-checker-tests.factor b/basis/stack-checker/stack-checker-tests.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/stack-checker.factor b/basis/stack-checker/stack-checker.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/state/state.factor b/basis/stack-checker/state/state.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/transforms/transforms-docs.factor b/basis/stack-checker/transforms/transforms-docs.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/transforms/transforms-tests.factor b/basis/stack-checker/transforms/transforms-tests.factor old mode 100755 new mode 100644 diff --git a/basis/stack-checker/transforms/transforms.factor b/basis/stack-checker/transforms/transforms.factor old mode 100755 new mode 100644 diff --git a/basis/state-parser/state-parser-tests.factor b/basis/state-parser/state-parser-tests.factor old mode 100755 new mode 100644 diff --git a/basis/symbols/symbols-tests.factor b/basis/symbols/symbols-tests.factor old mode 100755 new mode 100644 diff --git a/basis/symbols/symbols.factor b/basis/symbols/symbols.factor old mode 100755 new mode 100644 diff --git a/basis/syndication/syndication-tests.factor b/basis/syndication/syndication-tests.factor old mode 100755 new mode 100644 diff --git a/basis/threads/threads-docs.factor b/basis/threads/threads-docs.factor old mode 100755 new mode 100644 diff --git a/basis/threads/threads-tests.factor b/basis/threads/threads-tests.factor old mode 100755 new mode 100644 diff --git a/basis/threads/threads.factor b/basis/threads/threads.factor old mode 100755 new mode 100644 diff --git a/basis/tools/annotations/annotations-docs.factor b/basis/tools/annotations/annotations-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/annotations/annotations-tests.factor b/basis/tools/annotations/annotations-tests.factor old mode 100755 new mode 100644 diff --git a/basis/tools/annotations/annotations.factor b/basis/tools/annotations/annotations.factor old mode 100755 new mode 100644 diff --git a/basis/tools/completion/completion.factor b/basis/tools/completion/completion.factor old mode 100755 new mode 100644 diff --git a/basis/tools/crossref/crossref-tests.factor b/basis/tools/crossref/crossref-tests.factor old mode 100755 new mode 100644 diff --git a/basis/tools/crossref/crossref.factor b/basis/tools/crossref/crossref.factor old mode 100755 new mode 100644 diff --git a/basis/tools/crossref/test/foo.factor b/basis/tools/crossref/test/foo.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/backend/backend.factor b/basis/tools/deploy/backend/backend.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/config/config-docs.factor b/basis/tools/deploy/config/config-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/config/config.factor b/basis/tools/deploy/config/config.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/deploy-docs.factor b/basis/tools/deploy/deploy-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/deploy-tests.factor b/basis/tools/deploy/deploy-tests.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/deploy.factor b/basis/tools/deploy/deploy.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/macosx/macosx.factor b/basis/tools/deploy/macosx/macosx.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/shaker/strip-cocoa.factor b/basis/tools/deploy/shaker/strip-cocoa.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/shaker/strip-debugger.factor b/basis/tools/deploy/shaker/strip-debugger.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/shaker/strip-libc.factor b/basis/tools/deploy/shaker/strip-libc.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/test/1/1.factor b/basis/tools/deploy/test/1/1.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/test/1/deploy.factor b/basis/tools/deploy/test/1/deploy.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/test/2/2.factor b/basis/tools/deploy/test/2/2.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/test/2/deploy.factor b/basis/tools/deploy/test/2/deploy.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/test/3/3.factor b/basis/tools/deploy/test/3/3.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/test/3/deploy.factor b/basis/tools/deploy/test/3/deploy.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/windows/windows-tests.factor b/basis/tools/deploy/windows/windows-tests.factor old mode 100755 new mode 100644 diff --git a/basis/tools/deploy/windows/windows.factor b/basis/tools/deploy/windows/windows.factor old mode 100755 new mode 100644 diff --git a/basis/tools/disassembler/disassembler-docs.factor b/basis/tools/disassembler/disassembler-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/disassembler/disassembler-tests.factor b/basis/tools/disassembler/disassembler-tests.factor old mode 100755 new mode 100644 diff --git a/basis/tools/disassembler/disassembler.factor b/basis/tools/disassembler/disassembler.factor old mode 100755 new mode 100644 diff --git a/basis/tools/memory/memory-docs.factor b/basis/tools/memory/memory-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/memory/memory.factor b/basis/tools/memory/memory.factor old mode 100755 new mode 100644 diff --git a/basis/tools/profiler/profiler-docs.factor b/basis/tools/profiler/profiler-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/profiler/profiler-tests.factor b/basis/tools/profiler/profiler-tests.factor old mode 100755 new mode 100644 diff --git a/basis/tools/profiler/profiler.factor b/basis/tools/profiler/profiler.factor old mode 100755 new mode 100644 diff --git a/basis/tools/test/test-docs.factor b/basis/tools/test/test-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/test/test.factor b/basis/tools/test/test.factor old mode 100755 new mode 100644 diff --git a/basis/tools/test/ui/ui.factor b/basis/tools/test/ui/ui.factor old mode 100755 new mode 100644 diff --git a/basis/tools/threads/threads.factor b/basis/tools/threads/threads.factor old mode 100755 new mode 100644 diff --git a/basis/tools/time/time-docs.factor b/basis/tools/time/time-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/vocabs/browser/browser-docs.factor b/basis/tools/vocabs/browser/browser-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/vocabs/browser/browser-tests.factor b/basis/tools/vocabs/browser/browser-tests.factor old mode 100755 new mode 100644 diff --git a/basis/tools/vocabs/browser/browser.factor b/basis/tools/vocabs/browser/browser.factor old mode 100755 new mode 100644 diff --git a/basis/tools/vocabs/monitor/monitor.factor b/basis/tools/vocabs/monitor/monitor.factor old mode 100755 new mode 100644 diff --git a/basis/tools/vocabs/vocabs-docs.factor b/basis/tools/vocabs/vocabs-docs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/vocabs/vocabs.factor b/basis/tools/vocabs/vocabs.factor old mode 100755 new mode 100644 diff --git a/basis/tools/walker/debug/debug.factor b/basis/tools/walker/debug/debug.factor old mode 100755 new mode 100644 diff --git a/basis/tools/walker/walker-tests.factor b/basis/tools/walker/walker-tests.factor old mode 100755 new mode 100644 diff --git a/basis/tools/walker/walker.factor b/basis/tools/walker/walker.factor old mode 100755 new mode 100644 diff --git a/basis/tuple-arrays/tuple-arrays-tests.factor b/basis/tuple-arrays/tuple-arrays-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/backend/backend.factor b/basis/ui/backend/backend.factor old mode 100755 new mode 100644 diff --git a/basis/ui/cocoa/cocoa.factor b/basis/ui/cocoa/cocoa.factor old mode 100755 new mode 100644 diff --git a/basis/ui/cocoa/tools/tools.factor b/basis/ui/cocoa/tools/tools.factor old mode 100755 new mode 100644 diff --git a/basis/ui/cocoa/views/views.factor b/basis/ui/cocoa/views/views.factor old mode 100755 new mode 100644 diff --git a/basis/ui/commands/commands.factor b/basis/ui/commands/commands.factor old mode 100755 new mode 100644 diff --git a/basis/ui/freetype/freetype-docs.factor b/basis/ui/freetype/freetype-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/freetype/freetype.factor b/basis/ui/freetype/freetype.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/books/books-docs.factor b/basis/ui/gadgets/books/books-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/books/books-tests.factor b/basis/ui/gadgets/books/books-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/books/books.factor b/basis/ui/gadgets/books/books.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/buttons/buttons-docs.factor b/basis/ui/gadgets/buttons/buttons-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/buttons/buttons-tests.factor b/basis/ui/gadgets/buttons/buttons-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/buttons/buttons.factor b/basis/ui/gadgets/buttons/buttons.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/canvas/canvas-tests.factor b/basis/ui/gadgets/canvas/canvas-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/canvas/canvas.factor b/basis/ui/gadgets/canvas/canvas.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/editors/editors-docs.factor b/basis/ui/gadgets/editors/editors-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/editors/editors-tests.factor b/basis/ui/gadgets/editors/editors-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/editors/editors.factor b/basis/ui/gadgets/editors/editors.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/frames/frames-docs.factor b/basis/ui/gadgets/frames/frames-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/gadgets-docs.factor b/basis/ui/gadgets/gadgets-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/gadgets-tests.factor b/basis/ui/gadgets/gadgets-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/gadgets.factor b/basis/ui/gadgets/gadgets.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/grid-lines/grid-lines-docs.factor b/basis/ui/gadgets/grid-lines/grid-lines-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/grid-lines/grid-lines.factor b/basis/ui/gadgets/grid-lines/grid-lines.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/grids/grids-docs.factor b/basis/ui/gadgets/grids/grids-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/incremental/incremental-docs.factor b/basis/ui/gadgets/incremental/incremental-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/incremental/incremental.factor b/basis/ui/gadgets/incremental/incremental.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/labelled/labelled-docs.factor b/basis/ui/gadgets/labelled/labelled-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/labelled/labelled.factor b/basis/ui/gadgets/labelled/labelled.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/labels/labels-docs.factor b/basis/ui/gadgets/labels/labels-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/labels/labels.factor b/basis/ui/gadgets/labels/labels.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/lists/lists-docs.factor b/basis/ui/gadgets/lists/lists-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/lists/lists.factor b/basis/ui/gadgets/lists/lists.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/menus/menus-docs.factor b/basis/ui/gadgets/menus/menus-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/packs/packs-docs.factor b/basis/ui/gadgets/packs/packs-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/packs/packs.factor b/basis/ui/gadgets/packs/packs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/panes/panes-docs.factor b/basis/ui/gadgets/panes/panes-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/panes/panes-tests.factor b/basis/ui/gadgets/panes/panes-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/panes/panes.factor b/basis/ui/gadgets/panes/panes.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/presentations/presentations-docs.factor b/basis/ui/gadgets/presentations/presentations-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/scrollers/scrollers-docs.factor b/basis/ui/gadgets/scrollers/scrollers-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/scrollers/scrollers-tests.factor b/basis/ui/gadgets/scrollers/scrollers-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/scrollers/scrollers.factor b/basis/ui/gadgets/scrollers/scrollers.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/sliders/sliders-docs.factor b/basis/ui/gadgets/sliders/sliders-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/sliders/sliders.factor b/basis/ui/gadgets/sliders/sliders.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/slots/slots.factor b/basis/ui/gadgets/slots/slots.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/status-bar/status-bar-docs.factor b/basis/ui/gadgets/status-bar/status-bar-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/status-bar/status-bar.factor b/basis/ui/gadgets/status-bar/status-bar.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/tracks/tracks-docs.factor b/basis/ui/gadgets/tracks/tracks-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/viewports/viewports-docs.factor b/basis/ui/gadgets/viewports/viewports-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/viewports/viewports.factor b/basis/ui/gadgets/viewports/viewports.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/worlds/worlds-docs.factor b/basis/ui/gadgets/worlds/worlds-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gadgets/worlds/worlds.factor b/basis/ui/gadgets/worlds/worlds.factor old mode 100755 new mode 100644 diff --git a/basis/ui/gestures/gestures.factor b/basis/ui/gestures/gestures.factor old mode 100755 new mode 100644 diff --git a/basis/ui/operations/operations-tests.factor b/basis/ui/operations/operations-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/operations/operations.factor b/basis/ui/operations/operations.factor old mode 100755 new mode 100644 diff --git a/basis/ui/render/render-docs.factor b/basis/ui/render/render-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/browser/browser-tests.factor b/basis/ui/tools/browser/browser-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/browser/browser.factor b/basis/ui/tools/browser/browser.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/debugger/debugger-docs.factor b/basis/ui/tools/debugger/debugger-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/deploy/deploy-docs.factor b/basis/ui/tools/deploy/deploy-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/deploy/deploy.factor b/basis/ui/tools/deploy/deploy.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/interactor/interactor-docs.factor b/basis/ui/tools/interactor/interactor-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/interactor/interactor-tests.factor b/basis/ui/tools/interactor/interactor-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/interactor/interactor.factor b/basis/ui/tools/interactor/interactor.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/listener/listener-tests.factor b/basis/ui/tools/listener/listener-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/listener/listener.factor b/basis/ui/tools/listener/listener.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/operations/operations.factor b/basis/ui/tools/operations/operations.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/profiler/profiler.factor b/basis/ui/tools/profiler/profiler.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/search/search-tests.factor b/basis/ui/tools/search/search-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/search/search.factor b/basis/ui/tools/search/search.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/tools-docs.factor b/basis/ui/tools/tools-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/tools-tests.factor b/basis/ui/tools/tools-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/tools.factor b/basis/ui/tools/tools.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/traceback/traceback.factor b/basis/ui/tools/traceback/traceback.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/walker/walker-docs.factor b/basis/ui/tools/walker/walker-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/walker/walker-tests.factor b/basis/ui/tools/walker/walker-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/walker/walker.factor b/basis/ui/tools/walker/walker.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/workspace/workspace-tests.factor b/basis/ui/tools/workspace/workspace-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/tools/workspace/workspace.factor b/basis/ui/tools/workspace/workspace.factor old mode 100755 new mode 100644 diff --git a/basis/ui/traverse/traverse-tests.factor b/basis/ui/traverse/traverse-tests.factor old mode 100755 new mode 100644 diff --git a/basis/ui/ui-docs.factor b/basis/ui/ui-docs.factor old mode 100755 new mode 100644 diff --git a/basis/ui/ui.factor b/basis/ui/ui.factor old mode 100755 new mode 100644 diff --git a/basis/ui/windows/windows.factor b/basis/ui/windows/windows.factor old mode 100755 new mode 100644 diff --git a/basis/ui/x11/x11.factor b/basis/ui/x11/x11.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/breaks/breaks-tests.factor b/basis/unicode/breaks/breaks-tests.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/breaks/breaks.factor b/basis/unicode/breaks/breaks.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/case/case-tests.factor b/basis/unicode/case/case-tests.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/case/case.factor b/basis/unicode/case/case.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/collation/collation-tests.factor b/basis/unicode/collation/collation-tests.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/collation/collation.factor b/basis/unicode/collation/collation.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/data/data.factor b/basis/unicode/data/data.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/normalize/normalize-tests.factor b/basis/unicode/normalize/normalize-tests.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/normalize/normalize.factor b/basis/unicode/normalize/normalize.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/script/script-docs.factor b/basis/unicode/script/script-docs.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/script/script-tests.factor b/basis/unicode/script/script-tests.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/script/script.factor b/basis/unicode/script/script.factor old mode 100755 new mode 100644 diff --git a/basis/unicode/syntax/syntax.factor b/basis/unicode/syntax/syntax.factor old mode 100755 new mode 100644 diff --git a/basis/unix/bsd/bsd.factor b/basis/unix/bsd/bsd.factor old mode 100755 new mode 100644 diff --git a/basis/unix/linux/ifreq/ifreq.factor b/basis/unix/linux/ifreq/ifreq.factor old mode 100755 new mode 100644 diff --git a/basis/unix/linux/linux.factor b/basis/unix/linux/linux.factor old mode 100755 new mode 100644 diff --git a/basis/unix/process/process.factor b/basis/unix/process/process.factor old mode 100755 new mode 100644 diff --git a/basis/unix/types/freebsd/freebsd.factor b/basis/unix/types/freebsd/freebsd.factor old mode 100755 new mode 100644 diff --git a/basis/unix/types/netbsd/32/32.factor b/basis/unix/types/netbsd/32/32.factor old mode 100755 new mode 100644 diff --git a/basis/unix/types/netbsd/64/64.factor b/basis/unix/types/netbsd/64/64.factor old mode 100755 new mode 100644 diff --git a/basis/unix/types/netbsd/netbsd.factor b/basis/unix/types/netbsd/netbsd.factor old mode 100755 new mode 100644 diff --git a/basis/unix/types/openbsd/openbsd.factor b/basis/unix/types/openbsd/openbsd.factor old mode 100755 new mode 100644 diff --git a/basis/unix/unix.factor b/basis/unix/unix.factor old mode 100755 new mode 100644 diff --git a/basis/values/values-docs.factor b/basis/values/values-docs.factor old mode 100755 new mode 100644 diff --git a/basis/values/values-tests.factor b/basis/values/values-tests.factor old mode 100755 new mode 100644 diff --git a/basis/values/values.factor b/basis/values/values.factor old mode 100755 new mode 100644 diff --git a/basis/windows/advapi32/advapi32.factor b/basis/windows/advapi32/advapi32.factor old mode 100755 new mode 100644 diff --git a/basis/windows/com/com-tests.factor b/basis/windows/com/com-tests.factor old mode 100755 new mode 100644 diff --git a/basis/windows/com/com.factor b/basis/windows/com/com.factor old mode 100755 new mode 100644 diff --git a/basis/windows/com/syntax/syntax-docs.factor b/basis/windows/com/syntax/syntax-docs.factor old mode 100755 new mode 100644 diff --git a/basis/windows/com/syntax/syntax.factor b/basis/windows/com/syntax/syntax.factor old mode 100755 new mode 100644 diff --git a/basis/windows/com/wrapper/wrapper-docs.factor b/basis/windows/com/wrapper/wrapper-docs.factor old mode 100755 new mode 100644 diff --git a/basis/windows/com/wrapper/wrapper.factor b/basis/windows/com/wrapper/wrapper.factor old mode 100755 new mode 100644 diff --git a/basis/windows/dinput/constants/constants.factor b/basis/windows/dinput/constants/constants.factor old mode 100755 new mode 100644 diff --git a/basis/windows/dinput/dinput.factor b/basis/windows/dinput/dinput.factor old mode 100755 new mode 100644 diff --git a/basis/windows/gdi32/gdi32.factor b/basis/windows/gdi32/gdi32.factor old mode 100755 new mode 100644 diff --git a/basis/windows/kernel32/kernel32.factor b/basis/windows/kernel32/kernel32.factor old mode 100755 new mode 100644 diff --git a/basis/windows/messages/messages.factor b/basis/windows/messages/messages.factor old mode 100755 new mode 100644 diff --git a/basis/windows/ole32/ole32.factor b/basis/windows/ole32/ole32.factor old mode 100755 new mode 100644 diff --git a/basis/windows/opengl32/opengl32.factor b/basis/windows/opengl32/opengl32.factor old mode 100755 new mode 100644 diff --git a/basis/windows/user32/user32.factor b/basis/windows/user32/user32.factor old mode 100755 new mode 100644 diff --git a/basis/windows/winsock/winsock.factor b/basis/windows/winsock/winsock.factor old mode 100755 new mode 100644 diff --git a/basis/x11/clipboard/clipboard.factor b/basis/x11/clipboard/clipboard.factor old mode 100755 new mode 100644 diff --git a/basis/x11/windows/windows.factor b/basis/x11/windows/windows.factor old mode 100755 new mode 100644 diff --git a/basis/x11/xim/xim.factor b/basis/x11/xim/xim.factor old mode 100755 new mode 100644 diff --git a/basis/x11/xlib/xlib.factor b/basis/x11/xlib/xlib.factor old mode 100755 new mode 100644 diff --git a/basis/xml-rpc/xml-rpc.factor b/basis/xml-rpc/xml-rpc.factor old mode 100755 new mode 100644 diff --git a/basis/xml/char-classes/char-classes.factor b/basis/xml/char-classes/char-classes.factor old mode 100755 new mode 100644 diff --git a/basis/xml/data/data.factor b/basis/xml/data/data.factor old mode 100755 new mode 100644 diff --git a/basis/xml/errors/errors-tests.factor b/basis/xml/errors/errors-tests.factor old mode 100755 new mode 100644 diff --git a/basis/xml/tests/soap.factor b/basis/xml/tests/soap.factor old mode 100755 new mode 100644 diff --git a/basis/xml/utilities/utilities.factor b/basis/xml/utilities/utilities.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/catalog/catalog.factor b/basis/xmode/catalog/catalog.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/code2html/code2html.factor b/basis/xmode/code2html/code2html.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/code2html/responder/responder.factor b/basis/xmode/code2html/responder/responder.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/loader/loader.factor b/basis/xmode/loader/loader.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/marker/marker-tests.factor b/basis/xmode/marker/marker-tests.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/marker/marker.factor b/basis/xmode/marker/marker.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/marker/state/state.factor b/basis/xmode/marker/state/state.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/rules/rules.factor b/basis/xmode/rules/rules.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/tokens/tokens.factor b/basis/xmode/tokens/tokens.factor old mode 100755 new mode 100644 diff --git a/basis/xmode/utilities/utilities-tests.factor b/basis/xmode/utilities/utilities-tests.factor old mode 100755 new mode 100644 diff --git a/core/alien/alien-docs.factor b/core/alien/alien-docs.factor old mode 100755 new mode 100644 diff --git a/core/alien/alien-tests.factor b/core/alien/alien-tests.factor old mode 100755 new mode 100644 diff --git a/core/alien/alien.factor b/core/alien/alien.factor old mode 100755 new mode 100644 diff --git a/core/arrays/arrays-docs.factor b/core/arrays/arrays-docs.factor old mode 100755 new mode 100644 diff --git a/core/arrays/arrays-tests.factor b/core/arrays/arrays-tests.factor old mode 100755 new mode 100644 diff --git a/core/arrays/arrays.factor b/core/arrays/arrays.factor old mode 100755 new mode 100644 diff --git a/core/assocs/assocs-docs.factor b/core/assocs/assocs-docs.factor old mode 100755 new mode 100644 diff --git a/core/assocs/assocs-tests.factor b/core/assocs/assocs-tests.factor old mode 100755 new mode 100644 diff --git a/core/assocs/assocs.factor b/core/assocs/assocs.factor old mode 100755 new mode 100644 diff --git a/core/bootstrap/layouts/layouts.factor b/core/bootstrap/layouts/layouts.factor old mode 100755 new mode 100644 diff --git a/core/bootstrap/primitives.factor b/core/bootstrap/primitives.factor old mode 100755 new mode 100644 diff --git a/core/bootstrap/stage1.factor b/core/bootstrap/stage1.factor old mode 100755 new mode 100644 diff --git a/core/bootstrap/syntax.factor b/core/bootstrap/syntax.factor old mode 100755 new mode 100644 diff --git a/core/byte-arrays/byte-arrays-docs.factor b/core/byte-arrays/byte-arrays-docs.factor old mode 100755 new mode 100644 diff --git a/core/byte-arrays/byte-arrays-tests.factor b/core/byte-arrays/byte-arrays-tests.factor old mode 100755 new mode 100644 diff --git a/core/byte-arrays/byte-arrays.factor b/core/byte-arrays/byte-arrays.factor old mode 100755 new mode 100644 diff --git a/core/byte-vectors/byte-vectors-docs.factor b/core/byte-vectors/byte-vectors-docs.factor old mode 100755 new mode 100644 diff --git a/core/byte-vectors/byte-vectors-tests.factor b/core/byte-vectors/byte-vectors-tests.factor old mode 100755 new mode 100644 diff --git a/core/byte-vectors/byte-vectors.factor b/core/byte-vectors/byte-vectors.factor old mode 100755 new mode 100644 diff --git a/core/checksums/crc32/crc32.factor b/core/checksums/crc32/crc32.factor old mode 100755 new mode 100644 diff --git a/core/classes/algebra/algebra-docs.factor b/core/classes/algebra/algebra-docs.factor old mode 100755 new mode 100644 diff --git a/core/classes/algebra/algebra-tests.factor b/core/classes/algebra/algebra-tests.factor old mode 100755 new mode 100644 diff --git a/core/classes/algebra/algebra.factor b/core/classes/algebra/algebra.factor old mode 100755 new mode 100644 diff --git a/core/classes/classes-docs.factor b/core/classes/classes-docs.factor old mode 100755 new mode 100644 diff --git a/core/classes/classes-tests.factor b/core/classes/classes-tests.factor old mode 100755 new mode 100644 diff --git a/core/classes/classes.factor b/core/classes/classes.factor old mode 100755 new mode 100644 diff --git a/core/classes/mixin/mixin-docs.factor b/core/classes/mixin/mixin-docs.factor old mode 100755 new mode 100644 diff --git a/core/classes/mixin/mixin.factor b/core/classes/mixin/mixin.factor old mode 100755 new mode 100644 diff --git a/core/classes/predicate/predicate-docs.factor b/core/classes/predicate/predicate-docs.factor old mode 100755 new mode 100644 diff --git a/core/classes/predicate/predicate.factor b/core/classes/predicate/predicate.factor old mode 100755 new mode 100644 diff --git a/core/classes/singleton/singleton.factor b/core/classes/singleton/singleton.factor old mode 100755 new mode 100644 diff --git a/core/classes/tuple/tuple-docs.factor b/core/classes/tuple/tuple-docs.factor old mode 100755 new mode 100644 diff --git a/core/classes/tuple/tuple-tests.factor b/core/classes/tuple/tuple-tests.factor old mode 100755 new mode 100644 diff --git a/core/classes/tuple/tuple.factor b/core/classes/tuple/tuple.factor old mode 100755 new mode 100644 diff --git a/core/classes/union/union-docs.factor b/core/classes/union/union-docs.factor old mode 100755 new mode 100644 diff --git a/core/classes/union/union.factor b/core/classes/union/union.factor old mode 100755 new mode 100644 diff --git a/core/combinators/combinators-docs.factor b/core/combinators/combinators-docs.factor old mode 100755 new mode 100644 diff --git a/core/combinators/combinators-tests.factor b/core/combinators/combinators-tests.factor old mode 100755 new mode 100644 diff --git a/core/combinators/combinators.factor b/core/combinators/combinators.factor old mode 100755 new mode 100644 diff --git a/core/compiler/errors/errors-docs.factor b/core/compiler/errors/errors-docs.factor old mode 100755 new mode 100644 diff --git a/core/compiler/errors/errors.factor b/core/compiler/errors/errors.factor old mode 100755 new mode 100644 diff --git a/core/compiler/units/units-docs.factor b/core/compiler/units/units-docs.factor old mode 100755 new mode 100644 diff --git a/core/compiler/units/units.factor b/core/compiler/units/units.factor old mode 100755 new mode 100644 diff --git a/core/continuations/continuations-docs.factor b/core/continuations/continuations-docs.factor old mode 100755 new mode 100644 diff --git a/core/continuations/continuations-tests.factor b/core/continuations/continuations-tests.factor old mode 100755 new mode 100644 diff --git a/core/continuations/continuations.factor b/core/continuations/continuations.factor old mode 100755 new mode 100644 diff --git a/core/definitions/definitions-docs.factor b/core/definitions/definitions-docs.factor old mode 100755 new mode 100644 diff --git a/core/definitions/definitions-tests.factor b/core/definitions/definitions-tests.factor old mode 100755 new mode 100644 diff --git a/core/definitions/definitions.factor b/core/definitions/definitions.factor old mode 100755 new mode 100644 diff --git a/core/destructors/destructors-docs.factor b/core/destructors/destructors-docs.factor old mode 100755 new mode 100644 diff --git a/core/destructors/destructors-tests.factor b/core/destructors/destructors-tests.factor old mode 100755 new mode 100644 diff --git a/core/destructors/destructors.factor b/core/destructors/destructors.factor old mode 100755 new mode 100644 diff --git a/core/effects/effects.factor b/core/effects/effects.factor old mode 100755 new mode 100644 diff --git a/core/generic/generic-docs.factor b/core/generic/generic-docs.factor old mode 100755 new mode 100644 diff --git a/core/generic/generic-tests.factor b/core/generic/generic-tests.factor old mode 100755 new mode 100644 diff --git a/core/generic/generic.factor b/core/generic/generic.factor old mode 100755 new mode 100644 diff --git a/core/generic/math/math-docs.factor b/core/generic/math/math-docs.factor old mode 100755 new mode 100644 diff --git a/core/generic/math/math.factor b/core/generic/math/math.factor old mode 100755 new mode 100644 diff --git a/core/growable/growable-docs.factor b/core/growable/growable-docs.factor old mode 100755 new mode 100644 diff --git a/core/growable/growable-tests.factor b/core/growable/growable-tests.factor old mode 100755 new mode 100644 diff --git a/core/hashtables/hashtables-docs.factor b/core/hashtables/hashtables-docs.factor old mode 100755 new mode 100644 diff --git a/core/hashtables/hashtables-tests.factor b/core/hashtables/hashtables-tests.factor old mode 100755 new mode 100644 diff --git a/core/hashtables/hashtables.factor b/core/hashtables/hashtables.factor old mode 100755 new mode 100644 diff --git a/core/init/init.factor b/core/init/init.factor old mode 100755 new mode 100644 diff --git a/core/io/backend/backend-tests.factor b/core/io/backend/backend-tests.factor old mode 100755 new mode 100644 diff --git a/core/io/backend/backend.factor b/core/io/backend/backend.factor old mode 100755 new mode 100644 diff --git a/core/io/binary/binary-tests.factor b/core/io/binary/binary-tests.factor old mode 100755 new mode 100644 diff --git a/core/io/binary/binary.factor b/core/io/binary/binary.factor old mode 100755 new mode 100644 diff --git a/core/io/encodings/binary/binary.factor b/core/io/encodings/binary/binary.factor old mode 100755 new mode 100644 diff --git a/core/io/encodings/encodings-tests.factor b/core/io/encodings/encodings-tests.factor old mode 100755 new mode 100644 diff --git a/core/io/encodings/encodings.factor b/core/io/encodings/encodings.factor old mode 100755 new mode 100644 diff --git a/core/io/encodings/utf8/utf8-docs.factor b/core/io/encodings/utf8/utf8-docs.factor old mode 100755 new mode 100644 diff --git a/core/io/encodings/utf8/utf8-tests.factor b/core/io/encodings/utf8/utf8-tests.factor old mode 100755 new mode 100644 diff --git a/core/io/encodings/utf8/utf8.factor b/core/io/encodings/utf8/utf8.factor old mode 100755 new mode 100644 diff --git a/core/io/files/files-docs.factor b/core/io/files/files-docs.factor old mode 100755 new mode 100644 diff --git a/core/io/files/files-tests.factor b/core/io/files/files-tests.factor old mode 100755 new mode 100644 diff --git a/core/io/files/files.factor b/core/io/files/files.factor old mode 100755 new mode 100644 diff --git a/core/io/io-docs.factor b/core/io/io-docs.factor old mode 100755 new mode 100644 diff --git a/core/io/io-tests.factor b/core/io/io-tests.factor old mode 100755 new mode 100644 diff --git a/core/io/io.factor b/core/io/io.factor old mode 100755 new mode 100644 diff --git a/core/io/streams/c/c-docs.factor b/core/io/streams/c/c-docs.factor old mode 100755 new mode 100644 diff --git a/core/io/streams/c/c-tests.factor b/core/io/streams/c/c-tests.factor old mode 100755 new mode 100644 diff --git a/core/io/streams/c/c.factor b/core/io/streams/c/c.factor old mode 100755 new mode 100644 diff --git a/core/io/streams/nested/nested.factor b/core/io/streams/nested/nested.factor old mode 100755 new mode 100644 diff --git a/core/io/streams/string/string.factor b/core/io/streams/string/string.factor old mode 100755 new mode 100644 diff --git a/core/kernel/kernel-docs.factor b/core/kernel/kernel-docs.factor old mode 100755 new mode 100644 diff --git a/core/kernel/kernel-tests.factor b/core/kernel/kernel-tests.factor old mode 100755 new mode 100644 diff --git a/core/kernel/kernel.factor b/core/kernel/kernel.factor old mode 100755 new mode 100644 diff --git a/core/layouts/layouts-docs.factor b/core/layouts/layouts-docs.factor old mode 100755 new mode 100644 diff --git a/core/layouts/layouts-tests.factor b/core/layouts/layouts-tests.factor old mode 100755 new mode 100644 diff --git a/core/layouts/layouts.factor b/core/layouts/layouts.factor old mode 100755 new mode 100644 diff --git a/core/math/floats/floats-tests.factor b/core/math/floats/floats-tests.factor old mode 100755 new mode 100644 diff --git a/core/math/floats/floats.factor b/core/math/floats/floats.factor old mode 100755 new mode 100644 diff --git a/core/math/integers/integers-docs.factor b/core/math/integers/integers-docs.factor old mode 100755 new mode 100644 diff --git a/core/math/integers/integers-tests.factor b/core/math/integers/integers-tests.factor old mode 100755 new mode 100644 diff --git a/core/math/integers/integers.factor b/core/math/integers/integers.factor old mode 100755 new mode 100644 diff --git a/core/math/math-docs.factor b/core/math/math-docs.factor old mode 100755 new mode 100644 diff --git a/core/math/math.factor b/core/math/math.factor old mode 100755 new mode 100644 diff --git a/core/math/parser/parser-tests.factor b/core/math/parser/parser-tests.factor old mode 100755 new mode 100644 diff --git a/core/math/parser/parser.factor b/core/math/parser/parser.factor old mode 100755 new mode 100644 diff --git a/core/memory/memory-docs.factor b/core/memory/memory-docs.factor old mode 100755 new mode 100644 diff --git a/core/memory/memory-tests.factor b/core/memory/memory-tests.factor old mode 100755 new mode 100644 diff --git a/core/namespaces/namespaces-docs.factor b/core/namespaces/namespaces-docs.factor old mode 100755 new mode 100644 diff --git a/core/parser/parser-docs.factor b/core/parser/parser-docs.factor old mode 100755 new mode 100644 diff --git a/core/parser/parser-tests.factor b/core/parser/parser-tests.factor old mode 100755 new mode 100644 diff --git a/core/parser/parser.factor b/core/parser/parser.factor old mode 100755 new mode 100644 diff --git a/core/parser/test/assert-depth.factor b/core/parser/test/assert-depth.factor old mode 100755 new mode 100644 diff --git a/core/quotations/quotations-docs.factor b/core/quotations/quotations-docs.factor old mode 100755 new mode 100644 diff --git a/core/quotations/quotations-tests.factor b/core/quotations/quotations-tests.factor old mode 100755 new mode 100644 diff --git a/core/quotations/quotations.factor b/core/quotations/quotations.factor old mode 100755 new mode 100644 diff --git a/core/sbufs/sbufs.factor b/core/sbufs/sbufs.factor old mode 100755 new mode 100644 diff --git a/core/sequences/sequences-docs.factor b/core/sequences/sequences-docs.factor old mode 100755 new mode 100644 diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor old mode 100755 new mode 100644 diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor old mode 100755 new mode 100644 diff --git a/core/slots/slots-docs.factor b/core/slots/slots-docs.factor old mode 100755 new mode 100644 diff --git a/core/slots/slots.factor b/core/slots/slots.factor old mode 100755 new mode 100644 diff --git a/core/sorting/sorting-tests.factor b/core/sorting/sorting-tests.factor old mode 100755 new mode 100644 diff --git a/core/sorting/sorting.factor b/core/sorting/sorting.factor old mode 100755 new mode 100644 diff --git a/core/source-files/source-files-docs.factor b/core/source-files/source-files-docs.factor old mode 100755 new mode 100644 diff --git a/core/source-files/source-files.factor b/core/source-files/source-files.factor old mode 100755 new mode 100644 diff --git a/core/splitting/splitting.factor b/core/splitting/splitting.factor old mode 100755 new mode 100644 diff --git a/core/strings/strings-docs.factor b/core/strings/strings-docs.factor old mode 100755 new mode 100644 diff --git a/core/strings/strings-tests.factor b/core/strings/strings-tests.factor old mode 100755 new mode 100644 diff --git a/core/strings/strings.factor b/core/strings/strings.factor old mode 100755 new mode 100644 diff --git a/core/syntax/syntax-docs.factor b/core/syntax/syntax-docs.factor old mode 100755 new mode 100644 diff --git a/core/syntax/syntax.factor b/core/syntax/syntax.factor old mode 100755 new mode 100644 diff --git a/core/system/system-docs.factor b/core/system/system-docs.factor old mode 100755 new mode 100644 diff --git a/core/system/system-tests.factor b/core/system/system-tests.factor old mode 100755 new mode 100644 diff --git a/core/system/system.factor b/core/system/system.factor old mode 100755 new mode 100644 diff --git a/core/vectors/vectors-docs.factor b/core/vectors/vectors-docs.factor old mode 100755 new mode 100644 diff --git a/core/vectors/vectors-tests.factor b/core/vectors/vectors-tests.factor old mode 100755 new mode 100644 diff --git a/core/vectors/vectors.factor b/core/vectors/vectors.factor old mode 100755 new mode 100644 diff --git a/core/vocabs/loader/loader-docs.factor b/core/vocabs/loader/loader-docs.factor old mode 100755 new mode 100644 diff --git a/core/vocabs/loader/loader-tests.factor b/core/vocabs/loader/loader-tests.factor old mode 100755 new mode 100644 diff --git a/core/vocabs/loader/loader.factor b/core/vocabs/loader/loader.factor old mode 100755 new mode 100644 diff --git a/core/vocabs/loader/test/a/a.factor b/core/vocabs/loader/test/a/a.factor old mode 100755 new mode 100644 diff --git a/core/vocabs/loader/test/b/b.factor b/core/vocabs/loader/test/b/b.factor old mode 100755 new mode 100644 diff --git a/core/vocabs/vocabs-docs.factor b/core/vocabs/vocabs-docs.factor old mode 100755 new mode 100644 diff --git a/core/vocabs/vocabs.factor b/core/vocabs/vocabs.factor old mode 100755 new mode 100644 diff --git a/core/words/words-docs.factor b/core/words/words-docs.factor old mode 100755 new mode 100644 diff --git a/core/words/words-tests.factor b/core/words/words-tests.factor old mode 100755 new mode 100644 diff --git a/core/words/words.factor b/core/words/words.factor old mode 100755 new mode 100644 From d657b52eb1523d539e6b6046f0c3363f421c4a3f Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 10:52:13 -0500 Subject: [PATCH 027/244] Remove really obsolete stuff from unmaintained --- .../assoc-heaps/assoc-heaps-tests.factor | 55 -------- unmaintained/assoc-heaps/assoc-heaps.factor | 45 ------ unmaintained/assoc-heaps/authors.txt | 1 - unmaintained/assoc-heaps/summary.txt | 1 - unmaintained/webapps/help/authors.txt | 1 - unmaintained/webapps/help/help.factor | 89 ------------ .../webapps/pastebin/annotate-paste.furnace | 47 ------- .../webapps/pastebin/annotation.furnace | 11 -- unmaintained/webapps/pastebin/authors.txt | 1 - unmaintained/webapps/pastebin/footer.furnace | 3 - unmaintained/webapps/pastebin/header.furnace | 23 ---- unmaintained/webapps/pastebin/modes.furnace | 7 - .../webapps/pastebin/new-paste.furnace | 51 ------- .../webapps/pastebin/paste-list.furnace | 33 ----- .../webapps/pastebin/paste-summary.furnace | 12 -- unmaintained/webapps/pastebin/pastebin.factor | 119 ---------------- .../webapps/pastebin/show-paste.furnace | 21 --- unmaintained/webapps/pastebin/style.css | 41 ------ unmaintained/webapps/pastebin/syntax.furnace | 3 - unmaintained/webapps/planet/authors.txt | 1 - unmaintained/webapps/planet/planet.factor | 129 ------------------ unmaintained/webapps/planet/planet.furnace | 45 ------ unmaintained/webapps/planet/style.css | 45 ------ unmaintained/wee-url/load.factor | 4 - unmaintained/wee-url/responder.factor | 91 ------------ unmaintained/wee-url/wee-url.factor | 89 ------------ 26 files changed, 968 deletions(-) delete mode 100644 unmaintained/assoc-heaps/assoc-heaps-tests.factor delete mode 100755 unmaintained/assoc-heaps/assoc-heaps.factor delete mode 100755 unmaintained/assoc-heaps/authors.txt delete mode 100755 unmaintained/assoc-heaps/summary.txt delete mode 100755 unmaintained/webapps/help/authors.txt delete mode 100644 unmaintained/webapps/help/help.factor delete mode 100755 unmaintained/webapps/pastebin/annotate-paste.furnace delete mode 100755 unmaintained/webapps/pastebin/annotation.furnace delete mode 100755 unmaintained/webapps/pastebin/authors.txt delete mode 100644 unmaintained/webapps/pastebin/footer.furnace delete mode 100644 unmaintained/webapps/pastebin/header.furnace delete mode 100644 unmaintained/webapps/pastebin/modes.furnace delete mode 100755 unmaintained/webapps/pastebin/new-paste.furnace delete mode 100644 unmaintained/webapps/pastebin/paste-list.furnace delete mode 100644 unmaintained/webapps/pastebin/paste-summary.furnace delete mode 100755 unmaintained/webapps/pastebin/pastebin.factor delete mode 100755 unmaintained/webapps/pastebin/show-paste.furnace delete mode 100644 unmaintained/webapps/pastebin/style.css delete mode 100755 unmaintained/webapps/pastebin/syntax.furnace delete mode 100755 unmaintained/webapps/planet/authors.txt delete mode 100755 unmaintained/webapps/planet/planet.factor delete mode 100644 unmaintained/webapps/planet/planet.furnace delete mode 100644 unmaintained/webapps/planet/style.css delete mode 100644 unmaintained/wee-url/load.factor delete mode 100644 unmaintained/wee-url/responder.factor delete mode 100644 unmaintained/wee-url/wee-url.factor diff --git a/unmaintained/assoc-heaps/assoc-heaps-tests.factor b/unmaintained/assoc-heaps/assoc-heaps-tests.factor deleted file mode 100644 index 24a7730847..0000000000 --- a/unmaintained/assoc-heaps/assoc-heaps-tests.factor +++ /dev/null @@ -1,55 +0,0 @@ -USING: assocs assoc-heaps heaps heaps.private kernel tools.test ; -IN: temporary - -[ -T{ - assoc-heap - f - H{ { 2 1 } } - T{ min-heap T{ heap f V{ { 1 2 } } } } -} -] [ H{ } clone 1 2 pick heap-push ] unit-test - -[ -T{ - assoc-heap - f - H{ { 1 0 } { 2 1 } } - T{ min-heap T{ heap f V{ { 0 1 } { 1 2 } } } } -} -] [ H{ } clone 1 2 pick heap-push 0 1 pick heap-push ] unit-test - -[ T{ assoc-heap f H{ } T{ min-heap T{ heap f V{ } } } } ] -[ - H{ } clone - 1 2 pick heap-push 0 1 pick heap-push - dup heap-pop 2drop dup heap-pop 2drop -] unit-test - - -[ 0 1 ] [ -T{ - assoc-heap - f - H{ { 1 0 } { 2 1 } } - T{ min-heap T{ heap f V{ { 0 1 } { 1 2 } } } } -} heap-pop -] unit-test - -[ 1 2 ] [ -T{ - assoc-heap - f - H{ { 1 0 } { 2 1 } } - T{ max-heap T{ heap f V{ { 1 2 } { 0 1 } } } } -} heap-pop -] unit-test - -[ -T{ - assoc-heap - f - H{ { 1 2 } { 3 4 } } - T{ min-heap T{ heap f V{ { 2 1 } { 4 3 } } } } -} -] [ H{ { 1 2 } { 3 4 } } H{ } clone [ heap-push-all ] keep ] unit-test diff --git a/unmaintained/assoc-heaps/assoc-heaps.factor b/unmaintained/assoc-heaps/assoc-heaps.factor deleted file mode 100755 index 55a5aa7f62..0000000000 --- a/unmaintained/assoc-heaps/assoc-heaps.factor +++ /dev/null @@ -1,45 +0,0 @@ -USING: assocs heaps kernel sequences ; -IN: assoc-heaps - -TUPLE: assoc-heap assoc heap ; - -INSTANCE: assoc-heap assoc -INSTANCE: assoc-heap priority-queue - -C: assoc-heap - -: ( assoc -- obj ) ; -: ( assoc -- obj ) ; - -M: assoc-heap at* ( key assoc-heap -- value ? ) - assoc-heap-assoc at* ; - -M: assoc-heap assoc-size ( assoc-heap -- n ) - assoc-heap-assoc assoc-size ; - -TUPLE: assoc-heap-key-exists ; - -: check-key-exists ( key assoc-heap -- ) - assoc-heap-assoc key? - [ \ assoc-heap-key-exists construct-empty throw ] when ; - -M: assoc-heap set-at ( value key assoc-heap -- ) - [ check-key-exists ] 2keep - [ assoc-heap-assoc set-at ] 3keep - assoc-heap-heap swapd heap-push ; - -M: assoc-heap heap-empty? ( assoc-heap -- ? ) - assoc-heap-assoc assoc-empty? ; - -M: assoc-heap heap-length ( assoc-heap -- n ) - assoc-heap-assoc assoc-size ; - -M: assoc-heap heap-peek ( assoc-heap -- value key ) - assoc-heap-heap heap-peek ; - -M: assoc-heap heap-push ( value key assoc-heap -- ) - set-at ; - -M: assoc-heap heap-pop ( assoc-heap -- value key ) - dup assoc-heap-heap heap-pop swap - rot dupd assoc-heap-assoc delete-at ; diff --git a/unmaintained/assoc-heaps/authors.txt b/unmaintained/assoc-heaps/authors.txt deleted file mode 100755 index 7c1b2f2279..0000000000 --- a/unmaintained/assoc-heaps/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Doug Coleman diff --git a/unmaintained/assoc-heaps/summary.txt b/unmaintained/assoc-heaps/summary.txt deleted file mode 100755 index 07ae2e33f8..0000000000 --- a/unmaintained/assoc-heaps/summary.txt +++ /dev/null @@ -1 +0,0 @@ -Priority search queues diff --git a/unmaintained/webapps/help/authors.txt b/unmaintained/webapps/help/authors.txt deleted file mode 100755 index 1901f27a24..0000000000 --- a/unmaintained/webapps/help/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Slava Pestov diff --git a/unmaintained/webapps/help/help.factor b/unmaintained/webapps/help/help.factor deleted file mode 100644 index 28d73607ba..0000000000 --- a/unmaintained/webapps/help/help.factor +++ /dev/null @@ -1,89 +0,0 @@ -! Copyright (C) 2005, 2007 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: kernel furnace furnace.validator http.server.responders - help help.topics html splitting sequences words strings - quotations macros vocabs tools.browser combinators - arrays io.files ; -IN: webapps.help - -! : string>topic ( string -- topic ) - ! " " split dup length 1 = [ first ] when ; - -: show-help ( topic -- ) - serving-html - dup article-title [ - [ help ] with-html-stream - ] simple-html-document ; - -\ show-help { - { "topic" } -} define-action -\ show-help { { "topic" "handbook" } } default-values - -M: link browser-link-href - link-name - dup word? over f eq? or [ - browser-link-href - ] [ - dup array? [ " " join ] when - [ show-help ] curry quot-link - ] if ; - -: show-word ( word vocab -- ) - lookup show-help ; - -\ show-word { - { "word" } - { "vocab" } -} define-action -\ show-word { { "word" "call" } { "vocab" "kernel" } } default-values - -M: f browser-link-href - drop \ f browser-link-href ; - -M: word browser-link-href - dup word-name swap word-vocabulary - [ show-word ] 2curry quot-link ; - -: show-vocab ( vocab -- ) - f >vocab-link show-help ; - -\ show-vocab { - { "vocab" } -} define-action - -\ show-vocab { { "vocab" "kernel" } } default-values - -M: vocab-spec browser-link-href - vocab-name [ show-vocab ] curry quot-link ; - -: show-vocabs-tagged ( tag -- ) - show-help ; - -\ show-vocabs-tagged { - { "tag" } -} define-action - -M: vocab-tag browser-link-href - vocab-tag-name [ show-vocabs-tagged ] curry quot-link ; - -: show-vocabs-by ( author -- ) - show-help ; - -\ show-vocabs-by { - { "author" } -} define-action - -M: vocab-author browser-link-href - vocab-author-name [ show-vocabs-by ] curry quot-link ; - -"help" "show-help" "extra/webapps/help" web-app - -! Hard-coding for factorcode.org -PREDICATE: pathname resource-pathname - pathname-string "resource:" head? ; - -M: resource-pathname browser-link-href - pathname-string - "resource:" ?head drop - "/responder/source/" swap append ; diff --git a/unmaintained/webapps/pastebin/annotate-paste.furnace b/unmaintained/webapps/pastebin/annotate-paste.furnace deleted file mode 100755 index 14a424f776..0000000000 --- a/unmaintained/webapps/pastebin/annotate-paste.furnace +++ /dev/null @@ -1,47 +0,0 @@ -<% USING: io math math.parser namespaces furnace ; %> - -

Annotate

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Summary:" /><% "summary" "*Required" render-error %>
Your name:" /><% "author" "*Required" render-error %>
File type:<% "modes" render-template %>
<% "contents" "*Required" render-error %>
Content:
- -string write %>" /> - - -
diff --git a/unmaintained/webapps/pastebin/annotation.furnace b/unmaintained/webapps/pastebin/annotation.furnace deleted file mode 100755 index e59db32484..0000000000 --- a/unmaintained/webapps/pastebin/annotation.furnace +++ /dev/null @@ -1,11 +0,0 @@ -<% USING: namespaces io furnace calendar ; %> - -

Annotation: <% "summary" get write %>

- - - - - -
Annotation by:<% "author" get write %>
File type:<% "mode" get write %>
Created:<% "date" get timestamp>string write %>
- -<% "syntax" render-template %> diff --git a/unmaintained/webapps/pastebin/authors.txt b/unmaintained/webapps/pastebin/authors.txt deleted file mode 100755 index 1901f27a24..0000000000 --- a/unmaintained/webapps/pastebin/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Slava Pestov diff --git a/unmaintained/webapps/pastebin/footer.furnace b/unmaintained/webapps/pastebin/footer.furnace deleted file mode 100644 index 15b90110a0..0000000000 --- a/unmaintained/webapps/pastebin/footer.furnace +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/unmaintained/webapps/pastebin/header.furnace b/unmaintained/webapps/pastebin/header.furnace deleted file mode 100644 index 2c8e79a18d..0000000000 --- a/unmaintained/webapps/pastebin/header.furnace +++ /dev/null @@ -1,23 +0,0 @@ -<% USING: namespaces io furnace sequences xmode.code2html webapps.pastebin ; %> - - - - - - - - <% "title" get write %> - - <% default-stylesheet %> - - - - - - -

<% "title" get write %>

diff --git a/unmaintained/webapps/pastebin/modes.furnace b/unmaintained/webapps/pastebin/modes.furnace deleted file mode 100644 index 18bbec180a..0000000000 --- a/unmaintained/webapps/pastebin/modes.furnace +++ /dev/null @@ -1,7 +0,0 @@ -<% USING: furnace xmode.catalog sequences kernel html.elements assocs io sorting continuations ; %> - - diff --git a/unmaintained/webapps/pastebin/new-paste.furnace b/unmaintained/webapps/pastebin/new-paste.furnace deleted file mode 100755 index b21e19734d..0000000000 --- a/unmaintained/webapps/pastebin/new-paste.furnace +++ /dev/null @@ -1,51 +0,0 @@ -<% USING: continuations furnace namespaces ; %> - -<% - "New paste" "title" set - "header" render-template -%> - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Summary:" /><% "summary" "*Required" render-error %>
Your name:" /><% "author" "*Required" render-error %>
File type:<% "modes" render-template %>
<% "contents" "*Required" render-error %>
Content:
- - - -
- -<% "footer" render-template %> diff --git a/unmaintained/webapps/pastebin/paste-list.furnace b/unmaintained/webapps/pastebin/paste-list.furnace deleted file mode 100644 index 51813ecf97..0000000000 --- a/unmaintained/webapps/pastebin/paste-list.furnace +++ /dev/null @@ -1,33 +0,0 @@ -<% USING: namespaces furnace sequences ; %> - -<% - "Pastebin" "title" set - "header" render-template -%> - - - - - - -
- - - - - - - <% "pastes" get [ "paste-summary" render-component ] each %> -
Summary:Paste by:Date:
-
-
-

This pastebin is written in Factor. It is inspired by lisppaste. -

-

It can be used for collaborative development over IRC. You can post code for review, and annotate other people's code. Syntax highlighting for over a hundred file types is supported. -

-

- <% "webapps.pastebin" browse-webapp-source %>

-
-
- -<% "footer" render-template %> diff --git a/unmaintained/webapps/pastebin/paste-summary.furnace b/unmaintained/webapps/pastebin/paste-summary.furnace deleted file mode 100644 index dc25fe1924..0000000000 --- a/unmaintained/webapps/pastebin/paste-summary.furnace +++ /dev/null @@ -1,12 +0,0 @@ -<% USING: continuations namespaces io kernel math math.parser -furnace webapps.pastebin calendar sequences ; %> - - - - - <% "summary" get write %> - - - <% "author" get write %> - <% "date" get timestamp>string write %> - diff --git a/unmaintained/webapps/pastebin/pastebin.factor b/unmaintained/webapps/pastebin/pastebin.factor deleted file mode 100755 index 36a72795db..0000000000 --- a/unmaintained/webapps/pastebin/pastebin.factor +++ /dev/null @@ -1,119 +0,0 @@ -USING: calendar furnace furnace.validator io.files kernel -namespaces sequences http.server.responders html math.parser rss -xml.writer xmode.code2html math calendar.format ; -IN: webapps.pastebin - -TUPLE: pastebin pastes ; - -: ( -- pastebin ) - V{ } clone pastebin construct-boa ; - - pastebin set-global - -TUPLE: paste -summary author channel mode contents date -annotations n ; - -: ( summary author channel mode contents -- paste ) - f V{ } clone f paste construct-boa ; - -TUPLE: annotation summary author mode contents ; - -C: annotation - -: get-paste ( n -- paste ) - pastebin get pastebin-pastes nth ; - -: show-paste ( n -- ) - serving-html - get-paste - [ "show-paste" render-component ] with-html-stream ; - -\ show-paste { { "n" v-number } } define-action - -: new-paste ( -- ) - serving-html - [ "new-paste" render-template ] with-html-stream ; - -\ new-paste { } define-action - -: paste-list ( -- ) - serving-html - [ - [ show-paste ] "show-paste-quot" set - [ new-paste ] "new-paste-quot" set - pastebin get "paste-list" render-component - ] with-html-stream ; - -\ paste-list { } define-action - -: paste-link ( paste -- link ) - paste-n number>string [ show-paste ] curry quot-link ; - -: safe-head ( seq n -- seq' ) - over length min head ; - -: paste-feed ( -- entries ) - pastebin get pastebin-pastes 20 safe-head [ - { - paste-summary - paste-link - paste-date - } get-slots timestamp>rfc3339 f swap - ] map ; - -: feed.xml ( -- ) - "text/xml" serving-content - "pastebin" - "http://pastebin.factorcode.org" - paste-feed feed>xml write-xml ; - -\ feed.xml { } define-action - -: add-paste ( paste pastebin -- ) - >r now over set-paste-date r> - pastebin-pastes 2dup length swap set-paste-n push ; - -: submit-paste ( summary author channel mode contents -- ) - [ pastebin get add-paste ] keep - paste-link permanent-redirect ; - -\ new-paste -\ submit-paste { - { "summary" v-required } - { "author" v-required } - { "channel" } - { "mode" v-required } - { "contents" v-required } -} define-form - -\ new-paste { - { "channel" "#concatenative" } - { "mode" "factor" } -} default-values - -: annotate-paste ( n summary author mode contents -- ) - swap get-paste - [ paste-annotations push ] keep - paste-link permanent-redirect ; - -[ "n" show-paste ] -\ annotate-paste { - { "n" v-required v-number } - { "summary" v-required } - { "author" v-required } - { "mode" v-required } - { "contents" v-required } -} define-form - -\ show-paste { - { "mode" "factor" } -} default-values - -: style.css ( -- ) - "text/css" serving-content - "style.css" send-resource ; - -\ style.css { } define-action - -"pastebin" "paste-list" "extra/webapps/pastebin" web-app diff --git a/unmaintained/webapps/pastebin/show-paste.furnace b/unmaintained/webapps/pastebin/show-paste.furnace deleted file mode 100755 index 30129eda24..0000000000 --- a/unmaintained/webapps/pastebin/show-paste.furnace +++ /dev/null @@ -1,21 +0,0 @@ -<% USING: namespaces io furnace sequences xmode.code2html calendar ; %> - -<% - "Paste: " "summary" get append "title" set - "header" render-template -%> - - - - - - -
Paste by:<% "author" get write %>
Created:<% "date" get timestamp>string write %>
File type:<% "mode" get write %>
- -<% "syntax" render-template %> - -<% "annotations" get [ "annotation" render-component ] each %> - -<% model get "annotate-paste" render-component %> - -<% "footer" render-template %> diff --git a/unmaintained/webapps/pastebin/style.css b/unmaintained/webapps/pastebin/style.css deleted file mode 100644 index 4a469f92cb..0000000000 --- a/unmaintained/webapps/pastebin/style.css +++ /dev/null @@ -1,41 +0,0 @@ -body { - font:75%/1.6em "Lucida Grande", "Lucida Sans Unicode", verdana, geneva, sans-serif; - color:#888; -} - -h1.pastebin-title { - font-size:300%; -} - -a { - color:#222; - border-bottom:1px dotted #ccc; - text-decoration:none; -} - -a:hover { - border-bottom:1px solid #ccc; -} - -pre.code { - border:1px dashed #ccc; - background-color:#f5f5f5; - padding:5px; - font-size:150%; - color:#000000; -} - -.navbar { - background-color:#eeeeee; - padding:5px; - border:1px solid #ccc; -} - -.infobox { - border: 1px solid #C1DAD7; - padding: 10px; -} - -.error { - color: red; -} diff --git a/unmaintained/webapps/pastebin/syntax.furnace b/unmaintained/webapps/pastebin/syntax.furnace deleted file mode 100755 index 17b64b920b..0000000000 --- a/unmaintained/webapps/pastebin/syntax.furnace +++ /dev/null @@ -1,3 +0,0 @@ -<% USING: xmode.code2html splitting namespaces ; %> - -
<% "contents" get string-lines "mode" get htmlize-lines %>
diff --git a/unmaintained/webapps/planet/authors.txt b/unmaintained/webapps/planet/authors.txt deleted file mode 100755 index 1901f27a24..0000000000 --- a/unmaintained/webapps/planet/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Slava Pestov diff --git a/unmaintained/webapps/planet/planet.factor b/unmaintained/webapps/planet/planet.factor deleted file mode 100755 index 9a5f8eeb97..0000000000 --- a/unmaintained/webapps/planet/planet.factor +++ /dev/null @@ -1,129 +0,0 @@ -USING: sequences rss arrays concurrency.combinators kernel -sorting html.elements io assocs namespaces math threads vocabs -html furnace http.server.templating calendar math.parser -splitting continuations debugger system http.server.responders -xml.writer prettyprint logging calendar.format ; -IN: webapps.planet - -: print-posting-summary ( posting -- ) -

- dup entry-title write
- - "Read More..." write - -

; - -: print-posting-summaries ( postings -- ) - [ print-posting-summary ] each ; - -: print-blogroll ( blogroll -- ) - ; - -: format-date ( date -- string ) - rfc3339>timestamp timestamp>string ; - -: print-posting ( posting -- ) -

- - dup entry-title write-html - -

-

- dup entry-description write-html -

-

- entry-pub-date format-date write -

; - -: print-postings ( postings -- ) - [ print-posting ] each ; - -SYMBOL: default-blogroll -SYMBOL: cached-postings - -: safe-head ( seq n -- seq' ) - over length min head ; - -: mini-planet-factor ( -- ) - cached-postings get 4 safe-head print-posting-summaries ; - -: planet-factor ( -- ) - serving-html [ "planet" render-template ] with-html-stream ; - -\ planet-factor { } define-action - -: planet-feed ( -- feed ) - "[ planet-factor ]" - "http://planet.factorcode.org" - cached-postings get 30 safe-head ; - -: feed.xml ( -- ) - "text/xml" serving-content - planet-feed feed>xml write-xml ; - -\ feed.xml { } define-action - -: style.css ( -- ) - "text/css" serving-content - "style.css" send-resource ; - -\ style.css { } define-action - -SYMBOL: last-update - -: ( author entry -- entry' ) - clone - [ ": " swap entry-title 3append ] keep - [ set-entry-title ] keep ; - -: fetch-feed ( url -- feed ) - download-feed feed-entries ; - -\ fetch-feed DEBUG add-error-logging - -: fetch-blogroll ( blogroll -- entries ) - dup 0 swap 1 - [ fetch-feed ] parallel-map - [ [ ] with map ] 2map concat ; - -: sort-entries ( entries -- entries' ) - [ [ entry-pub-date ] compare ] sort ; - -: update-cached-postings ( -- ) - default-blogroll get - fetch-blogroll sort-entries - cached-postings set-global ; - -: update-thread ( -- ) - millis last-update set-global - [ update-cached-postings ] "RSS feed update slave" spawn drop - 10 60 * 1000 * sleep - update-thread ; - -: start-update-thread ( -- ) - [ - "webapps.planet" [ - update-thread - ] with-logging - ] "RSS feed update master" spawn drop ; - -"planet" "planet-factor" "extra/webapps/planet" web-app - -{ - { "Berlin Brown" "http://factorlang-fornovices.blogspot.com/feeds/posts/default" "http://factorlang-fornovices.blogspot.com" } - { "Chris Double" "http://www.blogger.com/feeds/18561009/posts/full/-/factor" "http://www.bluishcoder.co.nz/" } - { "Elie Chaftari" "http://fun-factor.blogspot.com/feeds/posts/default" "http://fun-factor.blogspot.com/" } - { "Doug Coleman" "http://code-factor.blogspot.com/feeds/posts/default" "http://code-factor.blogspot.com/" } - { "Daniel Ehrenberg" "http://useless-factor.blogspot.com/feeds/posts/default" "http://useless-factor.blogspot.com/" } - { "Gavin Harrison" "http://gmh33.blogspot.com/feeds/posts/default" "http://gmh33.blogspot.com/" } - { "Kio M. Smallwood" - "http://sekenre.wordpress.com/feed/atom/" - "http://sekenre.wordpress.com/" } - { "Phil Dawes" "http://www.phildawes.net/blog/category/factor/feed/atom" "http://www.phildawes.net/blog/" } - { "Samuel Tardieu" "http://www.rfc1149.net/blog/tag/factor/feed/atom/" "http://www.rfc1149.net/blog/tag/factor/" } - { "Slava Pestov" "http://factor-language.blogspot.com/atom.xml" "http://factor-language.blogspot.com/" } -} default-blogroll set-global diff --git a/unmaintained/webapps/planet/planet.furnace b/unmaintained/webapps/planet/planet.furnace deleted file mode 100644 index 4c6676c0a2..0000000000 --- a/unmaintained/webapps/planet/planet.furnace +++ /dev/null @@ -1,45 +0,0 @@ -<% USING: namespaces html.elements webapps.planet sequences -furnace ; %> - - - - - - - - planet-factor - - - - - -

[ planet-factor ]

- - - - - -
<% cached-postings get 20 safe-head print-postings %> -

- planet-factor is an Atom/RSS aggregator that collects the - contents of Factor-related blogs. It is inspired by - Planet Lisp. -

-

- - Syndicate -

-

- This webapp is written in Factor.
- <% "webapps.planet" browse-webapp-source %> -

-

Blogroll

- <% default-blogroll get print-blogroll %> -

- If you want your weblog added to the blogroll, just ask. -

-
- - - diff --git a/unmaintained/webapps/planet/style.css b/unmaintained/webapps/planet/style.css deleted file mode 100644 index 7a66d8d495..0000000000 --- a/unmaintained/webapps/planet/style.css +++ /dev/null @@ -1,45 +0,0 @@ -body { - font:75%/1.6em "Lucida Grande", "Lucida Sans Unicode", verdana, geneva, sans-serif; - color:#888; -} - -h1.planet-title { - font-size:300%; -} - -a { - color:#222; - border-bottom:1px dotted #ccc; - text-decoration:none; -} - -a:hover { - border-bottom:1px solid #ccc; -} - -.posting-title { - background-color:#f5f5f5; -} - -pre, code { - color:#000000; - font-size:120%; -} - -.infobox { - border-left: 1px solid #C1DAD7; -} - -.posting-date { - text-align: right; - font-size:90%; -} - -a.more { - display:block; - padding:0 0 5px 0; - color:#333; - text-decoration:none; - text-align:right; - border:none; -} diff --git a/unmaintained/wee-url/load.factor b/unmaintained/wee-url/load.factor deleted file mode 100644 index 96d27164e8..0000000000 --- a/unmaintained/wee-url/load.factor +++ /dev/null @@ -1,4 +0,0 @@ -REQUIRES: apps/http-server libs/store ; - -PROVIDE: apps/wee-url -{ +files+ { "responder.factor" } } ; diff --git a/unmaintained/wee-url/responder.factor b/unmaintained/wee-url/responder.factor deleted file mode 100644 index 4d7b076cb6..0000000000 --- a/unmaintained/wee-url/responder.factor +++ /dev/null @@ -1,91 +0,0 @@ -! Copyright (C) 2006 Doug Coleman. -! See http://factorcode.org/license.txt for BSD license. -USING: generic assocs help html httpd -io kernel math namespaces prettyprint sequences store strings ; -IN: wee-url-responder - -SYMBOL: wee-shortcuts -SYMBOL: wee-store - -"wee-url.store" load-store wee-store set-global -H{ } clone wee-shortcuts wee-store get store-variable - -: responder-url "responder-url" get ; - -: wee-url ( string -- url ) - [ - "http://" % - host % - responder-url % - % - ] "" make ; - -: letter-bank - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" ; - -: random-letter letter-bank length random letter-bank nth ; - -: random-url ( -- string ) - 6 random 1+ [ drop random-letter ] map >string - dup wee-shortcuts get key? [ drop random-url ] when ; - -: prepare-wee-url ( url -- url ) - CHAR: : over member? [ "http://" swap append ] unless ; - -: set-symmetric-hash ( obj1 obj2 hash -- ) - 3dup set-at swapd set-at ; - -: add-shortcut ( url-long -- url-short ) - dup wee-shortcuts get at* [ - nip - ] [ - drop - random-url [ wee-shortcuts get set-symmetric-hash ] keep - wee-store get save-store - ] if ; - -: url-prompt ( -- ) - serving-html - "wee-url.com - wee URLs since 2007" [ -
- "URL: " write - - -
- ] simple-html-document ; - -: url-submitted ( url-long url-short -- ) - "URL Submitted" [ - "URL: " write write nl - "wee-url: " write - wee-url write nl - "Back to " write - "wee-url" write nl - ] simple-html-document ; - -: url-submit ( url -- ) - serving-html - prepare-wee-url [ add-shortcut ] keep url-submitted ; - -: url-error ( -- ) - serving-html - "wee-url error" [ - "No such link." write - ] simple-html-document ; - -: wee-url-responder ( url -- ) - "url" query-param [ - url-submit drop - ] [ - dup empty? [ - drop url-prompt - ] [ - wee-shortcuts get at* - [ permanent-redirect ] [ drop url-error ] if - ] if - ] if* ; - -[ - "wee-url" "responder" set - [ wee-url-responder ] "get" set -] make-responder diff --git a/unmaintained/wee-url/wee-url.factor b/unmaintained/wee-url/wee-url.factor deleted file mode 100644 index ead2ee8976..0000000000 --- a/unmaintained/wee-url/wee-url.factor +++ /dev/null @@ -1,89 +0,0 @@ -! Copyright (C) 2007 Doug Coleman. -! See http://factorcode.org/license.txt for BSD license. -USING: assocs furnace html html.elements http.server -http.server.responders io kernel math math.ranges -namespaces random sequences store strings ; -IN: webapps.wee-url - -SYMBOL: shortcuts -SYMBOL: store - -! "wee-url.store" load-store store set-global -! H{ } clone shortcuts store get store-variable - -: set-at-once ( value key assoc -- ? ) - 2dup key? [ 3drop f ] [ set-at t ] if ; - -: responder-url "responder/wee-url" ; - -: wee-url ( string -- url ) - [ - "http://" % - host % - responder-url % - % - ] "" make ; - -: letter-bank - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" ; inline - -: random-url ( -- string ) - 1 6 [a,b] random [ drop letter-bank random ] "" map-as - dup shortcuts get key? [ drop random-url ] when ; - -: add-shortcut ( url-long url-short -- url-short ) - shortcuts get set-at-once [ - store get save-store - ] [ - drop - ] if ; - -: show-submit ( -- ) - serving-html - "wee-url.com - wee URLs since 2007" [ -
- "URL: " write - - -
- ] simple-html-document ; - -\ show-submit { } define-action - -: url-submitted ( url-long url-short -- ) - "URL Submitted" [ - "URL: " write write nl - "wee-url: " write - wee-url write nl - "Back to " write - "wee-url" write nl - ] simple-html-document ; - -: url-submit ( url -- ) - [ add-shortcut ] keep - url-submitted ; - -\ url-submit { - { "url" } -} define-action - -: url-error ( -- ) - serving-html - "wee-url error" [ - "No such link." write - ] simple-html-document ; - -: wee-url-responder ( url -- ) - "url" query-param [ - url-submit drop - ] [ - dup empty? [ - drop show-submit - ] [ - shortcuts get at* - [ permanent-redirect ] [ drop url-error ] if - ] if - ] if* ; - -! "wee-url" "wee-url-responder" "extra/webapps/wee-url" web-app -~ From dbae275dc221281e4ca8902aa0cc6d0d1b72685b Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 10:52:57 -0500 Subject: [PATCH 028/244] Don't need cocoa.standalone --- basis/cocoa/standalone/standalone.factor | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 basis/cocoa/standalone/standalone.factor diff --git a/basis/cocoa/standalone/standalone.factor b/basis/cocoa/standalone/standalone.factor deleted file mode 100644 index 528736f172..0000000000 --- a/basis/cocoa/standalone/standalone.factor +++ /dev/null @@ -1,12 +0,0 @@ -! Copyright (C) 2008 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: kernel cocoa.nibs cocoa.application cocoa ; -IN: cocoa.standalone - -: cocoa-app ( quot -- ) - [ - "MiniFactor.nib" load-nib - call - finish-launching - NSApp -> run - ] with-cocoa ; inline From efe0bf2ecd39a5c197d1b995b0541364eb1f8c0d Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 10:53:12 -0500 Subject: [PATCH 029/244] Document cocoa-app combinator --- basis/cocoa/application/application-docs.factor | 13 ++++++++++--- basis/cocoa/application/application.factor | 7 +++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/basis/cocoa/application/application-docs.factor b/basis/cocoa/application/application-docs.factor index 55fa5e10b8..791613e876 100644 --- a/basis/cocoa/application/application-docs.factor +++ b/basis/cocoa/application/application-docs.factor @@ -26,6 +26,10 @@ HELP: with-cocoa { $values { "quot" quotation } } { $description "Sets up an autorelease pool, initializes the " { $snippet "NSApplication" } " singleton, and calls the quotation." } ; +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." } ; @@ -46,13 +50,16 @@ HELP: objc-error { $error-description "Thrown by the Objective C runtime when an error occurs, for example, sending a message to an object with an unrecognized selector." } ; ARTICLE: "cocoa-application-utils" "Cocoa application utilities" +"Utilities:" { $subsection NSApp } -{ $subsection with-autorelease-pool } -{ $subsection with-cocoa } { $subsection do-event } { $subsection add-observer } { $subsection remove-observer } -{ $subsection install-delegate } ; +{ $subsection install-delegate } +"Combinators:" +{ $subsection cocoa-app } +{ $subsection with-autorelease-pool } +{ $subsection with-cocoa } ; IN: cocoa.application ABOUT: "cocoa-application-utils" diff --git a/basis/cocoa/application/application.factor b/basis/cocoa/application/application.factor index 065a4abc5a..8f32782d76 100644 --- a/basis/cocoa/application/application.factor +++ b/basis/cocoa/application/application.factor @@ -50,6 +50,13 @@ FUNCTION: void NSBeep ( ) ; : finish-launching ( -- ) NSApp -> finishLaunching ; +: cocoa-app ( quot -- ) + [ + call + finish-launching + NSApp -> run + ] with-cocoa ; inline + : install-delegate ( receiver delegate -- ) -> alloc -> init -> setDelegate: ; From d5bbbd90e4ccf3d286b31624eb5910234c89d18c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 10:53:19 -0500 Subject: [PATCH 030/244] Fix typo --- basis/tools/scaffold/scaffold-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/tools/scaffold/scaffold-docs.factor b/basis/tools/scaffold/scaffold-docs.factor index 479b636fcf..d2989d3cac 100644 --- a/basis/tools/scaffold/scaffold-docs.factor +++ b/basis/tools/scaffold/scaffold-docs.factor @@ -5,7 +5,7 @@ IN: tools.scaffold HELP: developer-name { $description "Set this symbol to hold your name so that the scaffold tools can generate the correct file header for copyright. Setting this variable in your .factor-boot-rc file is recommended." } -{ $unchecked-example "USING: namespaces tools.scaffold ;\n\"Stacky Guy\" developer-name set-global" } ; +{ $code "USING: namespaces tools.scaffold ;\n\"Stacky Guy\" developer-name set-global" } ; HELP: help. { $values From 00afda7f7e91ca8654119a07d3a2a8f773707e36 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Oct 2008 10:53:30 -0500 Subject: [PATCH 031/244] Don't copy freetype over if UI is not deployed --- basis/tools/deploy/backend/backend.factor | 8 +++++--- basis/tools/deploy/macosx/macosx.factor | 24 ++++++++++++++++++----- basis/tools/deploy/windows/windows.factor | 23 ++++++++++++++-------- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/basis/tools/deploy/backend/backend.factor b/basis/tools/deploy/backend/backend.factor index cb899f4b87..a0565c6bab 100644 --- a/basis/tools/deploy/backend/backend.factor +++ b/basis/tools/deploy/backend/backend.factor @@ -10,13 +10,15 @@ io.encodings.utf8 destructors accessors ; IN: tools.deploy.backend : copy-vm ( executable bundle-name extension -- vm ) - [ prepend-path ] dip append vm over copy-file ; + [ prepend-path ] dip append vm over copy-file ; : copy-fonts ( name dir -- ) - append-path "resource:fonts/" swap copy-tree-into ; + deploy-ui? get [ + append-path "resource:fonts/" swap copy-tree-into + ] [ 2drop ] if ; : image-name ( vocab bundle-name -- str ) - prepend-path ".image" append ; + prepend-path ".image" append ; : copy-lines ( -- ) readln [ print flush copy-lines ] when* ; diff --git a/basis/tools/deploy/macosx/macosx.factor b/basis/tools/deploy/macosx/macosx.factor index ee60ce3982..d3464993e1 100644 --- a/basis/tools/deploy/macosx/macosx.factor +++ b/basis/tools/deploy/macosx/macosx.factor @@ -4,7 +4,7 @@ USING: io io.files kernel namespaces make sequences system tools.deploy.backend tools.deploy.config assocs hashtables prettyprint io.unix.backend cocoa io.encodings.utf8 io.backend cocoa.application cocoa.classes cocoa.plists -qualified ; +qualified combinators ; IN: tools.deploy.macosx : bundle-dir ( -- dir ) @@ -30,12 +30,26 @@ IN: tools.deploy.macosx "Contents/Info.plist" append-path write-plist ; +: copy-dll ( bundle-name -- ) + "Frameworks/libfactor.dylib" copy-bundle-dir ; + +: copy-freetype ( bundle-name -- ) + deploy-ui? get [ "Frameworks" copy-bundle-dir ] [ drop ] if ; + +: copy-nib ( bundle-name -- ) + deploy-ui? get [ + "Resources/English.lproj/MiniFactor.nib" copy-bundle-dir + ] [ drop ] if ; + : create-app-dir ( vocab bundle-name -- vm ) [ - nip - [ "Frameworks" copy-bundle-dir ] - [ "Resources/English.lproj/MiniFactor.nib" copy-bundle-dir ] - [ "Contents/Resources/" copy-fonts ] tri + nip { + [ copy-dll ] + [ copy-freetype ] + [ copy-nib ] + [ "Contents/Resources/" copy-fonts ] + [ "Contents/Resources" append-path make-directories ] + } cleave ] [ create-app-plist ] [ "Contents/MacOS/" append-path "" copy-vm ] 2tri ; diff --git a/basis/tools/deploy/windows/windows.factor b/basis/tools/deploy/windows/windows.factor index e0ce2c268a..ce4fee19d7 100644 --- a/basis/tools/deploy/windows/windows.factor +++ b/basis/tools/deploy/windows/windows.factor @@ -5,16 +5,23 @@ tools.deploy.backend tools.deploy.config assocs hashtables prettyprint combinators windows.shell32 windows.user32 ; IN: tools.deploy.windows -: copy-dlls ( bundle-name -- ) - { - "resource:freetype6.dll" - "resource:zlib1.dll" - "resource:factor.dll" - } swap copy-files-into ; +: copy-dll ( bundle-name -- ) + "resource:factor.dll" swap copy-file-into ; + +: copy-freetype ( bundle-name -- ) + deploy-ui? get [ + { + "resource:freetype6.dll" + "resource:zlib1.dll" + } swap copy-files-into + ] when ; : create-exe-dir ( vocab bundle-name -- vm ) - dup copy-dlls - dup "" copy-fonts + deploy-ui? get [ + dup copy-dll + dup copy-freetype + dup "" copy-fonts + ] when ".exe" copy-vm ; M: winnt deploy* From 67683dde20affbdc8c8897c95b614a66e3758dff Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 12:11:56 -0500 Subject: [PATCH 032/244] make-db is gone, use or instead. docs. use dip instead of >r r> --- basis/db/db-docs.factor | 113 ++++++++------------------ basis/db/db.factor | 13 +-- basis/db/pools/pools.factor | 8 +- basis/db/postgresql/postgresql.factor | 25 +++--- basis/db/sqlite/sqlite.factor | 18 ++-- basis/db/tuples/tuples-tests.factor | 39 +++++---- 6 files changed, 90 insertions(+), 126 deletions(-) diff --git a/basis/db/db-docs.factor b/basis/db/db-docs.factor index 74b72b8789..a4a948d07f 100644 --- a/basis/db/db-docs.factor +++ b/basis/db/db-docs.factor @@ -5,27 +5,19 @@ alien assocs strings math multiline quotations ; 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." } ; +{ $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: new-db { $values { "class" class } { "obj" object } } -{ $description "Creates a new database object from a given class." } ; - -HELP: make-db* -{ $values { "object" object } { "db" object } { "db" object } } -{ $description "Takes a sequence of parameters specific to each database and a class name of the database, and constructs a new database object." } ; - -HELP: make-db -{ $values { "object" object } { "class" class } { "db" db } } -{ $description "Takes a sequence of parameters specific to each database and a class name of the database, and constructs a new database object." } ; +{ $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." } ; HELP: db-open { $values { "db" db } { "db" db } } -{ $description "Opens a database using the configuration data stored in a " { $link db } " tuple." } ; +{ $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." } ; HELP: db-close { $values { "handle" alien } } -{ $description "Closes a database using the handle provided." } ; +{ $description "Closes a database using the handle provided. Use of the " { $link with-db } " combinator is preferred over manually opening and closing databases so that resources are not leaked." } ; HELP: dispose-statements { $values { "assoc" assoc } } @@ -38,30 +30,18 @@ HELP: db-dispose HELP: statement { $description "A " { $snippet "statement" } " stores the information about a statemen, such as the SQL statement text, the in/out parameters, and type information." } ; -HELP: simple-statement -{ $description } ; - -HELP: prepared-statement -{ $description } ; - HELP: result-set { $description "An object encapsulating a raw SQL result object. There are two ways in which a result set can be accessed, but they are specific to the database backend in use." { $subsection "db-random-access-result-set" } { $subsection "db-sequential-result-set" } } ; -HELP: init-result-set -{ $values - { "result-set" result-set } } -{ $description "" } ; - HELP: new-result-set { $values { "query" "a query" } { "handle" alien } { "class" class } { "result-set" result-set } } { $description "Creates a new " { $link result-set } " object of type " { $snippet "class" } "." } ; - HELP: new-statement { $values { "sql" string } { "in" sequence } { "out" sequence } { "class" class } { "statement" statement } } { $description "Makes a new statement object from the given parameters." } ; @@ -80,18 +60,6 @@ HELP: prepare-statement { $values { "statement" statement } } { $description "For databases which implement a method on this generic, it does some internal processing to ready the statement for execution." } ; -HELP: bind-statement* -{ $values { "statement" statement } } -{ $description "" } ; - -HELP: low-level-bind -{ $values { "statement" statement } } -{ $description "" } ; - -HELP: bind-tuple -{ $values { "tuple" tuple } { "statement" statement } } -{ $description "" } ; - HELP: query-results { $values { "query" object } { "result-set" result-set } @@ -125,41 +93,14 @@ HELP: more-rows? { $values { "result-set" result-set } { "?" "a boolean" } } { $description "Returns true if the " { $link result-set } " has more rows to traverse." } ; -HELP: execute-statement* -{ $values { "statement" statement } { "type" object } } -{ $description } ; - -HELP: execute-one-statement -{ $values - { "statement" null } } -{ $description "" } ; - -HELP: execute-statement -{ $values { "statement" statement } } -{ $description "" } ; - - - - HELP: begin-transaction { $description "Begins a new transaction. User code should make use of the " { $link with-transaction } " combinator." } ; -HELP: bind-statement -{ $values - { "obj" object } { "statement" null } } -{ $description "" } ; - HELP: commit-transaction { $description "Commits a transaction. User code should make use of the " { $link with-transaction } " combinator." } ; -HELP: default-query -{ $values - { "query" null } - { "result-set" null } } -{ $description "" } ; - HELP: in-transaction { $description "A variable that is set true when a transaction is in progress." } ; @@ -170,14 +111,14 @@ HELP: in-transaction? HELP: query-each { $values - { "statement" null } { "quot" quotation } } -{ $description "" } ; + { "statement" statement } { "quot" quotation } } +{ $description "A combinator that calls a quotation on a sequence of SQL statments to their results query results." } ; HELP: query-map { $values - { "statement" null } { "quot" quotation } + { "statement" statement } { "quot" quotation } { "seq" sequence } } -{ $description "" } ; +{ $description "A combinator that maps a sequence of SQL statments to their results query results." } ; HELP: rollback-transaction { $description "Rolls back a transaction; no data is committed to the database. User code should make use of the " { $link with-transaction } " combinator." } ; @@ -211,7 +152,7 @@ HELP: sql-row-typed HELP: with-db { $values - { "seq" sequence } { "class" class } { "quot" quotation } } + { "db" db } { "quot" quotation } } { $description "Calls the quotation with a database bound to the " { $link db } " symbol. The database called is based on the " { $snippet "class" } " with the " } ; HELP: with-transaction @@ -247,7 +188,7 @@ $nl { $subsection row-column-typed } ; ARTICLE: "db-sequential-result-set" "Sequential result sets" -"Sequential result sets can be iterated one element after the next. SQLite's result sets offer this method of traversal." +"Sequential result sets can be iterated one element after the next. SQLite's result sets offer this method of traversal." $nl "Databases which work in this way must provide methods for the following traversal words:" { $subsection more-rows? } @@ -272,26 +213,44 @@ $nl { $subsection row-column-typed } ; ARTICLE: "db-protocol" "Low-level database protocol" -"The high-level protocol (see " { $vocab-link "db.tuples" } ") uses this low-level protocol for executing statements and queries." -; +"The high-level protocol (see " { $vocab-link "db.tuples" } ") uses this low-level protocol for executing statements and queries." $nl +"Opening a database:" +{ $subsection db-open } +"Closing a database:" +{ $subsection db-close } + +"Performing a query:" +{ $subsection query-results } + +"Handling query results:" +{ $subsection "db-result-sets" } + + ; ARTICLE: "db-lowlevel-tutorial" "Low-level database tutorial" "Although Factor makes integrating a database with its object system easy (see " { $vocab-link "db.tuples" } "), sometimes you may want to write SQL directly and get the results back as arrays of strings, for instance, when interfacing with a legacy database that doesn't easily map to " { $snippet "tuples" } "." ; ARTICLE: "db-porting-the-library" "Porting the database library" -"This section is not yet written." +"There are two layers to implement when porting the database library." +{ $subsection "db-protocol" } ; ARTICLE: "db-custom-database-combinators" "Custom database combinators" -"Every database library requires some effort on the programmer's part to initialize and open a database. SQLite uses files on your harddisk, so a simple pathname is all the setup required. With PostgreSQL, you log in to a networked server as a user on a specfic port." $nl +"Every database library requires some effort on the programmer's part to initialize and open a database. SQLite uses files on your harddisk, so a simple pathname is all the setup required. With PostgreSQL, you log in to a networked server as a user on a specfic port." $nl -"Make a " { $snippet "with-" } " word to open, close, and use your database." +"Make a " { $snippet "with-" } " combinator to open and close a database so that resources are not leaked." { $code <" USING: db.sqlite db io.files ; -: with-my-database ( quot -- ) - { "my-database.db" temp-file } sqlite-db rot with-db ; -"> } +: with-sqlite-db ( quot -- ) + "my-database.db" temp-file sqlite-db rot with-db ;"> } + +{ $code <" +USING: db.postgresql db ; +: with-postgresql-db ( quot -- ) + { "localhost" "db-username" "db-password" "db-name" } + postgresql-db rot with-db ;"> +} ; diff --git a/basis/db/db.factor b/basis/db/db.factor index 87bf21d261..5b159d0ea1 100755 --- a/basis/db/db.factor +++ b/basis/db/db.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays assocs classes continuations destructors kernel math namespaces sequences classes.tuple words strings -tools.walker accessors combinators ; +tools.walker accessors combinators fry ; IN: db TUPLE: db @@ -17,10 +17,6 @@ TUPLE: db H{ } clone >>update-statements H{ } clone >>delete-statements ; inline -GENERIC: make-db* ( object db -- db ) - -: make-db ( object class -- db ) new-db make-db* ; - GENERIC: db-open ( db -- db ) HOOK: db-close db ( handle -- ) @@ -111,10 +107,9 @@ M: object execute-statement* ( statement type -- ) : query-map ( statement quot -- seq ) accumulator [ query-each ] dip { } like ; inline -: with-db ( seq class quot -- ) - [ make-db db-open db ] dip - [ db get swap [ drop ] prepose with-disposal ] curry with-variable ; - inline +: with-db ( db quot -- ) + [ db-open db ] dip + '[ db get [ drop @ ] with-disposal ] with-variable ; inline : default-query ( query -- result-set ) query-results [ [ sql-row ] query-map ] with-disposal ; diff --git a/basis/db/pools/pools.factor b/basis/db/pools/pools.factor index 63153c451e..45f37f8f7c 100644 --- a/basis/db/pools/pools.factor +++ b/basis/db/pools/pools.factor @@ -1,10 +1,10 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors kernel arrays namespaces sequences continuations -io.pools db ; +io.pools db fry ; IN: db.pools -TUPLE: db-pool < pool db params ; +TUPLE: db-pool < pool db ; : ( params db -- pool ) db-pool @@ -15,7 +15,7 @@ TUPLE: db-pool < pool db params ; >r r> with-pool ; inline M: db-pool make-connection ( pool -- ) - [ params>> ] [ db>> ] bi make-db db-open ; + db>> db-open ; : with-pooled-db ( pool quot -- ) - [ db swap with-variable ] curry with-pooled-connection ; inline + '[ db _ with-variable ] with-pooled-connection ; inline diff --git a/basis/db/postgresql/postgresql.factor b/basis/db/postgresql/postgresql.factor index 28548d1260..08df25c13a 100755 --- a/basis/db/postgresql/postgresql.factor +++ b/basis/db/postgresql/postgresql.factor @@ -10,28 +10,24 @@ USE: tools.walker IN: db.postgresql TUPLE: postgresql-db < db - host port pgopts pgtty db user pass ; + host port pgopts pgtty database username password ; + +: ( -- postgresql-db ) + postgresql-db new-db ; TUPLE: postgresql-statement < statement ; TUPLE: postgresql-result-set < result-set ; -M: postgresql-db make-db* ( seq db -- db ) - >r first4 r> - swap >>db - swap >>pass - swap >>user - swap >>host ; - M: postgresql-db db-open ( db -- db ) dup { [ host>> ] [ port>> ] [ pgopts>> ] [ pgtty>> ] - [ db>> ] - [ user>> ] - [ pass>> ] + [ database>> ] + [ username>> ] + [ password>> ] } cleave connect-postgres >>handle ; M: postgresql-db dispose ( db -- ) @@ -102,7 +98,7 @@ M: postgresql-result-set dispose ( result-set -- ) M: postgresql-statement prepare-statement ( statement -- ) dup - >r db get handle>> f r> + [ db get handle>> f ] dip [ sql>> ] [ in-params>> ] bi length f PQprepare postgresql-error >>handle drop ; @@ -121,7 +117,8 @@ M: postgresql-db bind% ( spec -- ) bind-name% 1, ; M: postgresql-db bind# ( spec object -- ) - >r bind-name% f swap type>> r> 1, ; + [ bind-name% f swap type>> ] dip + 1, ; : create-table-sql ( class -- statement ) [ @@ -143,7 +140,7 @@ M: postgresql-db bind# ( spec object -- ) : create-function-sql ( class -- statement ) [ - >r remove-id r> + [ remove-id ] dip "create function add_" 0% dup 0% "(" 0% over [ "," 0% ] diff --git a/basis/db/sqlite/sqlite.factor b/basis/db/sqlite/sqlite.factor index dfd9fab08c..dfe4fdf475 100755 --- a/basis/db/sqlite/sqlite.factor +++ b/basis/db/sqlite/sqlite.factor @@ -11,8 +11,9 @@ IN: db.sqlite TUPLE: sqlite-db < db path ; -M: sqlite-db make-db* ( path db -- db ) - swap >>path ; +: ( path -- sqlite-db ) + sqlite-db new-db + swap >>path ; M: sqlite-db db-open ( db -- db ) dup path>> sqlite-open >>handle ; @@ -78,7 +79,8 @@ M: generator-bind sqlite-bind-conversion ( tuple generate-bind -- array ) tuck [ generator-singleton>> eval-generator tuck ] [ slot-name>> ] bi rot set-slot-named - >r [ key>> ] [ type>> ] bi r> swap ; + [ [ key>> ] [ type>> ] bi ] dip + swap ; M: sqlite-statement bind-tuple ( tuple statement -- ) [ @@ -100,7 +102,7 @@ M: sqlite-result-set row-column ( result-set n -- obj ) M: sqlite-result-set row-column-typed ( result-set n -- obj ) dup pick out-params>> nth type>> - >r >r handle>> r> r> sqlite-column-typed ; + [ handle>> ] 2dip sqlite-column-typed ; M: sqlite-result-set advance-row ( result-set -- ) dup handle>> sqlite-next >>has-more? drop ; @@ -160,10 +162,10 @@ M: sqlite-db ( tuple -- statement ) ; M: sqlite-db bind# ( spec obj -- ) - >r - [ column-name>> ":" swap next-sql-counter 3append dup 0% ] - [ type>> ] bi - r> 1, ; + [ + [ column-name>> ":" swap next-sql-counter 3append dup 0% ] + [ type>> ] bi + ] dip 1, ; M: sqlite-db bind% ( spec -- ) dup 1, column-name>> ":" prepend 0% ; diff --git a/basis/db/tuples/tuples-tests.factor b/basis/db/tuples/tuples-tests.factor index 406d4756a2..f5569a97cd 100755 --- a/basis/db/tuples/tuples-tests.factor +++ b/basis/db/tuples/tuples-tests.factor @@ -7,16 +7,34 @@ db.postgresql accessors random math.bitwise math.ranges strings urls fry db.tuples.private ; IN: db.tuples.tests +: sqlite-db ( -- sqlite-db ) + "tuples-test.db" temp-file ; + : test-sqlite ( quot -- ) - [ ] swap '[ - "tuples-test.db" temp-file sqlite-db _ with-db - ] unit-test ; + '[ + [ ] [ + "tuples-test.db" temp-file _ with-db + ] unit-test + ] call ; inline + +: postgresql-db ( -- postgresql-db ) + + "localhost" >>host + "postgres" >>username + "thepasswordistrust" >>password + "factor-test" >>database ; : test-postgresql ( quot -- ) - [ ] swap '[ - { "localhost" "postgres" "foob" "factor-test" } - postgresql-db _ with-db - ] unit-test ; + '[ + [ ] [ postgresql-db _ with-db ] unit-test + ] call ; inline + +! These words leak resources, but are useful for interactivel testing +: sqlite-test-db ( -- ) + sqlite-db db-open db set ; + +: postgresql-test-db ( -- ) + postgresql-db db-open db set ; TUPLE: person the-id the-name the-number the-real ts date time blob factor-blob url ; @@ -639,10 +657,3 @@ compound-foo "COMPOUND_FOO" [ test-compound-primary-key ] test-sqlite [ test-compound-primary-key ] test-postgresql - -: sqlite-test-db ( -- ) - "tuples-test.db" temp-file sqlite-db make-db db-open db set ; - -: postgresql-test-db ( -- ) - { "localhost" "postgres" "foob" "factor-test" } postgresql-db - make-db db-open db set ; From a7027700d13fcd80816ceac22c3766981f1e5baf Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 12:51:21 -0500 Subject: [PATCH 033/244] update with-db usages --- basis/db/pools/pools.factor | 9 ++++---- basis/furnace/alloy/alloy.factor | 22 +++++++++---------- .../furnace/auth/providers/db/db-tests.factor | 2 +- basis/furnace/db/db.factor | 2 +- basis/furnace/sessions/sessions-tests.factor | 4 ++-- basis/http/http-tests.factor | 2 +- extra/webapps/planet/planet.factor | 4 ++-- .../concatenative/concatenative.factor | 2 +- 8 files changed, 22 insertions(+), 25 deletions(-) diff --git a/basis/db/pools/pools.factor b/basis/db/pools/pools.factor index 45f37f8f7c..8bc5e87f0e 100644 --- a/basis/db/pools/pools.factor +++ b/basis/db/pools/pools.factor @@ -6,13 +6,12 @@ IN: db.pools TUPLE: db-pool < pool db ; -: ( params db -- pool ) +: ( db -- pool ) db-pool - swap >>db - swap >>params ; + swap >>db ; -: with-db-pool ( db params quot -- ) - >r r> with-pool ; inline +: with-db-pool ( db quot -- ) + [ ] dip with-pool ; inline M: db-pool make-connection ( pool -- ) db>> db-open ; diff --git a/basis/furnace/alloy/alloy.factor b/basis/furnace/alloy/alloy.factor index decee690a3..128ec448b7 100644 --- a/basis/furnace/alloy/alloy.factor +++ b/basis/furnace/alloy/alloy.factor @@ -17,19 +17,17 @@ IN: furnace.alloy state-classes ensure-tables user ensure-table ; -: ( responder db params -- responder' ) - [ [ init-furnace-tables ] with-db ] +: ( responder db -- responder' ) + [ [ init-furnace-tables ] with-db ] keep [ - [ - - - - ] 2dip - - - ] 2bi ; + + + + ] dip + + ; -: start-expiring ( db params -- ) +: start-expiring ( db -- ) '[ - _ _ [ state-classes [ expire-state ] each ] with-db + _ [ state-classes [ expire-state ] each ] with-db ] 5 minutes every drop ; diff --git a/basis/furnace/auth/providers/db/db-tests.factor b/basis/furnace/auth/providers/db/db-tests.factor index fac5c23e4a..3bcd82a15d 100755 --- a/basis/furnace/auth/providers/db/db-tests.factor +++ b/basis/furnace/auth/providers/db/db-tests.factor @@ -11,7 +11,7 @@ io.files accessors kernel ; [ "auth-test.db" temp-file delete-file ] ignore-errors -"auth-test.db" temp-file sqlite-db [ +"auth-test.db" temp-file [ user ensure-table diff --git a/basis/furnace/db/db.factor b/basis/furnace/db/db.factor index b4a4386015..ed18e42a4f 100755 --- a/basis/furnace/db/db.factor +++ b/basis/furnace/db/db.factor @@ -6,7 +6,7 @@ IN: furnace.db TUPLE: db-persistence < filter-responder pool ; -: ( responder params db -- responder' ) +: ( responder db -- responder' ) db-persistence boa ; M: db-persistence call-responder* diff --git a/basis/furnace/sessions/sessions-tests.factor b/basis/furnace/sessions/sessions-tests.factor index ff089a92b2..6bb3c1cd69 100755 --- a/basis/furnace/sessions/sessions-tests.factor +++ b/basis/furnace/sessions/sessions-tests.factor @@ -48,9 +48,9 @@ M: foo call-responder* [ [ ] "text/plain" exit-with ] >>display ; -[ "auth-test.db" temp-file sqlite-db delete-file ] ignore-errors +[ "auth-test.db" temp-file delete-file ] ignore-errors -"auth-test.db" temp-file sqlite-db [ +"auth-test.db" temp-file [ init-request session ensure-table diff --git a/basis/http/http-tests.factor b/basis/http/http-tests.factor index 9a1421a3ad..eb8ba34f9e 100755 --- a/basis/http/http-tests.factor +++ b/basis/http/http-tests.factor @@ -182,7 +182,7 @@ http.server.dispatchers db.tuples ; [ stop-server "Goodbye" "text/html" ] >>display "quit" add-responder ; -: test-db "test.db" temp-file sqlite-db ; +: test-db "test.db" temp-file ; [ test-db drop delete-file ] ignore-errors diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index 00d843573c..6c097d7faa 100755 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -195,5 +195,5 @@ posting "POSTINGS" { planet "planet-common" } >>template ; -: start-update-task ( db params -- ) - '[ _ _ [ update-cached-postings ] with-db ] 10 minutes every drop ; +: start-update-task ( db -- ) + '[ _ [ update-cached-postings ] with-db ] 10 minutes every drop ; diff --git a/extra/websites/concatenative/concatenative.factor b/extra/websites/concatenative/concatenative.factor index 5553fda740..aa99493fa6 100644 --- a/extra/websites/concatenative/concatenative.factor +++ b/extra/websites/concatenative/concatenative.factor @@ -26,7 +26,7 @@ webapps.user-admin webapps.help ; IN: websites.concatenative -: test-db ( -- params db ) "resource:test.db" sqlite-db ; +: test-db ( -- params db ) "resource:test.db" ; : init-factor-db ( -- ) test-db [ From 1c189a479c62c6512b7f2b489394df3002ccc5f2 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 14:02:38 -0500 Subject: [PATCH 034/244] more docs, fix typos --- basis/db/db-docs.factor | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/basis/db/db-docs.factor b/basis/db/db-docs.factor index a4a948d07f..b0a01269ab 100644 --- a/basis/db/db-docs.factor +++ b/basis/db/db-docs.factor @@ -112,13 +112,13 @@ HELP: in-transaction? HELP: query-each { $values { "statement" statement } { "quot" quotation } } -{ $description "A combinator that calls a quotation on a sequence of SQL statments to their results query results." } ; +{ $description "A combinator that calls a quotation on a sequence of SQL statements to their results query results." } ; HELP: query-map { $values { "statement" statement } { "quot" quotation } { "seq" sequence } } -{ $description "A combinator that maps a sequence of SQL statments to their results query results." } ; +{ $description "A combinator that maps a sequence of SQL statements to their results query results." } ; HELP: rollback-transaction { $description "Rolls back a transaction; no data is committed to the database. User code should make use of the " { $link with-transaction } " combinator." } ; @@ -218,14 +218,19 @@ ARTICLE: "db-protocol" "Low-level database protocol" { $subsection db-open } "Closing a database:" { $subsection db-close } - +"Creating tatements:" +{ $subsection } +{ $subsection } +"Using statements with the database:" +{ $subsection prepare-statement } +{ $subsection bind-statement* } +{ $subsection low-level-bind } "Performing a query:" { $subsection query-results } - "Handling query results:" { $subsection "db-result-sets" } - - ; +; +! { $subsection bind-tuple } ARTICLE: "db-lowlevel-tutorial" "Low-level database tutorial" "Although Factor makes integrating a database with its object system easy (see " { $vocab-link "db.tuples" } "), sometimes you may want to write SQL directly and get the results back as arrays of strings, for instance, when interfacing with a legacy database that doesn't easily map to " { $snippet "tuples" } "." @@ -243,13 +248,16 @@ ARTICLE: "db-custom-database-combinators" "Custom database combinators" { $code <" USING: db.sqlite db io.files ; : with-sqlite-db ( quot -- ) - "my-database.db" temp-file sqlite-db rot with-db ;"> } + "my-database.db" temp-file rot with-db ;"> } -{ $code <" -USING: db.postgresql db ; +{ $code <" USING: db.postgresql db ; : with-postgresql-db ( quot -- ) - { "localhost" "db-username" "db-password" "db-name" } - postgresql-db rot with-db ;"> + + "localhost" >>host + "erg" >>username + "secrets?" >>password + "factor-test" >>database + swap with-db ;"> } ; From 50493ba446c42cc2ea0ff193fc13a9ac50e199e4 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 16:02:31 -0500 Subject: [PATCH 035/244] fix unit tests --- basis/db/db-tests.factor | 2 +- basis/db/pools/pools-tests.factor | 2 +- basis/db/postgresql/postgresql-tests.factor | 13 +++++++------ basis/db/sqlite/sqlite-tests.factor | 2 +- basis/db/tuples/tuples.factor | 3 ++- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/basis/db/db-tests.factor b/basis/db/db-tests.factor index 3f1dab2c37..56b6c25a19 100644 --- a/basis/db/db-tests.factor +++ b/basis/db/db-tests.factor @@ -3,4 +3,4 @@ IN: db.tests { 1 0 } [ [ drop ] query-each ] must-infer-as { 1 1 } [ [ ] query-map ] must-infer-as -{ 2 0 } [ [ ] with-db ] must-infer-as +{ 1 0 } [ [ ] with-db ] must-infer-as diff --git a/basis/db/pools/pools-tests.factor b/basis/db/pools/pools-tests.factor index f07d1e8468..0ea7b1a6f4 100644 --- a/basis/db/pools/pools-tests.factor +++ b/basis/db/pools/pools-tests.factor @@ -13,7 +13,7 @@ USE: db.sqlite [ "pool-test.db" temp-file delete-file ] ignore-errors -[ ] [ "pool-test.db" temp-file sqlite-db "pool" set ] unit-test +[ ] [ "pool-test.db" temp-file "pool" set ] unit-test [ ] [ "pool" get expired>> t >>expired drop ] unit-test diff --git a/basis/db/postgresql/postgresql-tests.factor b/basis/db/postgresql/postgresql-tests.factor index 65b75a63dc..fe53e2416e 100644 --- a/basis/db/postgresql/postgresql-tests.factor +++ b/basis/db/postgresql/postgresql-tests.factor @@ -1,13 +1,14 @@ -! You will need to run 'createdb factor-test' to create the database. -! Set username and password in the 'connect' word. - USING: kernel db.postgresql alien continuations io classes prettyprint sequences namespaces tools.test db -db.tuples db.types unicode.case ; +db.tuples db.types unicode.case accessors ; IN: db.postgresql.tests : test-db ( -- postgresql-db ) - { "localhost" "postgres" "foob" "factor-test" } postgresql-db ; + + "localhost" >>host + "postgres" >>username + "thepasswordistrust" >>password + "factor-test" >>database ; [ ] [ test-db [ ] with-db ] unit-test @@ -92,4 +93,4 @@ IN: db.postgresql.tests : with-dummy-db ( quot -- ) - >r T{ postgresql-db } db r> with-variable ; + [ T{ postgresql-db } db ] dip with-variable ; diff --git a/basis/db/sqlite/sqlite-tests.factor b/basis/db/sqlite/sqlite-tests.factor index 67eac2702b..fe95980bcf 100644 --- a/basis/db/sqlite/sqlite-tests.factor +++ b/basis/db/sqlite/sqlite-tests.factor @@ -4,7 +4,7 @@ continuations db.types db.tuples unicode.case ; IN: db.sqlite.tests : db-path "test.db" temp-file ; -: test.db db-path sqlite-db ; +: test.db db-path ; [ ] [ [ db-path delete-file ] ignore-errors ] unit-test diff --git a/basis/db/tuples/tuples.factor b/basis/db/tuples/tuples.factor index 7f567697d2..20d7ac4f84 100644 --- a/basis/db/tuples/tuples.factor +++ b/basis/db/tuples/tuples.factor @@ -7,7 +7,7 @@ destructors mirrors sets db.types ; IN: db.tuples From 75c2283dd6b77be1d38868966dc29d15a34cedf6 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 16:36:29 -0500 Subject: [PATCH 036/244] fix stack effect --- extra/websites/concatenative/concatenative.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/websites/concatenative/concatenative.factor b/extra/websites/concatenative/concatenative.factor index aa99493fa6..d7fdfa2460 100644 --- a/extra/websites/concatenative/concatenative.factor +++ b/extra/websites/concatenative/concatenative.factor @@ -26,7 +26,7 @@ webapps.user-admin webapps.help ; IN: websites.concatenative -: test-db ( -- params db ) "resource:test.db" ; +: test-db ( -- db ) "resource:test.db" ; : init-factor-db ( -- ) test-db [ From aeb5d60d3ad0ae2336854d94ba394dcb32f92825 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 16:36:50 -0500 Subject: [PATCH 037/244] fix test --- basis/db/pools/pools-tests.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/db/pools/pools-tests.factor b/basis/db/pools/pools-tests.factor index 0ea7b1a6f4..0a68db501b 100644 --- a/basis/db/pools/pools-tests.factor +++ b/basis/db/pools/pools-tests.factor @@ -4,7 +4,7 @@ accessors kernel math destructors ; \ must-infer -{ 2 0 } [ [ ] with-db-pool ] must-infer-as +{ 1 0 } [ [ ] with-db-pool ] must-infer-as { 1 0 } [ [ ] with-pooled-db ] must-infer-as From 39eacca297cd0c96320b10d5fc70522c9186d403 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 16:37:04 -0500 Subject: [PATCH 038/244] fix test, something is still broken --- basis/http/http-tests.factor | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/basis/http/http-tests.factor b/basis/http/http-tests.factor index 608ba0c88f..b3930878ff 100644 --- a/basis/http/http-tests.factor +++ b/basis/http/http-tests.factor @@ -182,9 +182,11 @@ http.server.dispatchers db.tuples ; [ stop-this-server "Goodbye" "text/html" ] >>display "quit" add-responder ; -: test-db "test.db" temp-file ; +: test-db-file "test.db" temp-file ; -[ test-db drop delete-file ] ignore-errors +: test-db test-db-file ; + +[ test-db-file delete-file ] ignore-errors test-db [ init-furnace-tables From 84e267a2a999507d174477230a2b1ec0aab97200 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 17:24:55 -0500 Subject: [PATCH 039/244] remove lib usage --- extra/lisp/lisp.factor | 6 +++--- extra/lisp/parser/parser.factor | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/extra/lisp/lisp.factor b/extra/lisp/lisp.factor index 2866e63c69..e60529caab 100644 --- a/extra/lisp/lisp.factor +++ b/extra/lisp/lisp.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2008 James Cash ! See http://factorcode.org/license.txt for BSD license. -USING: kernel peg sequences arrays strings combinators.lib +USING: kernel peg sequences arrays strings namespaces combinators math locals locals.private locals.backend accessors -vectors syntax lisp.parser assocs parser sequences.lib words +vectors syntax lisp.parser assocs parser words quotations fry lists summary combinators.short-circuit continuations multiline ; IN: lisp @@ -180,4 +180,4 @@ M: no-such-var summary drop "No such variable" ; : " parse-multiline-string define-lisp-builtins - lisp-string>factor parsed \ call parsed ; parsing \ No newline at end of file + lisp-string>factor parsed \ call parsed ; parsing diff --git a/extra/lisp/parser/parser.factor b/extra/lisp/parser/parser.factor index 1b14f5bb34..72344fd0dc 100644 --- a/extra/lisp/parser/parser.factor +++ b/extra/lisp/parser/parser.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 James Cash ! See http://factorcode.org/license.txt for BSD license. USING: kernel peg peg.ebnf math.parser sequences arrays strings -combinators.lib math fry accessors lists combinators.short-circuit ; +math fry accessors lists combinators.short-circuit ; IN: lisp.parser @@ -36,4 +36,4 @@ atom = number | string s-expression = LPAREN (list-item)* RPAREN => [[ second seq>cons ]] list-item = _ ( atom | s-expression ) _ => [[ second ]] -;EBNF \ No newline at end of file +;EBNF From c0dab60dc72f075195566079d4f0262a7b4ae087 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 17:33:26 -0500 Subject: [PATCH 040/244] dont use lib --- extra/descriptive/descriptive.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/descriptive/descriptive.factor b/extra/descriptive/descriptive.factor index 4b40747e9f..d02983d7fd 100755 --- a/extra/descriptive/descriptive.factor +++ b/extra/descriptive/descriptive.factor @@ -1,4 +1,4 @@ -USING: words kernel sequences combinators.lib locals +USING: words kernel sequences locals locals.private accessors parser namespaces continuations summary definitions generalizations arrays ; IN: descriptive From 4e81c83e642d5c0fcb423782c589485a53acc496 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 17:34:42 -0500 Subject: [PATCH 041/244] remove lib usage --- extra/parser-combinators/regexp/regexp.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/parser-combinators/regexp/regexp.factor b/extra/parser-combinators/regexp/regexp.factor index 40d4603fb6..b13321d991 100755 --- a/extra/parser-combinators/regexp/regexp.factor +++ b/extra/parser-combinators/regexp/regexp.factor @@ -1,6 +1,6 @@ USING: arrays combinators kernel lists math math.parser namespaces parser lexer parser-combinators parser-combinators.simple -promises quotations sequences combinators.lib strings math.order +promises quotations sequences strings math.order assocs prettyprint.backend memoize unicode.case unicode.categories combinators.short-circuit accessors make io ; IN: parser-combinators.regexp From d99be8bf77edb567cdd9465174dfe64f6d7f6d28 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 17:37:03 -0500 Subject: [PATCH 042/244] dont use lib --- extra/faq/faq.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/faq/faq.factor b/extra/faq/faq.factor index 1ab348e434..c0636c5fd7 100644 --- a/extra/faq/faq.factor +++ b/extra/faq/faq.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007 Daniel Ehrenberg ! See http://factorcode.org/license.txt for BSD license. -USING: xml kernel sequences xml.utilities combinators.lib -math xml.data arrays assocs xml.generator xml.writer namespaces +USING: xml kernel sequences xml.utilities math xml.data +arrays assocs xml.generator xml.writer namespaces make math.parser io accessors ; IN: faq From 6e7aa21cb58877a935e7a820b270c3c13fcadee8 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 17:40:49 -0500 Subject: [PATCH 043/244] dont use lib --- extra/project-euler/014/014.factor | 2 +- extra/project-euler/021/021.factor | 4 ++-- extra/project-euler/032/032.factor | 2 +- extra/project-euler/036/036.factor | 2 +- extra/project-euler/043/043.factor | 4 ++-- extra/project-euler/047/047.factor | 2 +- extra/project-euler/052/052.factor | 2 +- extra/project-euler/075/075.factor | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/extra/project-euler/014/014.factor b/extra/project-euler/014/014.factor index fcbc956de8..dc0c060b22 100644 --- a/extra/project-euler/014/014.factor +++ b/extra/project-euler/014/014.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2007 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays combinators.lib combinators.short-circuit kernel +USING: arrays combinators.short-circuit kernel math math.ranges namespaces make sequences sorting ; IN: project-euler.014 diff --git a/extra/project-euler/021/021.factor b/extra/project-euler/021/021.factor index 9ae5f6af10..af6bb3270b 100644 --- a/extra/project-euler/021/021.factor +++ b/extra/project-euler/021/021.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2007 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators.lib combinators.short-circuit kernel math math.functions - math.ranges namespaces project-euler.common sequences sequences.lib ; +USING: combinators.short-circuit kernel math math.functions + math.ranges namespaces project-euler.common sequences ; IN: project-euler.021 ! http://projecteuler.net/index.php?section=problems&id=21 diff --git a/extra/project-euler/032/032.factor b/extra/project-euler/032/032.factor index 8a54c595a9..f9667c75fe 100755 --- a/extra/project-euler/032/032.factor +++ b/extra/project-euler/032/032.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators.lib hashtables kernel math math.combinatorics math.functions +USING: hashtables kernel math math.combinatorics math.functions math.parser math.ranges project-euler.common sequences sets ; IN: project-euler.032 diff --git a/extra/project-euler/036/036.factor b/extra/project-euler/036/036.factor index f3a9f738bf..fc9df9a8fe 100644 --- a/extra/project-euler/036/036.factor +++ b/extra/project-euler/036/036.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators.lib combinators.short-circuit kernel math.parser math.ranges +USING: combinators.short-circuit kernel math.parser math.ranges project-euler.common sequences ; IN: project-euler.036 diff --git a/extra/project-euler/043/043.factor b/extra/project-euler/043/043.factor index a2f4ad5c61..84ed7a830f 100644 --- a/extra/project-euler/043/043.factor +++ b/extra/project-euler/043/043.factor @@ -1,8 +1,8 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators.lib combinators.short-circuit hashtables kernel math +USING: combinators.short-circuit hashtables kernel math math.combinatorics math.parser math.ranges project-euler.common sequences - sequences.lib sorting sets ; + sorting sets ; IN: project-euler.043 ! http://projecteuler.net/index.php?section=problems&id=43 diff --git a/extra/project-euler/047/047.factor b/extra/project-euler/047/047.factor index e59ca56f39..87a1387887 100644 --- a/extra/project-euler/047/047.factor +++ b/extra/project-euler/047/047.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays combinators.lib kernel math math.primes math.primes.factors +USING: arrays kernel math math.primes math.primes.factors math.ranges namespaces sequences ; IN: project-euler.047 diff --git a/extra/project-euler/052/052.factor b/extra/project-euler/052/052.factor index aec8015f94..3f562baa85 100644 --- a/extra/project-euler/052/052.factor +++ b/extra/project-euler/052/052.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators.lib combinators.short-circuit kernel math +USING: combinators.short-circuit kernel math project-euler.common sequences sorting ; IN: project-euler.052 diff --git a/extra/project-euler/075/075.factor b/extra/project-euler/075/075.factor index 8e5b849de5..76f2a2a26e 100755 --- a/extra/project-euler/075/075.factor +++ b/extra/project-euler/075/075.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays combinators.lib kernel math math.ranges - namespaces project-euler.common sequences sequences.lib ; +USING: arrays kernel math math.ranges + namespaces project-euler.common sequences ; IN: project-euler.075 ! http://projecteuler.net/index.php?section=problems&id=75 From 86cdfa3a4c81086b2e19771cfe5a126e8bf85f55 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 17:49:04 -0500 Subject: [PATCH 044/244] remove lib usage, fix compile errors --- extra/project-euler/017/017.factor | 2 +- extra/project-euler/019/019.factor | 4 ++-- extra/project-euler/022/022.factor | 2 +- extra/project-euler/030/030.factor | 2 +- extra/project-euler/034/034.factor | 2 +- extra/project-euler/035/035.factor | 2 +- extra/project-euler/039/039.factor | 2 +- extra/project-euler/042/042.factor | 2 +- extra/project-euler/055/055.factor | 6 +++--- extra/project-euler/059/059.factor | 2 +- extra/project-euler/116/116.factor | 2 +- extra/project-euler/148/148.factor | 2 +- extra/project-euler/151/151.factor | 3 +-- extra/project-euler/186/186.factor | 2 +- extra/project-euler/190/190.factor | 2 +- 15 files changed, 18 insertions(+), 19 deletions(-) diff --git a/extra/project-euler/017/017.factor b/extra/project-euler/017/017.factor index cf58e88ffe..5f6541873a 100644 --- a/extra/project-euler/017/017.factor +++ b/extra/project-euler/017/017.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2007 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math.ranges math.text.english sequences sequences.lib strings +USING: kernel math.ranges math.text.english sequences strings ascii combinators.short-circuit ; IN: project-euler.017 diff --git a/extra/project-euler/019/019.factor b/extra/project-euler/019/019.factor index b29495f913..9482b337bb 100644 --- a/extra/project-euler/019/019.factor +++ b/extra/project-euler/019/019.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2007 Samuel Tardieu, Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: calendar combinators kernel math math.ranges namespaces sequences - sequences.lib math.order ; + math.order ; IN: project-euler.019 ! http://projecteuler.net/index.php?section=problems&id=19 @@ -32,7 +32,7 @@ IN: project-euler.019 : euler019 ( -- answer ) 1901 2000 [a,b] [ - 12 [1,b] [ 1 zeller-congruence ] map-with + 12 [1,b] [ 1 zeller-congruence ] with map ] map concat [ zero? ] count ; ! [ euler019 ] 100 ave-time diff --git a/extra/project-euler/022/022.factor b/extra/project-euler/022/022.factor index 82054ce014..a508ddea6c 100644 --- a/extra/project-euler/022/022.factor +++ b/extra/project-euler/022/022.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2007 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: ascii io.encodings.ascii io.files kernel math project-euler.common - sequences sequences.lib sorting splitting ; + sequences sorting splitting ; IN: project-euler.022 ! http://projecteuler.net/index.php?section=problems&id=22 diff --git a/extra/project-euler/030/030.factor b/extra/project-euler/030/030.factor index 53d6b199fb..250494c0dc 100644 --- a/extra/project-euler/030/030.factor +++ b/extra/project-euler/030/030.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.functions project-euler.common sequences sequences.lib ; +USING: kernel math math.functions project-euler.common sequences ; IN: project-euler.030 ! http://projecteuler.net/index.php?section=problems&id=30 diff --git a/extra/project-euler/034/034.factor b/extra/project-euler/034/034.factor index cf73ee828b..28c4fa5dc7 100644 --- a/extra/project-euler/034/034.factor +++ b/extra/project-euler/034/034.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math.ranges project-euler.common sequences sequences.lib ; +USING: kernel math.ranges project-euler.common sequences ; IN: project-euler.034 ! http://projecteuler.net/index.php?section=problems&id=34 diff --git a/extra/project-euler/035/035.factor b/extra/project-euler/035/035.factor index cec9bc6957..8e8b654d28 100755 --- a/extra/project-euler/035/035.factor +++ b/extra/project-euler/035/035.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: kernel math math.combinatorics math.parser math.primes - project-euler.common sequences sequences.lib sets ; + project-euler.common sequences sets ; IN: project-euler.035 ! http://projecteuler.net/index.php?section=problems&id=35 diff --git a/extra/project-euler/039/039.factor b/extra/project-euler/039/039.factor index 7a9f51f1d3..d0caa6d0e4 100755 --- a/extra/project-euler/039/039.factor +++ b/extra/project-euler/039/039.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays combinators.lib kernel math math.ranges +USING: arrays kernel math math.ranges namespaces project-euler.common sequences ; IN: project-euler.039 diff --git a/extra/project-euler/042/042.factor b/extra/project-euler/042/042.factor index da26e34927..8ae95d6db7 100644 --- a/extra/project-euler/042/042.factor +++ b/extra/project-euler/042/042.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: ascii io.files kernel math math.functions namespaces make - project-euler.common sequences sequences.lib splitting io.encodings.ascii ; + project-euler.common sequences splitting io.encodings.ascii ; IN: project-euler.042 ! http://projecteuler.net/index.php?section=problems&id=42 diff --git a/extra/project-euler/055/055.factor b/extra/project-euler/055/055.factor index 289f3a002a..bf1dd43b97 100644 --- a/extra/project-euler/055/055.factor +++ b/extra/project-euler/055/055.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.parser project-euler.common sequences sequences.lib ; +USING: kernel math math.parser project-euler.common sequences ; IN: project-euler.055 ! http://projecteuler.net/index.php?section=problems&id=55 @@ -49,8 +49,8 @@ IN: project-euler.055 : (lychrel?) ( n iteration -- ? ) dup 50 < [ - >r add-reverse dup palindrome? - [ r> 2drop f ] [ r> 1+ (lychrel?) ] if + [ add-reverse ] dip over palindrome? + [ 2drop f ] [ 1+ (lychrel?) ] if ] [ 2drop t ] if ; diff --git a/extra/project-euler/059/059.factor b/extra/project-euler/059/059.factor index f209b50a46..e3ab9762d8 100644 --- a/extra/project-euler/059/059.factor +++ b/extra/project-euler/059/059.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer, Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: arrays ascii assocs hashtables io.encodings.ascii io.files kernel math - math.parser namespaces make sequences sequences.lib sequences.private sorting + math.parser namespaces make sequences sequences.private sorting splitting grouping strings sets accessors ; IN: project-euler.059 diff --git a/extra/project-euler/116/116.factor b/extra/project-euler/116/116.factor index 5e2059ad9a..0e3633dc9a 100644 --- a/extra/project-euler/116/116.factor +++ b/extra/project-euler/116/116.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Eric Mertens. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.ranges sequences sequences.lib ; +USING: kernel math math.ranges sequences ; IN: project-euler.116 ! http://projecteuler.net/index.php?section=problems&id=116 diff --git a/extra/project-euler/148/148.factor b/extra/project-euler/148/148.factor index 49fd9a4895..0509936e52 100644 --- a/extra/project-euler/148/148.factor +++ b/extra/project-euler/148/148.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Eric Mertens. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.functions sequences sequences.lib ; +USING: kernel math math.functions sequences ; IN: project-euler.148 ! http://projecteuler.net/index.php?section=problems&id=148 diff --git a/extra/project-euler/151/151.factor b/extra/project-euler/151/151.factor index b64ae3d49f..7913cf9540 100644 --- a/extra/project-euler/151/151.factor +++ b/extra/project-euler/151/151.factor @@ -1,7 +1,6 @@ ! Copyright (c) 2008 Eric Mertens. ! See http://factorcode.org/license.txt for BSD license. -USING: assocs combinators kernel math math.order namespaces sequences - sequences.lib ; +USING: assocs combinators kernel math math.order namespaces sequences ; IN: project-euler.151 ! http://projecteuler.net/index.php?section=problems&id=151 diff --git a/extra/project-euler/186/186.factor b/extra/project-euler/186/186.factor index 5308662daf..7504e09a81 100644 --- a/extra/project-euler/186/186.factor +++ b/extra/project-euler/186/186.factor @@ -1,5 +1,5 @@ USING: circular disjoint-sets kernel math math.ranges - sequences sequences.lib ; +sequences ; IN: project-euler.186 : (generator) ( k -- n ) diff --git a/extra/project-euler/190/190.factor b/extra/project-euler/190/190.factor index 35b9344362..c0b7cb577f 100644 --- a/extra/project-euler/190/190.factor +++ b/extra/project-euler/190/190.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Eric Mertens. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel sequences sequences.lib math math.functions math.ranges locals ; +USING: kernel sequences math math.functions math.ranges locals ; IN: project-euler.190 ! http://projecteuler.net/index.php?section=problems&id=190 From b8f8d1f159d0d6490182f11afb96d73f2f5f1354 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 17:51:08 -0500 Subject: [PATCH 045/244] dont use lib --- extra/money/money.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/money/money.factor b/extra/money/money.factor index 76bc2bae18..5fa76d5f53 100644 --- a/extra/money/money.factor +++ b/extra/money/money.factor @@ -1,6 +1,6 @@ USING: io kernel math math.functions math.parser parser lexer namespaces make sequences splitting grouping combinators -continuations sequences.lib ; +continuations ; IN: money : dollars/cents ( dollars -- dollars cents ) From 3ee55eb341936cc78e0e9d41b28a7925b88931af Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 18:08:21 -0500 Subject: [PATCH 046/244] remove lib usage, update docs --- extra/hexdump/hexdump-docs.factor | 14 ++++++++++++-- extra/hexdump/hexdump.factor | 12 ++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/extra/hexdump/hexdump-docs.factor b/extra/hexdump/hexdump-docs.factor index adf31d3787..a83f64e8db 100644 --- a/extra/hexdump/hexdump-docs.factor +++ b/extra/hexdump/hexdump-docs.factor @@ -1,12 +1,22 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: help.markup help.syntax kernel ; IN: hexdump HELP: hexdump. -{ $values { "seq" "a sequence" } } +{ $values { "sequence" "a sequence" } } { $description "Converts a sequence to its hexadecimal and ASCII representation sixteen characters at a time and writes it to standard out." } ; HELP: hexdump -{ $values { "seq" "a sequence" } { "str" "a string" } } +{ $values { "sequence" "a sequence" } { "string" "a string" } } { $description "Converts a sequence to its hexadecimal and ASCII representation sixteen characters at a time. Lines are separated by a newline character." } { $see-also hexdump. } ; +ARTICLE: "hexdump" "Hexdump" +"The " { $vocab-link "hexdump" } " vocabulary provides a traditional hexdump view of a sequence." $nl +"Write hexdump to string:" +{ $subsection hexdump } +"Write the hexdump to the output stream:" +{ $subsection hexdump. } ; + +ABOUT: "hexdump" diff --git a/extra/hexdump/hexdump.factor b/extra/hexdump/hexdump.factor index f444f5a4f2..618ed00802 100644 --- a/extra/hexdump/hexdump.factor +++ b/extra/hexdump/hexdump.factor @@ -1,5 +1,8 @@ -USING: arrays io io.streams.string kernel math math.parser namespaces -prettyprint sequences sequences.lib splitting grouping strings ascii ; +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: arrays io io.streams.string kernel math math.parser +namespaces prettyprint sequences splitting grouping strings +ascii ; IN: hexdump -: hexdump ( seq -- str ) + +: hexdump ( sequence -- string ) [ dup length header. 16 [ line. ] each-index ] with-string-writer ; -: hexdump. ( seq -- ) +: hexdump. ( sequence -- ) hexdump write ; From 17c8846e9f8e89986b5e4f2ec3354f695128dc63 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 18:11:03 -0500 Subject: [PATCH 047/244] move hexdump to basis --- {extra => basis}/hexdump/authors.txt | 0 {extra => basis}/hexdump/hexdump-docs.factor | 0 {extra => basis}/hexdump/hexdump-tests.factor | 0 {extra => basis}/hexdump/hexdump.factor | 0 {extra => basis}/hexdump/summary.txt | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {extra => basis}/hexdump/authors.txt (100%) rename {extra => basis}/hexdump/hexdump-docs.factor (100%) rename {extra => basis}/hexdump/hexdump-tests.factor (100%) rename {extra => basis}/hexdump/hexdump.factor (100%) rename {extra => basis}/hexdump/summary.txt (100%) diff --git a/extra/hexdump/authors.txt b/basis/hexdump/authors.txt similarity index 100% rename from extra/hexdump/authors.txt rename to basis/hexdump/authors.txt diff --git a/extra/hexdump/hexdump-docs.factor b/basis/hexdump/hexdump-docs.factor similarity index 100% rename from extra/hexdump/hexdump-docs.factor rename to basis/hexdump/hexdump-docs.factor diff --git a/extra/hexdump/hexdump-tests.factor b/basis/hexdump/hexdump-tests.factor similarity index 100% rename from extra/hexdump/hexdump-tests.factor rename to basis/hexdump/hexdump-tests.factor diff --git a/extra/hexdump/hexdump.factor b/basis/hexdump/hexdump.factor similarity index 100% rename from extra/hexdump/hexdump.factor rename to basis/hexdump/hexdump.factor diff --git a/extra/hexdump/summary.txt b/basis/hexdump/summary.txt similarity index 100% rename from extra/hexdump/summary.txt rename to basis/hexdump/summary.txt From f9661a469931dc2834ffedb331fa560e0dfe8ef0 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 18:26:56 -0500 Subject: [PATCH 048/244] fix io.paths --- extra/io/paths/paths.factor | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/extra/io/paths/paths.factor b/extra/io/paths/paths.factor index fb4f6d3a6d..58b3518edd 100755 --- a/extra/io/paths/paths.factor +++ b/extra/io/paths/paths.factor @@ -1,14 +1,16 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: io.files kernel sequences accessors -dlists deques arrays sequences.lib ; +dlists deques arrays ; IN: io.paths TUPLE: directory-iterator path bfs queue ; : qualified-directory ( path -- seq ) - dup directory [ first2 >r append-path r> 2array ] with map ; + dup directory [ first2 [ append-path ] dip 2array ] with map ; : push-directory ( path iter -- ) - >r qualified-directory r> [ + [ qualified-directory ] dip [ dup queue>> swap bfs>> [ push-front ] [ push-back ] if ] curry each ; @@ -24,27 +26,24 @@ TUPLE: directory-iterator path bfs queue ; ] if ; : iterate-directory ( iter quot -- obj ) - 2dup >r >r >r next-file dup [ - r> call dup [ - r> r> 2drop - ] [ - drop r> r> iterate-directory - ] if + over next-file [ + over call + [ 2drop ] [ iterate-directory ] if ] [ - drop r> r> r> 3drop f - ] if ; inline + 2drop f + ] if* ; inline recursive : find-file ( path bfs? quot -- path/f ) - >r r> + [ ] dip [ keep and ] curry iterate-directory ; inline : each-file ( path bfs? quot -- ) - >r r> + [ ] dip [ f ] compose iterate-directory drop ; inline : find-all-files ( path bfs? quot -- paths ) - >r r> - pusher >r [ f ] compose iterate-directory drop r> ; inline + [ ] dip + pusher [ [ f ] compose iterate-directory drop ] dip ; inline : recursive-directory ( path bfs? -- paths ) - [ ] accumulator >r each-file r> ; + [ ] accumulator [ each-file ] dip ; From 426ec8a08b7166dcaedde8b3f0fc7bf58d8fe6d6 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 18:34:42 -0500 Subject: [PATCH 049/244] remove dead file --- extra/crypto/random.factor | 40 -------------------------------------- 1 file changed, 40 deletions(-) delete mode 100755 extra/crypto/random.factor diff --git a/extra/crypto/random.factor b/extra/crypto/random.factor deleted file mode 100755 index f2d3b0555a..0000000000 --- a/extra/crypto/random.factor +++ /dev/null @@ -1,40 +0,0 @@ -USING: kernel math math-contrib sequences namespaces errors -hashtables words arrays parser compiler syntax io ; -IN: crypto -: make-bits ( quot numbits -- n | quot: -- 0/1 ) - 0 -rot [ drop dup call rot 1 shift bitor swap ] each drop ; - -: random-bytes ( m -- n ) - >r [ 2 random ] r> 8 * make-bits ; - -! DEFER: random-bits -: add-bit ( bit integer -- integer ) 1 shift bitor ; -: append-bits ( inta intb nbits -- int ) swapd shift bitor ; -: large-random-bits ( n -- int ) - #! random number with high bit and low bit enabled (odd) - 2 swap ^ [ random ] keep -1 shift 1 bitor bitor ; -! : next-double ( -- f ) 53 random-bits 9007199254740992 /f ; - -: 0count ( integer -- n ) 0 swap [ 0 = [ 1+ ] when ] each-bit ; -: 1count ( integer -- n ) 0 swap [ 1 = [ 1+ ] when ] each-bit ; - -: bit-reverse-table -{ - HEX: 00 HEX: 80 HEX: 40 HEX: C0 HEX: 20 HEX: A0 HEX: 60 HEX: E0 HEX: 10 HEX: 90 HEX: 50 HEX: D0 HEX: 30 HEX: B0 HEX: 70 HEX: F0 - HEX: 08 HEX: 88 HEX: 48 HEX: C8 HEX: 28 HEX: A8 HEX: 68 HEX: E8 HEX: 18 HEX: 98 HEX: 58 HEX: D8 HEX: 38 HEX: B8 HEX: 78 HEX: F8 - HEX: 04 HEX: 84 HEX: 44 HEX: C4 HEX: 24 HEX: A4 HEX: 64 HEX: E4 HEX: 14 HEX: 94 HEX: 54 HEX: D4 HEX: 34 HEX: B4 HEX: 74 HEX: F4 - HEX: 0C HEX: 8C HEX: 4C HEX: CC HEX: 2C HEX: AC HEX: 6C HEX: EC HEX: 1C HEX: 9C HEX: 5C HEX: DC HEX: 3C HEX: BC HEX: 7C HEX: FC - HEX: 02 HEX: 82 HEX: 42 HEX: C2 HEX: 22 HEX: A2 HEX: 62 HEX: E2 HEX: 12 HEX: 92 HEX: 52 HEX: D2 HEX: 32 HEX: B2 HEX: 72 HEX: F2 - HEX: 0A HEX: 8A HEX: 4A HEX: CA HEX: 2A HEX: AA HEX: 6A HEX: EA HEX: 1A HEX: 9A HEX: 5A HEX: DA HEX: 3A HEX: BA HEX: 7A HEX: FA - HEX: 06 HEX: 86 HEX: 46 HEX: C6 HEX: 26 HEX: A6 HEX: 66 HEX: E6 HEX: 16 HEX: 96 HEX: 56 HEX: D6 HEX: 36 HEX: B6 HEX: 76 HEX: F6 - HEX: 0E HEX: 8E HEX: 4E HEX: CE HEX: 2E HEX: AE HEX: 6E HEX: EE HEX: 1E HEX: 9E HEX: 5E HEX: DE HEX: 3E HEX: BE HEX: 7E HEX: FE - HEX: 01 HEX: 81 HEX: 41 HEX: C1 HEX: 21 HEX: A1 HEX: 61 HEX: E1 HEX: 11 HEX: 91 HEX: 51 HEX: D1 HEX: 31 HEX: B1 HEX: 71 HEX: F1 - HEX: 09 HEX: 89 HEX: 49 HEX: C9 HEX: 29 HEX: A9 HEX: 69 HEX: E9 HEX: 19 HEX: 99 HEX: 59 HEX: D9 HEX: 39 HEX: B9 HEX: 79 HEX: F9 - HEX: 05 HEX: 85 HEX: 45 HEX: C5 HEX: 25 HEX: A5 HEX: 65 HEX: E5 HEX: 15 HEX: 95 HEX: 55 HEX: D5 HEX: 35 HEX: B5 HEX: 75 HEX: F5 - HEX: 0D HEX: 8D HEX: 4D HEX: CD HEX: 2D HEX: AD HEX: 6D HEX: ED HEX: 1D HEX: 9D HEX: 5D HEX: DD HEX: 3D HEX: BD HEX: 7D HEX: FD - HEX: 03 HEX: 83 HEX: 43 HEX: C3 HEX: 23 HEX: A3 HEX: 63 HEX: E3 HEX: 13 HEX: 93 HEX: 53 HEX: D3 HEX: 33 HEX: B3 HEX: 73 HEX: F3 - HEX: 0B HEX: 8B HEX: 4B HEX: CB HEX: 2B HEX: AB HEX: 6B HEX: EB HEX: 1B HEX: 9B HEX: 5B HEX: DB HEX: 3B HEX: BB HEX: 7B HEX: FB - HEX: 07 HEX: 87 HEX: 47 HEX: C7 HEX: 27 HEX: A7 HEX: 67 HEX: E7 HEX: 17 HEX: 97 HEX: 57 HEX: D7 HEX: 37 HEX: B7 HEX: 77 HEX: F7 - HEX: 0F HEX: 8F HEX: 4F HEX: CF HEX: 2F HEX: AF HEX: 6F HEX: EF HEX: 1F HEX: 9F HEX: 5F HEX: DF HEX: 3F HEX: BF HEX: 7F HEX: FF -} ; inline - From b35db385d345ff0448b38a3d2c61fdb78528bed0 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 18:45:51 -0500 Subject: [PATCH 050/244] fix up extra/crypto --- extra/crypto/barrett/barrett-tests.factor | 3 +++ extra/crypto/barrett/barrett.factor | 10 ++++------ extra/crypto/common/authors.txt | 1 - extra/crypto/common/common.factor | 17 ----------------- extra/crypto/hmac/hmac.factor | 2 +- extra/crypto/rsa/rsa-tests.factor | 1 + extra/crypto/rsa/rsa.factor | 2 ++ extra/crypto/summary.txt | 2 +- extra/crypto/xor/xor-tests.factor | 19 ++++++++++--------- extra/crypto/xor/xor.factor | 14 +++++++++----- 10 files changed, 31 insertions(+), 40 deletions(-) delete mode 100755 extra/crypto/common/authors.txt delete mode 100644 extra/crypto/common/common.factor diff --git a/extra/crypto/barrett/barrett-tests.factor b/extra/crypto/barrett/barrett-tests.factor index be52240372..01163f730f 100644 --- a/extra/crypto/barrett/barrett-tests.factor +++ b/extra/crypto/barrett/barrett-tests.factor @@ -1,4 +1,7 @@ +! Copyright (C) 2008 DoDoug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: crypto.barrett kernel math namespaces tools.test ; +IN: crypto.barrett.tests [ HEX: 1f63edfb7e838622c7412eafaf0439cf0cdf3aae8bdd09e2de69b509a53883a83560d5ce50ea039e4 ] [ HEX: 827c67f31b2b46afa49ed95d7f7a3011e5875f7052d4c55437ce726d3c6ce0dc9c445fda63b6dc4e 16 barrett-mu ] unit-test diff --git a/extra/crypto/barrett/barrett.factor b/extra/crypto/barrett/barrett.factor index 4a070190e3..25e67d01ce 100644 --- a/extra/crypto/barrett/barrett.factor +++ b/extra/crypto/barrett/barrett.factor @@ -1,14 +1,12 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: kernel math math.functions ; IN: crypto.barrett : barrett-mu ( n size -- mu ) #! Calculates Barrett's reduction parameter mu #! size = word size in bits (8, 16, 32, 64, ...) - ! over log2 1+ over / 2 * >r 2 swap ^ r> ^ swap / floor ; - [ - [ log2 1+ ] [ / 2 * ] bi* - ] [ - 2^ rot ^ swap /i - ] 2bi ; + [ [ log2 1+ ] [ / 2 * ] bi* ] + [ 2^ rot ^ swap /i ] 2bi ; diff --git a/extra/crypto/common/authors.txt b/extra/crypto/common/authors.txt deleted file mode 100755 index 7c1b2f2279..0000000000 --- a/extra/crypto/common/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Doug Coleman diff --git a/extra/crypto/common/common.factor b/extra/crypto/common/common.factor deleted file mode 100644 index 61cc11f959..0000000000 --- a/extra/crypto/common/common.factor +++ /dev/null @@ -1,17 +0,0 @@ -USING: arrays kernel io io.binary sbufs splitting grouping -strings sequences namespaces math math.parser parser -hints math.bitwise assocs ; -IN: crypto.common - -: (nth-int) ( string n -- int ) - 2 shift dup 4 + rot ; inline - -: nth-int ( string n -- int ) (nth-int) le> ; inline - -: update ( num var -- ) [ w+ ] change ; inline - -SYMBOL: big-endian? - -: mod-nth ( n seq -- elt ) - #! 5 "abcd" -> b - [ length mod ] [ nth ] bi ; diff --git a/extra/crypto/hmac/hmac.factor b/extra/crypto/hmac/hmac.factor index 6e30f19775..d98e8a9798 100755 --- a/extra/crypto/hmac/hmac.factor +++ b/extra/crypto/hmac/hmac.factor @@ -1,4 +1,4 @@ -USING: arrays combinators crypto.common checksums checksums.md5 +USING: arrays combinators checksums checksums.md5 checksums.sha1 checksums.md5.private io io.binary io.files io.streams.byte-array kernel math math.vectors memoize sequences io.encodings.binary ; diff --git a/extra/crypto/rsa/rsa-tests.factor b/extra/crypto/rsa/rsa-tests.factor index 7de6bed76f..03aca0578b 100644 --- a/extra/crypto/rsa/rsa-tests.factor +++ b/extra/crypto/rsa/rsa-tests.factor @@ -1,4 +1,5 @@ USING: kernel math namespaces crypto.rsa tools.test ; +IN: crypto.rsa.tests [ 123456789 ] [ 128 generate-rsa-keypair 123456789 over rsa-encrypt swap rsa-decrypt ] unit-test [ 123456789 ] [ 129 generate-rsa-keypair 123456789 over rsa-encrypt swap rsa-decrypt ] unit-test diff --git a/extra/crypto/rsa/rsa.factor b/extra/crypto/rsa/rsa.factor index 5d3228db10..b1eb907547 100644 --- a/extra/crypto/rsa/rsa.factor +++ b/extra/crypto/rsa/rsa.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: math.miller-rabin kernel math math.functions namespaces sequences accessors ; IN: crypto.rsa diff --git a/extra/crypto/summary.txt b/extra/crypto/summary.txt index edd7c44333..0421c07ca0 100644 --- a/extra/crypto/summary.txt +++ b/extra/crypto/summary.txt @@ -1 +1 @@ -Cryptographic algorithms implemented in Factor, such as MD5 and SHA1 +HMAC, XOR, Barrett, RSA, Timing diff --git a/extra/crypto/xor/xor-tests.factor b/extra/crypto/xor/xor-tests.factor index ef781b9f25..f3a13e086f 100644 --- a/extra/crypto/xor/xor-tests.factor +++ b/extra/crypto/xor/xor-tests.factor @@ -2,23 +2,24 @@ USING: continuations crypto.xor kernel strings tools.test ; IN: crypto.xor.tests ! No key -[ "" dup xor-crypt ] [ T{ no-xor-key f } = ] must-fail-with -[ { } dup xor-crypt ] [ T{ no-xor-key f } = ] must-fail-with -[ V{ } dup xor-crypt ] [ T{ no-xor-key f } = ] must-fail-with -[ "" "asdf" dupd xor-crypt xor-crypt ] [ T{ no-xor-key f } = ] must-fail-with +[ "" dup xor-crypt ] [ T{ empty-xor-key } = ] must-fail-with +[ { } dup xor-crypt ] [ T{ empty-xor-key } = ] must-fail-with +[ V{ } dup xor-crypt ] [ T{ empty-xor-key } = ] must-fail-with +[ "" "asdf" dupd xor-crypt xor-crypt ] [ T{ empty-xor-key } = ] must-fail-with ! a xor a = 0 [ "\0\0\0\0\0\0\0" ] [ "abcdefg" dup xor-crypt ] unit-test [ { 15 15 15 15 } ] [ { 10 10 10 10 } { 5 5 5 5 } xor-crypt ] unit-test -[ "asdf" ] [ "key" "asdf" dupd xor-crypt xor-crypt >string ] unit-test -[ "" ] [ "key" "" xor-crypt >string ] unit-test +[ "asdf" ] [ "asdf" "key" [ xor-crypt ] [ xor-crypt ] bi >string ] unit-test +[ "" ] [ "" "key" xor-crypt >string ] unit-test [ "a longer message...!" ] [ - "." - "a longer message...!" dupd xor-crypt xor-crypt >string + "a longer message...!" + "." [ xor-crypt ] [ xor-crypt ] bi >string ] unit-test [ "a longer message...!" ] [ + "a longer message...!" "a very long key, longer than the message even." - "a longer message...!" dupd xor-crypt xor-crypt >string + [ xor-crypt ] [ xor-crypt ] bi >string ] unit-test diff --git a/extra/crypto/xor/xor.factor b/extra/crypto/xor/xor.factor index 247387ebdf..6e3a605f5c 100644 --- a/extra/crypto/xor/xor.factor +++ b/extra/crypto/xor/xor.factor @@ -1,8 +1,12 @@ -USING: crypto.common kernel math sequences ; +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel math sequences fry ; IN: crypto.xor -ERROR: no-xor-key ; +: mod-nth ( n seq -- elt ) [ length mod ] [ nth ] bi ; -: xor-crypt ( key seq -- seq' ) - over empty? [ no-xor-key ] when - dup length rot [ mod-nth bitxor ] curry 2map ; +ERROR: empty-xor-key ; + +: xor-crypt ( seq key -- seq' ) + dup empty? [ empty-xor-key ] when + [ dup length ] dip '[ _ mod-nth bitxor ] 2map ; From 4c8ff1e2897a6409525b5c21994454110aab856c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 19:03:57 -0500 Subject: [PATCH 051/244] fix taxes --- extra/taxes/usa/federal/federal.factor | 12 ++++++++++++ extra/taxes/usa/fica/fica.factor | 2 +- extra/taxes/usa/usa-tests.factor | 4 ++-- extra/taxes/usa/usa.factor | 13 ++----------- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/extra/taxes/usa/federal/federal.factor b/extra/taxes/usa/federal/federal.factor index 5274535f81..b71b831ca6 100644 --- a/extra/taxes/usa/federal/federal.factor +++ b/extra/taxes/usa/federal/federal.factor @@ -45,3 +45,15 @@ M: federal withholding* ( salary w4 tax-table entity -- x ) [ federal-tax ] 3keep drop [ fica-tax ] 2keep medicare-tax + + ; + +: total-withholding ( salary w4 tax-table -- x ) + dup entity>> dup federal = [ + withholding* + ] [ + drop + [ drop federal withholding* ] + [ dup entity>> withholding* ] 3bi + + ] if ; + +: net ( salary w4 collector -- x ) + >r dupd r> total-withholding - ; diff --git a/extra/taxes/usa/fica/fica.factor b/extra/taxes/usa/fica/fica.factor index e71b2723a3..c1e85b75b4 100644 --- a/extra/taxes/usa/fica/fica.factor +++ b/extra/taxes/usa/fica/fica.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors math math.order money ; +USING: accessors assocs.lib math math.order money ; IN: taxes.usa.fica : fica-tax-rate ( -- x ) DECIMAL: .062 ; inline diff --git a/extra/taxes/usa/usa-tests.factor b/extra/taxes/usa/usa-tests.factor index 6aac4b928c..a529762c81 100644 --- a/extra/taxes/usa/usa-tests.factor +++ b/extra/taxes/usa/usa-tests.factor @@ -110,9 +110,9 @@ IN: taxes.usa.tests [ 138 69 ] [ - 24000 2008 2 f withholding biweekly dollars/cents + 24000 2008 2 f total-withholding biweekly dollars/cents ] unit-test [ 754 72 ] [ - 78250 2008 2 f withholding biweekly dollars/cents + 78250 2008 2 f total-withholding biweekly dollars/cents ] unit-test diff --git a/extra/taxes/usa/usa.factor b/extra/taxes/usa/usa.factor index 1d21524b45..27ff4aef98 100644 --- a/extra/taxes/usa/usa.factor +++ b/extra/taxes/usa/usa.factor @@ -1,8 +1,7 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays assocs kernel math math.intervals -namespaces sequences money math.order taxes.usa.w4 -taxes.usa.federal ; +namespaces sequences money math.order taxes.usa.w4 ; IN: taxes.usa ! Withhold: FICA, Medicare, Federal (FICA is social security) @@ -17,12 +16,7 @@ GENERIC: withholding* ( salary w4 tax-table entity -- x ) dup entity>> adjust-allowances* ; : withholding ( salary w4 tax-table -- x ) - dup entity>> federal = [ - dup entity>> withholding* - ] [ - [ dup entity>> withholding* ] - [ drop federal withholding* ] 3bi + - ] if ; + dup entity>> withholding* ; : tax-bracket-range ( pair -- n ) first2 swap - ; @@ -36,6 +30,3 @@ GENERIC: withholding* ( salary w4 tax-table entity -- x ) : marriage-table ( w4 tax-table -- triples ) swap married?>> [ married>> ] [ single>> ] if ; - -: net ( salary w4 collector -- x ) - >r dupd r> withholding - ; From ec31e23ca7e8b86a42a8527fc8a3f5bb23564603 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 2 Oct 2008 19:35:03 -0500 Subject: [PATCH 052/244] trivial lint changes --- unmaintained/lint/lint.factor | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/unmaintained/lint/lint.factor b/unmaintained/lint/lint.factor index 644346d29e..ab1a67a83e 100644 --- a/unmaintained/lint/lint.factor +++ b/unmaintained/lint/lint.factor @@ -3,14 +3,15 @@ USING: accessors alien alien.accessors arrays assocs combinators.lib io kernel macros math namespaces prettyprint quotations sequences vectors vocabs words html.elements sets -slots.private combinators.short-circuit ; +slots.private combinators.short-circuit math.order hashtables +sequences.deep ; IN: lint SYMBOL: def-hash SYMBOL: def-hash-keys : set-hash-vector ( val key hash -- ) - 2dup at -rot >r >r ?push r> r> set-at ; + 2dup at -rot [ ?push ] 2dip set-at ; : add-word-def ( word quot -- ) dup callable? [ @@ -67,7 +68,7 @@ def-hash get-global [ ! Remove constants [ 1 ] [ - drop dup length 1 = swap first number? and not + drop { [ length 1 = ] [ first number? ] } 1&& not ] assoc-filter ! Remove set-alien-cell, etc. @@ -80,6 +81,13 @@ def-hash get-global [ drop trivial-defs member? not ] assoc-filter +[ + drop { + [ [ wrapper? ] deep-contains? ] + [ [ hashtable? ] deep-contains? ] + } 1|| not +] assoc-filter + ! Remove n m shift defs [ drop dup length 3 = [ From 743ec65b4fe1729fd39ab409ef7a4d105d3b3c79 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 3 Oct 2008 01:12:09 -0500 Subject: [PATCH 053/244] Move hexdump back to extra --- {basis => extra}/hexdump/authors.txt | 0 {basis => extra}/hexdump/hexdump-docs.factor | 0 {basis => extra}/hexdump/hexdump-tests.factor | 0 {basis => extra}/hexdump/hexdump.factor | 0 {basis => extra}/hexdump/summary.txt | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {basis => extra}/hexdump/authors.txt (100%) rename {basis => extra}/hexdump/hexdump-docs.factor (100%) rename {basis => extra}/hexdump/hexdump-tests.factor (100%) rename {basis => extra}/hexdump/hexdump.factor (100%) rename {basis => extra}/hexdump/summary.txt (100%) diff --git a/basis/hexdump/authors.txt b/extra/hexdump/authors.txt similarity index 100% rename from basis/hexdump/authors.txt rename to extra/hexdump/authors.txt diff --git a/basis/hexdump/hexdump-docs.factor b/extra/hexdump/hexdump-docs.factor similarity index 100% rename from basis/hexdump/hexdump-docs.factor rename to extra/hexdump/hexdump-docs.factor diff --git a/basis/hexdump/hexdump-tests.factor b/extra/hexdump/hexdump-tests.factor similarity index 100% rename from basis/hexdump/hexdump-tests.factor rename to extra/hexdump/hexdump-tests.factor diff --git a/basis/hexdump/hexdump.factor b/extra/hexdump/hexdump.factor similarity index 100% rename from basis/hexdump/hexdump.factor rename to extra/hexdump/hexdump.factor diff --git a/basis/hexdump/summary.txt b/extra/hexdump/summary.txt similarity index 100% rename from basis/hexdump/summary.txt rename to extra/hexdump/summary.txt From 196c91709f4cb5e0582f5f88b21c473bece9ce1e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 3 Oct 2008 01:12:50 -0500 Subject: [PATCH 054/244] stop-server word --- basis/io/servers/connection/connection.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/io/servers/connection/connection.factor b/basis/io/servers/connection/connection.factor index 0516f24402..674ed8803c 100644 --- a/basis/io/servers/connection/connection.factor +++ b/basis/io/servers/connection/connection.factor @@ -105,7 +105,7 @@ M: threaded-server handle-client* handler>> call ; threaded-server get encoding>> [ started-accept-loop ] [ [ accept-loop ] with-disposal ] bi ; -\ start-accept-loop ERROR add-error-logging +\ start-accept-loop NOTICE add-error-logging : init-server ( threaded-server -- threaded-server ) dup semaphore>> [ From ce8b1e3fff3e911ba1fc199c578c23e83b2a72dc Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 3 Oct 2008 01:13:01 -0500 Subject: [PATCH 055/244] Fix permissions --- Makefile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) mode change 100755 => 100644 Makefile diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 index 769aeacb8c..aa520063e3 --- a/Makefile +++ b/Makefile @@ -149,14 +149,11 @@ macosx.app: factor ln -s Factor.app/Contents/MacOS/factor ./factor cp $(ENGINE) $(BUNDLE)/Contents/Frameworks - install_name_tool \ - -id @executable_path/../Frameworks/libfreetype.6.dylib \ - Factor.app/Contents/Frameworks/libfreetype.6.dylib install_name_tool \ -change libfactor.dylib \ @executable_path/../Frameworks/libfactor.dylib \ Factor.app/Contents/MacOS/factor - + factor: $(DLL_OBJS) $(EXE_OBJS) $(LINKER) $(ENGINE) $(DLL_OBJS) $(CC) $(LIBS) $(LIBPATH) -L. $(LINK_WITH_ENGINE) \ From 56a0af9628c7817202729b881387b6da92ac2d77 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 3 Oct 2008 02:19:03 -0500 Subject: [PATCH 056/244] initial math cleanup --- extra/math/algebra/algebra.factor | 6 ++- extra/math/analysis/analysis.factor | 12 +++-- extra/math/combinatorics/combinatorics.factor | 11 ++-- extra/math/compare/compare.factor | 1 - extra/math/derivatives/derivatives.factor | 13 +++-- extra/math/erato/erato.factor | 4 +- extra/math/fft/fft.factor | 2 +- extra/math/miller-rabin/miller-rabin.factor | 2 + .../math/newtons-method/newtons-method.factor | 14 +++-- .../numerical-integration.factor | 14 ++--- extra/math/polynomials/polynomials.factor | 4 +- extra/math/primes/primes.factor | 51 ++++++++++--------- extra/math/quaternions/quaternions.factor | 2 +- extra/math/secant-method/secant-method.factor | 24 ++++++--- extra/math/statistics/statistics.factor | 6 ++- extra/math/text/english/english.factor | 11 ++-- extra/math/trig/trig.factor | 4 +- 17 files changed, 101 insertions(+), 80 deletions(-) diff --git a/extra/math/algebra/algebra.factor b/extra/math/algebra/algebra.factor index 8bb8420d1a..8cccded26a 100644 --- a/extra/math/algebra/algebra.factor +++ b/extra/math/algebra/algebra.factor @@ -1,8 +1,10 @@ ! Copyright (c) 2007 Samuel Tardieu ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.functions sequences ; +USING: kernel math math.functions sequences fry ; IN: math.algebra : chinese-remainder ( aseq nseq -- x ) dup product - [ [ over / [ swap gcd drop ] keep * * ] curry 2map sum ] keep rem ; foldable + [ + '[ _ over / [ swap gcd drop ] keep * * ] 2map sum + ] keep rem ; foldable diff --git a/extra/math/analysis/analysis.factor b/extra/math/analysis/analysis.factor index a41281d779..7da1c96b61 100755 --- a/extra/math/analysis/analysis.factor +++ b/extra/math/analysis/analysis.factor @@ -1,5 +1,7 @@ +! Copyright (C) 2008 Doug Coleman, Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. USING: kernel math math.constants math.functions math.intervals -math.vectors namespaces sequences ; +math.vectors namespaces sequences combinators.short-circuit ; IN: math.analysis r log * r> - - swap 6 gamma-z gamma-p6 v. log + ; + [ 0.5 + dup gamma-g6 + dup [ log * ] dip - ] + [ 6 gamma-z gamma-p6 v. log ] bi + ; : gamma-lanczos6 ( x -- gamma[x] ) #! gamma(x) = gamma(x+1) / x @@ -39,7 +41,7 @@ PRIVATE> : gamma ( x -- y ) #! gamma(x) = integral 0..inf [ t^(x-1) exp(-t) ] dt #! gamma(n+1) = n! for n > 0 - dup 0.0 <= over 1.0 mod zero? and [ + dup { [ 0.0 <= ] [ 1.0 mod zero? ] } 1&& [ drop 1./0. ] [ dup abs gamma-lanczos6 swap dup 0 > [ drop ] [ gamma-neg ] if @@ -55,7 +57,7 @@ PRIVATE> ] if ; : nth-root ( n x -- y ) - over 0 = [ "0th root is undefined" throw ] when >r recip r> swap ^ ; + [ recip ] dip swap ^ ; ! Forth Scientific Library Algorithm #1 ! diff --git a/extra/math/combinatorics/combinatorics.factor b/extra/math/combinatorics/combinatorics.factor index a0c6df083b..b1c49b8ab5 100644 --- a/extra/math/combinatorics/combinatorics.factor +++ b/extra/math/combinatorics/combinatorics.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2007, 2008 Slava Pestov, Doug Coleman, Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: assocs kernel math math.order math.ranges mirrors -namespaces make sequences sequences.lib sorting ; +namespaces sequences sorting fry ; IN: math.combinatorics [ dupd - ] when ; inline ! See this article for explanation of the factoradic-based permutation methodology: -! http://msdn2.microsoft.com/en-us/library/aa302371.aspx +! http://msdn2.microsoft.com/en-us/library/aa302371.aspx : factoradic ( n -- factoradic ) 0 [ over 0 > ] [ 1+ [ /mod ] keep swap ] [ ] produce reverse 2nip ; @@ -39,13 +39,10 @@ PRIVATE> twiddle [ nPk ] keep factorial / ; : permutation ( n seq -- seq ) - tuck permutation-indices swap nths ; + [ permutation-indices ] keep nths ; : all-permutations ( seq -- seq ) - [ - [ length factorial ] keep [ permutation , ] curry each - ] { } make ; + [ length factorial ] keep '[ _ permutation ] map ; : inverse-permutation ( seq -- permutation ) >alist sort-values keys ; - diff --git a/extra/math/compare/compare.factor b/extra/math/compare/compare.factor index 28a8eadc81..d19dac3d2b 100644 --- a/extra/math/compare/compare.factor +++ b/extra/math/compare/compare.factor @@ -19,4 +19,3 @@ IN: math.compare : clamp ( a value b -- x ) min max ; - diff --git a/extra/math/derivatives/derivatives.factor b/extra/math/derivatives/derivatives.factor index ad8d944bfe..b7612e112b 100644 --- a/extra/math/derivatives/derivatives.factor +++ b/extra/math/derivatives/derivatives.factor @@ -1,4 +1,3 @@ - USING: kernel continuations combinators sequences math math.order math.ranges accessors float-arrays ; @@ -7,11 +6,11 @@ IN: math.derivatives TUPLE: state x func h err i j errt fac hh ans a done ; : largest-float ( -- x ) HEX: 7fefffffffffffff bits>double ; foldable -: ntab ( -- val ) 8 ; -: con ( -- val ) 1.6 ; -: con2 ( -- val ) con con * ; -: big ( -- val ) largest-float ; -: safe ( -- val ) 2.0 ; +: ntab ( -- val ) 8 ; inline +: con ( -- val ) 1.6 ; inline +: con2 ( -- val ) con con * ; inline +: big ( -- val ) largest-float ; inline +: safe ( -- val ) 2.0 ; inline ! Yes, this was ported from C code. : a[i][i] ( state -- elt ) [ i>> ] [ i>> ] [ a>> ] tri nth nth ; @@ -120,4 +119,4 @@ TUPLE: state x func h err i j errt fac hh ans a done ; bi ; : derivative ( x func -- m ) 0.01 2.0 (derivative) drop ; -: derivative-func ( func -- der ) [ derivative ] curry ; \ No newline at end of file +: derivative-func ( func -- der ) [ derivative ] curry ; diff --git a/extra/math/erato/erato.factor b/extra/math/erato/erato.factor index f836d71a99..4c6675e8f1 100644 --- a/extra/math/erato/erato.factor +++ b/extra/math/erato/erato.factor @@ -11,8 +11,8 @@ TUPLE: erato limit bits latest ; : ind ( n -- i ) 2/ 1- ; inline -: is-prime ( n erato -- bool ) - >r ind r> bits>> nth ; inline +: is-prime ( n limit -- bool ) + [ ind ] [ bits>> ] bi* nth ; inline : indices ( n erato -- range ) limit>> ind over 3 * ind swap rot ; diff --git a/extra/math/fft/fft.factor b/extra/math/fft/fft.factor index 682d2a49db..b82ecb6b2c 100644 --- a/extra/math/fft/fft.factor +++ b/extra/math/fft/fft.factor @@ -9,7 +9,7 @@ IN: math.fft : odd ( seq -- seq ) 2 group 1 ; DEFER: fft : two ( seq -- seq ) fft 2 v/n dup append ; -: omega ( n -- n ) recip -2 pi i* * * exp ; +: omega ( n -- n' ) recip -2 pi i* * * exp ; : twiddle ( seq -- seq ) dup length dup omega swap n^v v* ; : (fft) ( seq -- seq ) dup odd two twiddle swap even two v+ ; : fft ( seq -- seq ) dup length 1 = [ (fft) ] unless ; diff --git a/extra/math/miller-rabin/miller-rabin.factor b/extra/math/miller-rabin/miller-rabin.factor index f1953340db..45665c701d 100755 --- a/extra/math/miller-rabin/miller-rabin.factor +++ b/extra/math/miller-rabin/miller-rabin.factor @@ -1,3 +1,5 @@ +! 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 ; diff --git a/extra/math/newtons-method/newtons-method.factor b/extra/math/newtons-method/newtons-method.factor index 5bf71deac8..269eae2538 100644 --- a/extra/math/newtons-method/newtons-method.factor +++ b/extra/math/newtons-method/newtons-method.factor @@ -1,11 +1,17 @@ ! Copyright © 2008 Reginald Keith Ford II +! See http://factorcode.org/license.txt for BSD license. ! Newton's Method of approximating roots - USING: kernel math math.derivatives ; IN: math.newtons-method -: newtons-method ( guess function -- x ) newton-precision [ [ newton-step ] keep ] times drop ; + +: newtons-method ( guess function -- x ) + newton-precision [ [ newton-step ] keep ] times drop ; diff --git a/extra/math/numerical-integration/numerical-integration.factor b/extra/math/numerical-integration/numerical-integration.factor index 798d3a5e71..dfaa618b53 100644 --- a/extra/math/numerical-integration/numerical-integration.factor +++ b/extra/math/numerical-integration/numerical-integration.factor @@ -1,18 +1,20 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel sequences namespaces make math math.ranges math.vectors vectors ; IN: math.numerical-integration SYMBOL: num-steps 180 num-steps set-global + : setup-simpson-range ( from to -- frange ) 2dup swap - num-steps get / ; : generate-simpson-weights ( seq -- seq ) - [ - { 1 4 } % length 2 / 2 - { 2 4 } concat % 1 , - ] { } make ; + { 1 4 } + swap length 2 / 2 - { 2 4 } concat + { 1 } 3append ; : integrate-simpson ( from to f -- x ) - >r setup-simpson-range r> - dupd map dup generate-simpson-weights + [ setup-simpson-range dup ] dip + map dup generate-simpson-weights v. swap [ third ] keep first - 6 / * ; - diff --git a/extra/math/polynomials/polynomials.factor b/extra/math/polynomials/polynomials.factor index 8662bbb089..51512ca2e3 100644 --- a/extra/math/polynomials/polynomials.factor +++ b/extra/math/polynomials/polynomials.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel sequences vectors math math.vectors namespaces make shuffle splitting sequences.lib math.order ; IN: math.polynomials @@ -82,5 +84,5 @@ PRIVATE> : polyval ( p x -- p[x] ) #! Evaluate a polynomial. - >r dup length r> powers v. ; + [ dup length ] dip powers v. ; diff --git a/extra/math/primes/primes.factor b/extra/math/primes/primes.factor index f3a515e72b..feb60c555d 100644 --- a/extra/math/primes/primes.factor +++ b/extra/math/primes/primes.factor @@ -8,44 +8,45 @@ IN: math.primes : next-prime ( n -- p ) - dup 999983 < [ - primes-under-million [ natural-search drop 1+ ] keep nth - ] [ - next-odd find-prime-miller-rabin - ] if ; foldable + dup 999983 < [ + primes-under-million [ natural-search drop 1+ ] keep nth + ] [ + next-odd find-prime-miller-rabin + ] if ; foldable : prime? ( n -- ? ) - dup 1000000 < [ - dup primes-under-million natural-search nip = - ] [ - miller-rabin - ] if ; foldable + dup 1000000 < [ + dup primes-under-million natural-search nip = + ] [ + miller-rabin + ] if ; foldable : lprimes ( -- list ) - 0 primes-under-million seq>list - 1000003 [ 2 + find-prime-miller-rabin ] lfrom-by - lappend ; + 0 primes-under-million seq>list + 1000003 [ 2 + find-prime-miller-rabin ] lfrom-by + lappend ; : lprimes-from ( n -- list ) - dup 3 < [ drop lprimes ] [ 1- next-prime [ next-prime ] lfrom-by ] if ; + dup 3 < [ drop lprimes ] [ 1- next-prime [ next-prime ] lfrom-by ] if ; : primes-upto ( n -- seq ) - { - { [ dup 2 < ] [ drop { } ] } - { [ dup 1000003 < ] - [ primes-under-million [ natural-search drop 1+ 0 swap ] keep ] } - [ primes-under-million 1000003 lprimes-from - rot [ <= ] curry lwhile list>array append ] - } cond ; foldable + { + { [ dup 2 < ] [ drop { } ] } + { [ dup 1000003 < ] [ + primes-under-million [ natural-search drop 1+ 0 swap ] keep + ] } + [ primes-under-million 1000003 lprimes-from + rot [ <= ] curry lwhile list>array append ] + } cond ; foldable : primes-between ( low high -- seq ) - primes-upto - [ 1- next-prime ] dip - [ natural-search drop ] keep [ length ] keep ; foldable + primes-upto + [ 1- next-prime ] dip + [ natural-search drop ] keep [ length ] keep ; foldable : coprime? ( a b -- ? ) gcd nip 1 = ; foldable diff --git a/extra/math/quaternions/quaternions.factor b/extra/math/quaternions/quaternions.factor index 3c450f1c05..65f18d3568 100755 --- a/extra/math/quaternions/quaternions.factor +++ b/extra/math/quaternions/quaternions.factor @@ -28,7 +28,7 @@ PRIVATE> : qconjugate ( u -- u' ) #! Quaternion conjugate. - first2 neg >r conjugate r> 2array ; + first2 [ conjugate ] [ neg ] bi* 2array ; : qrecip ( u -- 1/u ) #! Quaternion inverse. diff --git a/extra/math/secant-method/secant-method.factor b/extra/math/secant-method/secant-method.factor index e039b42bbd..ad52c0cd4a 100644 --- a/extra/math/secant-method/secant-method.factor +++ b/extra/math/secant-method/secant-method.factor @@ -1,14 +1,26 @@ ! Copyright © 2008 Reginald Keith Ford II +! See http://factorcode.org/license.txt for BSD license. ! Secant Method of approximating roots - USING: kernel math math.function-tools math.points math.vectors ; IN: math.secant-method -: secant-method ( left right function -- x ) secant-precision [ secant-step ] times drop + 2 / ; + +: secant-method ( left right function -- x ) + secant-precision [ secant-step ] times drop + 2 / ; + ! : close-enough? ( a b -- t/f ) - abs tiny-amount < ; -! : secant-method2 ( left right function -- x ) 2over close-enough? [ drop average ] [ secant-step secant-method ] if ; \ No newline at end of file + +! : secant-method2 ( left right function -- x ) + ! 2over close-enough? + ! [ drop average ] [ secant-step secant-method ] if ; diff --git a/extra/math/statistics/statistics.factor b/extra/math/statistics/statistics.factor index 28cc05151b..8cd6d26c1c 100644 --- a/extra/math/statistics/statistics.factor +++ b/extra/math/statistics/statistics.factor @@ -1,5 +1,7 @@ +! Copyright (C) 2008 Doug Coleman, Michael Judge. +! See http://factorcode.org/license.txt for BSD license. USING: kernel math math.analysis math.functions math.vectors sequences - sequences.lib sorting ; +sequences.lib sorting ; IN: math.statistics : mean ( seq -- n ) @@ -18,7 +20,7 @@ IN: math.statistics : median ( seq -- n ) #! middle number if odd, avg of two middle numbers if even natural-sort dup length dup even? [ - 1- 2 / swap [ nth ] [ >r 1+ r> nth ] 2bi + 2 / + 1- 2 / swap [ nth ] [ [ 1+ ] dip nth ] 2bi + 2 / ] [ 2 / swap nth ] if ; diff --git a/extra/math/text/english/english.factor b/extra/math/text/english/english.factor index 387be4d791..439d0a75fe 100755 --- a/extra/math/text/english/english.factor +++ b/extra/math/text/english/english.factor @@ -1,8 +1,7 @@ ! Copyright (c) 2007 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: combinators.lib kernel math math.functions math.parser namespaces - sequences splitting grouping sequences.lib - combinators.short-circuit ; +sequences splitting grouping combinators.short-circuit ; IN: math.text.english text) ( n -- str ) - dup negative-text swap abs 3digit-groups recombine append ; + [ negative-text ] [ abs 3digit-groups recombine ] bi append ; PRIVATE> : number>text ( n -- str ) - dup zero? [ - small-numbers - ] [ - [ (number>text) ] with-scope - ] if ; + dup zero? [ small-numbers ] [ [ (number>text) ] with-scope ] if ; diff --git a/extra/math/trig/trig.factor b/extra/math/trig/trig.factor index be9ec6a56c..3d9428adda 100644 --- a/extra/math/trig/trig.factor +++ b/extra/math/trig/trig.factor @@ -1,6 +1,6 @@ - +! Copyright (C) 2008 Eduardo Cavazos. +! See http://factorcode.org/license.txt for BSD license. USING: math math.constants ; - IN: math.trig : deg>rad pi * 180 / ; inline From dc4e989002a01bbe8af9d9d46b6296ac6a18587e Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 3 Oct 2008 20:19:20 -0500 Subject: [PATCH 057/244] clean up the db code some, more docs --- basis/db/db-docs.factor | 70 ++++++++++++++++++++++-------- basis/db/db.factor | 16 +++---- basis/db/sqlite/sqlite.factor | 4 +- basis/db/tuples/tuples-docs.factor | 55 ++++++++++++++++++++++- basis/db/tuples/tuples.factor | 7 ++- 5 files changed, 118 insertions(+), 34 deletions(-) diff --git a/basis/db/db-docs.factor b/basis/db/db-docs.factor index b0a01269ab..250e21fdaa 100644 --- a/basis/db/db-docs.factor +++ b/basis/db/db-docs.factor @@ -9,7 +9,8 @@ HELP: db HELP: new-db { $values { "class" class } { "obj" object } } -{ $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." } ; +{ $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 } } @@ -19,6 +20,8 @@ HELP: db-close { $values { "handle" alien } } { $description "Closes a database using the handle provided. Use of the " { $link with-db } " combinator is preferred over manually opening and closing databases so that resources are not leaked." } ; +{ db-open db-close with-db } related-words + HELP: dispose-statements { $values { "assoc" assoc } } { $description "Disposes an associative list of statements." } ; @@ -49,22 +52,28 @@ HELP: new-statement HELP: { $values { "string" string } { "in" sequence } { "out" sequence } { "statement" statement } } -{ $description "Makes a new simple statement object from the given parameters." } ; +{ $description "Makes a new simple statement object from the given parameters.." } +{ $warning "Using a simple statement can lead to SQL injection attacks in PostgreSQL. The Factor database implementation for SQLite only uses " { $link } " as the sole kind of statement; simple statements alias to prepared ones." } ; HELP: { $values { "string" string } { "in" sequence } { "out" sequence } { "statement" statement } } -{ $description "Makes a new prepared statement object from the given parameters." } ; +{ $description "Makes a new prepared statement object from the given parameters. A prepared statement's parameters will be escaped by the database backend to avoid SQL injection attacks. Prepared statements should be preferred over simple statements." } ; HELP: prepare-statement { $values { "statement" statement } } { $description "For databases which implement a method on this generic, it does some internal processing to ready the statement for execution." } ; +HELP: low-level-bind +{ $values + { "statement" statement } } +{ $description "For use with prepared statements, methods on this word should bind the datatype in the SQL spec to its identifier in the SQL string. To name bound variables, SQLite uses identifiers in the form of " { $snippet ":name" } ", while PostgreSQL uses increasing numbers beginning with a dollar sign, e.g. " { $snippet "$1" } "." } ; + HELP: query-results { $values { "query" object } { "result-set" result-set } } -{ $description "Returns a " { $link result-set } " object representing the reults of a SQL query." } ; +{ $description "Returns a " { $link result-set } " object representing the results of a SQL query. See " { $link "db-result-sets" } "." } ; HELP: #rows { $values { "result-set" result-set } { "n" integer } } @@ -161,22 +170,20 @@ HELP: with-transaction { $description "" } ; ARTICLE: "db" "Database library" +"Accessing a database:" { $subsection "db-custom-database-combinators" } +"Higher-level database help:" +{ $vocab-subsection "Database types" "db.types" } +{ $vocab-subsection "High-level tuple/database integration" "db.tuples" } +"Low-level database help:" { $subsection "db-protocol" } { $subsection "db-result-sets" } { $subsection "db-lowlevel-tutorial" } -"Higher-level database:" -{ $vocab-subsection "Database types" "db.types" } -{ $vocab-subsection "High-level tuple/database integration" "db.tuples" } -! { $subsection "db-tuples" } -! { $subsection "db-tuples-protocol" } -! { $subsection "db-tuples-tutorial" } "Supported database backends:" { $vocab-subsection "SQLite" "db.sqlite" } { $vocab-subsection "PostgreSQL" "db.postgresql" } "To add support for another database to Factor:" -{ $subsection "db-porting-the-library" } -; +{ $subsection "db-porting-the-library" } ; ARTICLE: "db-random-access-result-set" "Random access result sets" "Random-access result sets do not have to be traversed in order. For instance, PostgreSQL's result set object can be accessed as a matrix with i,j coordinates." @@ -234,7 +241,32 @@ ARTICLE: "db-protocol" "Low-level database protocol" ARTICLE: "db-lowlevel-tutorial" "Low-level database tutorial" "Although Factor makes integrating a database with its object system easy (see " { $vocab-link "db.tuples" } "), sometimes you may want to write SQL directly and get the results back as arrays of strings, for instance, when interfacing with a legacy database that doesn't easily map to " { $snippet "tuples" } "." -; +"Executing a SQL command:" +{ $subsection sql-command } +"Executing a query directly:" +{ $subsection sql-query } +"Here's an example usage where we'll make a book table, insert some objects, and query them." $nl +"First, let's set up a custom combinator for using our database. See " { $link "db-custom-database-combinators" } " for more details." +{ $code <" +USING: db.sqlite db io.files ; +: with-book-db ( quot -- ) + "book.db" temp-file swap with-db ;"> } +"Now let's create the table manually:" +{ $code <" "create table books + (id integer primary key, title text, author text, date_published timestamp, + edition integer, cover_price double, condition text)" + [ sql-command ] with-book-db" "> } +"Time to insert some books:" +{ $code <" +"insert into books + (title, author, date_published, edition, cover_price, condition) + values('Factor for Sheeple', 'Mister Stacky Pants', date('now'), 1, 13.37, 'mint')" +[ sql-command ] with-book-db"> } +"Now let's select the book:" +{ $code <" +"select id, title, cover_price from books;" [ sql-query ] with-book-db "> } +"Notice that the result of this query is a Factor array containing the database rows as arrays of strings. We would have to convert the " { $snippet "cover_price" } " from a string to a number in order to use it in a calculation." $nl +"In conclusion, this method of accessing a database is supported, but it is fairly low-level and generally specific to a single database. The " { $vocab-link "db.tuples" } " vocabulary is a good alternative to writing SQL by hand." ; ARTICLE: "db-porting-the-library" "Porting the database library" "There are two layers to implement when porting the database library." @@ -244,22 +276,24 @@ ARTICLE: "db-porting-the-library" "Porting the database library" ARTICLE: "db-custom-database-combinators" "Custom database combinators" "Every database library requires some effort on the programmer's part to initialize and open a database. SQLite uses files on your harddisk, so a simple pathname is all the setup required. With PostgreSQL, you log in to a networked server as a user on a specfic port." $nl -"Make a " { $snippet "with-" } " combinator to open and close a database so that resources are not leaked." +"Make a " { $snippet "with-" } " combinator to open and close a database so that resources are not leaked." $nl + +"SQLite example combinator:" { $code <" USING: db.sqlite db io.files ; : with-sqlite-db ( quot -- ) - "my-database.db" temp-file rot with-db ;"> } + "my-database.db" temp-file swap with-db ;"> } +"PostgreSQL example combinator:" { $code <" USING: db.postgresql db ; : with-postgresql-db ( quot -- ) "localhost" >>host + 5432 >>port "erg" >>username "secrets?" >>password "factor-test" >>database swap with-db ;"> -} - -; +} ; ABOUT: "db" diff --git a/basis/db/db.factor b/basis/db/db.factor index 5b159d0ea1..bf23005bc2 100644 --- a/basis/db/db.factor +++ b/basis/db/db.factor @@ -111,22 +111,22 @@ M: object execute-statement* ( statement type -- ) [ db-open db ] dip '[ db get [ drop @ ] with-disposal ] with-variable ; inline +! Words for working with raw SQL statements : default-query ( query -- result-set ) query-results [ [ sql-row ] query-map ] with-disposal ; : sql-query ( sql -- rows ) f f [ default-query ] with-disposal ; -: sql-command ( sql -- ) - dup string? [ - f f [ execute-statement ] with-disposal - ] [ - ! [ - [ sql-command ] each - ! ] with-transaction - ] if ; +: (sql-command) ( string -- ) + f f [ execute-statement ] with-disposal ; +: sql-command ( sql -- ) + dup string? [ (sql-command) ] [ [ (sql-command) ] each ] if ; + +! Transactions SYMBOL: in-transaction + HOOK: begin-transaction db ( -- ) HOOK: commit-transaction db ( -- ) HOOK: rollback-transaction db ( -- ) diff --git a/basis/db/sqlite/sqlite.factor b/basis/db/sqlite/sqlite.factor index dfe4fdf475..8580b9012c 100644 --- a/basis/db/sqlite/sqlite.factor +++ b/basis/db/sqlite/sqlite.factor @@ -49,8 +49,8 @@ M: sqlite-result-set dispose ( result-set -- ) handle>> [ sqlite3_reset drop ] [ sqlite3_clear_bindings drop ] bi ; M: sqlite-statement low-level-bind ( statement -- ) - [ bind-params>> ] [ handle>> ] bi - [ swap [ key>> ] [ value>> ] [ type>> ] tri sqlite-bind-type ] curry each ; + [ handle>> ] [ bind-params>> ] bi + [ [ key>> ] [ value>> ] [ type>> ] tri sqlite-bind-type ] with each ; M: sqlite-statement bind-statement* ( statement -- ) sqlite-maybe-prepare diff --git a/basis/db/tuples/tuples-docs.factor b/basis/db/tuples/tuples-docs.factor index 497cc2e8c5..8b1c8cbb49 100644 --- a/basis/db/tuples/tuples-docs.factor +++ b/basis/db/tuples/tuples-docs.factor @@ -1,9 +1,46 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: classes help.markup help.syntax io.streams.string kernel -quotations sequences strings multiline math db.types ; +quotations sequences strings multiline math db.types db ; IN: db.tuples +HELP: +{ $values + { "query" query } + { "statement" statement } } +{ $description "A database-specific hook for generating the SQL for a count statement." } ; + +HELP: +{ $values + { "tuple" tuple } { "class" class } + { "object" object } } +{ $description "A database-specific hook for generating the SQL for an delete statement." } ; + +HELP: +{ $values + { "class" class } + { "object" object } } +{ $description "A database-specific hook for generating the SQL for an insert statement with a database-assigned primary key." } ; + +HELP: +{ $values + { "class" class } + { "object" object } } +{ $description "A database-specific hook for generating the SQL for an insert statement with a user-assigned primary key." } ; + +HELP: +{ $values + { "tuple" tuple } { "class" class } + { "tuple" tuple } } +{ $description "A database-specific hook for generating the SQL for a select statement." } ; + +HELP: +{ $values + { "class" class } + { "object" object } } +{ $description "A database-specific hook for generating the SQL for an update statement." } ; + + HELP: define-persistent { $values { "class" class } { "table" string } { "columns" "an array of slot specifiers" } } @@ -128,7 +165,21 @@ ARTICLE: "db-tuples-words" "High-level tuple/database words" { $subsection count-tuples } ; ARTICLE: "db-tuples-protocol" "Tuple database protocol" -; +"Creating a table:" +{ $subsection create-sql-statement } +"Dropping a table:" +{ $subsection drop-sql-statement } +"Inserting a tuple:" +{ $subsection } +{ $subsection } +"Updating a tuple:" +{ $subsection } +"Deleting tuples:" +{ $subsection } +"Selecting tuples:" +{ $subsection } +"Counting tuples:" +{ $subsection } ; ARTICLE: "db-tuples-tutorial" "Tuple database tutorial" "Let's make a tuple and store it in a database. To follow along, click on each code example and run it in the listener. If you forget to run an example, just start at the top and run them all again in order." $nl diff --git a/basis/db/tuples/tuples.factor b/basis/db/tuples/tuples.factor index 20d7ac4f84..7a5c9e41e6 100644 --- a/basis/db/tuples/tuples.factor +++ b/basis/db/tuples/tuples.factor @@ -6,8 +6,6 @@ math.parser io prettyprint db.types continuations destructors mirrors sets db.types ; IN: db.tuples - db ( tuple class -- object ) HOOK: db ( tuple class -- tuple ) HOOK: db ( query -- statement ) HOOK: query>statement db ( query -- statement ) - HOOK: insert-tuple-set-key db ( tuple statement -- ) +string ; @@ -68,7 +68,6 @@ GENERIC: eval-generator ( singleton -- object ) PRIVATE> - ! High level ERROR: no-slots-named class seq ; : check-columns ( class columns -- ) From 3d92ef87fe275ea4e45dfeda56d4dcb1fc9800e5 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 3 Oct 2008 20:21:23 -0500 Subject: [PATCH 058/244] remove redundant section --- basis/db/db-docs.factor | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/basis/db/db-docs.factor b/basis/db/db-docs.factor index 250e21fdaa..509391579e 100644 --- a/basis/db/db-docs.factor +++ b/basis/db/db-docs.factor @@ -181,9 +181,7 @@ ARTICLE: "db" "Database library" { $subsection "db-lowlevel-tutorial" } "Supported database backends:" { $vocab-subsection "SQLite" "db.sqlite" } -{ $vocab-subsection "PostgreSQL" "db.postgresql" } -"To add support for another database to Factor:" -{ $subsection "db-porting-the-library" } ; +{ $vocab-subsection "PostgreSQL" "db.postgresql" } ; ARTICLE: "db-random-access-result-set" "Random access result sets" "Random-access result sets do not have to be traversed in order. For instance, PostgreSQL's result set object can be accessed as a matrix with i,j coordinates." @@ -268,11 +266,6 @@ USING: db.sqlite db io.files ; "Notice that the result of this query is a Factor array containing the database rows as arrays of strings. We would have to convert the " { $snippet "cover_price" } " from a string to a number in order to use it in a calculation." $nl "In conclusion, this method of accessing a database is supported, but it is fairly low-level and generally specific to a single database. The " { $vocab-link "db.tuples" } " vocabulary is a good alternative to writing SQL by hand." ; -ARTICLE: "db-porting-the-library" "Porting the database library" -"There are two layers to implement when porting the database library." -{ $subsection "db-protocol" } -; - ARTICLE: "db-custom-database-combinators" "Custom database combinators" "Every database library requires some effort on the programmer's part to initialize and open a database. SQLite uses files on your harddisk, so a simple pathname is all the setup required. With PostgreSQL, you log in to a networked server as a user on a specfic port." $nl From 6b3b48a106405c482a2ecc9bbe58f40fb4fd7b06 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 11:44:12 -0500 Subject: [PATCH 059/244] random is generic, better random docs, cleanups --- .../mersenne-twister-tests.factor | 8 ++-- basis/random/random-docs.factor | 46 +++++++++++++++---- basis/random/random-tests.factor | 6 ++- basis/random/random.factor | 40 +++++++++++----- 4 files changed, 74 insertions(+), 26 deletions(-) diff --git a/basis/random/mersenne-twister/mersenne-twister-tests.factor b/basis/random/mersenne-twister/mersenne-twister-tests.factor index 3f0ebf692a..8a2a5031fa 100644 --- a/basis/random/mersenne-twister/mersenne-twister-tests.factor +++ b/basis/random/mersenne-twister/mersenne-twister-tests.factor @@ -3,17 +3,17 @@ random.mersenne-twister sequences tools.test math.order ; IN: random.mersenne-twister.tests : check-random ( max -- ? ) - dup >r random 0 r> between? ; + [ random 0 ] keep between? ; [ t ] [ 100 [ drop 674 check-random ] all? ] unit-test -: make-100-randoms - [ 100 [ 100 random , ] times ] { } make ; +: randoms ( -- seq ) + 100 [ 100 random ] replicate ; : test-rng ( seed quot -- ) >r r> with-random ; -[ f ] [ 1234 [ make-100-randoms make-100-randoms = ] test-rng ] unit-test +[ f ] [ 1234 [ randoms randoms = ] test-rng ] unit-test [ 1333075495 ] [ 0 [ 1000 [ drop random-generator get random-32* drop ] each random-generator get random-32* ] test-rng diff --git a/basis/random/random-docs.factor b/basis/random/random-docs.factor index 74751328d5..c5daee783e 100644 --- a/basis/random/random-docs.factor +++ b/basis/random/random-docs.factor @@ -1,12 +1,6 @@ -USING: help.markup help.syntax math ; +USING: help.markup help.syntax math kernel sequences ; IN: random -ARTICLE: "random-numbers" "Generating random integers" -"The " { $vocab-link "random" } " vocabulary implements the ``Mersenne Twister'' pseudo-random number generator algorithm." -{ $subsection random } ; - -ABOUT: "random-numbers" - HELP: seed-random { $values { "tuple" "a random number generator" } { "seed" "an integer between 0 and 2^32-1" } } { $description "Seed the random number generator." } @@ -21,8 +15,8 @@ HELP: random-bytes* { $description "Generates a byte-array of random bytes." } ; HELP: random -{ $values { "seq" "a sequence" } { "elt" "a random element" } } -{ $description "Outputs a random element of the sequence. If the sequence is empty, always outputs " { $link f } "." } +{ $values { "obj" object } { "elt" "a random element" } } +{ $description "Outputs a random element of the input object. If the object is an integer, an input of zero always returns a zero, a negative integer throws an error, and positive integers yield a random integer in the interval " { $snippet "[0,n)" } ". On a sequence, an empty sequence always outputs " { $link f } " while any other sequence outputs a random element." } { $notes "Since integers are sequences, passing an integer " { $snippet "n" } " yields a random integer in the interval " { $snippet "[0,n)" } "." } ; HELP: random-bytes @@ -47,4 +41,36 @@ HELP: with-secure-random { $values { "quot" "a quotation" } } { $description "Calls the quotation with the secure random generator in a dynamic variable. All random numbers will be generated using this random generator." } ; -{ with-random with-secure-random } related-words +HELP: with-system-random +{ $values { "quot" "a quotation" } } +{ $description "Calls the quotation with the system's random generator in a dynamic variable. All random numbers will be generated using this random generator." } ; + +{ with-random with-secure-random with-system-random } related-words + +HELP: delete-random +{ $values + { "seq" sequence } + { "elt" object } } +{ $description "Delete a random number from a sequence using " { $link delete-nth } " and returns the deleted object." } ; + +ARTICLE: "random-protocol" "Random protocol" +"A random number generator must implement one of these two words:" +{ $subsection random-32* } +{ $subsection random-bytes* } +"Optional, to seed a random number generator:" +{ $subsection seed-random } ; + +ARTICLE: "random" "Generating random integers" +"The " { $vocab-link "random" } " vocabulary contains a protocol for generating random or pseudorandom numbers. The ``Mersenne Twister'' pseudorandom number generator algorithm is the default generator stored in " { $link random-generator } "." +"Generate a random object:" +{ $subsection random } +"Combinators to change the random number generator:" +{ $subsection with-random } +{ $subsection with-system-random } +{ $subsection with-secure-random } +"Implementation:" +{ $subsection "random-protocol" } +"Deleting a random element from a sequence:" +{ $subsection delete-random } ; + +ABOUT: "random" diff --git a/basis/random/random-tests.factor b/basis/random/random-tests.factor index 89c0c02c4a..7300a0dac4 100644 --- a/basis/random/random-tests.factor +++ b/basis/random/random-tests.factor @@ -1,5 +1,5 @@ USING: random sequences tools.test kernel math math.functions -sets ; +sets math.constants ; IN: random.tests [ 4 ] [ 4 random-bytes length ] unit-test @@ -15,3 +15,7 @@ IN: random.tests [ t ] [ 10000 [ 0 [ drop 400 random + ] reduce ] keep / 2 * 400 10 ~ ] unit-test [ t ] [ 1000 [ 400 random ] replicate prune length 256 > ] unit-test + +[ t ] [ pi random float? ] unit-test + +[ 0 ] [ 0 random ] unit-test diff --git a/basis/random/random.factor b/basis/random/random.factor index 5ee45e6729..673a97caa3 100644 --- a/basis/random/random.factor +++ b/basis/random/random.factor @@ -33,20 +33,38 @@ M: f random-32* ( obj -- * ) no-random-number-generator ; random-generator get random-bytes* ] keep head ; -: random ( seq -- elt ) - [ f ] [ - [ - length dup log2 7 + 8 /i 1+ - [ random-bytes byte-array>bignum ] - [ 3 shift 2^ ] bi / * >integer - ] keep nth - ] if-empty ; - -: delete-random ( seq -- elt ) - [ length random ] keep [ nth ] 2keep delete-nth ; +GENERIC: random ( obj -- elt ) : random-bits ( n -- r ) 2^ random ; +bignum ] + [ 3 shift 2^ ] bi / * >integer ; + +PRIVATE> + +M: sequence random ( seq -- elt ) + [ f ] [ + [ length random-integer ] keep nth + ] if-empty ; + +ERROR: negative-random n ; +M: integer random ( integer -- integer' ) + { + { [ dup 0 = ] [ ] } + { [ dup 0 < ] [ negative-random ] } + [ random-integer ] + } cond ; + +M: float random ( float -- elt ) + 64 random-bits 64 2^ 1- / * ; + +: delete-random ( seq -- elt ) + [ length random-integer ] keep [ nth ] 2keep delete-nth ; + : with-random ( tuple quot -- ) random-generator swap with-variable ; inline From efb5fa0814034ffc8036dfc61adc1f1ce787dc15 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 11:45:21 -0500 Subject: [PATCH 060/244] don't redefine delete-random --- basis/heaps/authors.txt | 1 + basis/heaps/heaps-tests.factor | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/basis/heaps/authors.txt b/basis/heaps/authors.txt index 1229a590fa..d0c12d9aa4 100755 --- a/basis/heaps/authors.txt +++ b/basis/heaps/authors.txt @@ -1,2 +1,3 @@ Doug Coleman Ryan Murphy +Slava Pestov diff --git a/basis/heaps/heaps-tests.factor b/basis/heaps/heaps-tests.factor index 13b6a97654..e28eb3007a 100644 --- a/basis/heaps/heaps-tests.factor +++ b/basis/heaps/heaps-tests.factor @@ -1,6 +1,5 @@ ! Copyright 2007, 2008 Ryan Murphy, Slava Pestov ! See http://factorcode.org/license.txt for BSD license. - USING: arrays kernel math namespaces tools.test heaps heaps.private math.parser random assocs sequences sorting accessors math.order ; @@ -54,9 +53,6 @@ IN: heaps.tests [ t ] swap [ 2^ test-entry-indices ] curry unit-test ] each -: delete-random ( seq -- elt ) - dup length random dup pick nth >r swap delete-nth r> ; - : sort-entries ( entries -- entries' ) [ [ key>> ] compare ] sort ; From aebb58263478d27eeee495620021ad75f8a06ada Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 11:45:48 -0500 Subject: [PATCH 061/244] remove ?first etc --- extra/sequences/lib/lib-tests.factor | 7 ------- extra/sequences/lib/lib.factor | 9 --------- 2 files changed, 16 deletions(-) diff --git a/extra/sequences/lib/lib-tests.factor b/extra/sequences/lib/lib-tests.factor index a44d41d98a..509d9b1432 100755 --- a/extra/sequences/lib/lib-tests.factor +++ b/extra/sequences/lib/lib-tests.factor @@ -47,13 +47,6 @@ IN: sequences.lib.tests [ t ] [ "ab" 4 strings [ >string ] map "abab" swap member? ] unit-test [ { { } { 1 } { 2 } { 1 2 } } ] [ { 1 2 } power-set ] unit-test -[ f ] [ { } ?first ] unit-test -[ f ] [ { } ?fourth ] unit-test -[ 1 ] [ { 1 2 3 } ?first ] unit-test -[ 2 ] [ { 1 2 3 } ?second ] unit-test -[ 3 ] [ { 1 2 3 } ?third ] unit-test -[ f ] [ { 1 2 3 } ?fourth ] 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 diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index fe9d9bb587..ed7f40598c 100755 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -131,15 +131,6 @@ PRIVATE> : power-set ( seq -- subsets ) 2 over length exact-number-strings swap [ switches ] curry map ; -: ?first ( seq -- first/f ) 0 swap ?nth ; inline -: ?second ( seq -- second/f ) 1 swap ?nth ; inline -: ?third ( seq -- third/f ) 2 swap ?nth ; inline -: ?fourth ( seq -- fourth/f ) 3 swap ?nth ; inline - -: ?first2 ( seq -- 1st/f 2nd/f ) dup ?first swap ?second ; inline -: ?first3 ( seq -- 1st/f 2nd/f 3rd/f ) dup ?first2 rot ?third ; inline -: ?first4 ( seq -- 1st/f 2nd/f 3rd/f 4th/f ) dup ?first3 roll ?fourth ; inline - USE: continuations : ?subseq ( from to seq -- subseq ) >r >r 0 max r> r> From 5ca60480c51aff0d7dbf0f00b106999a8f9e416e Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 12:40:58 -0500 Subject: [PATCH 062/244] put a random method on intervals, works for float and integer intervals --- basis/math/intervals/intervals.factor | 39 +++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/basis/math/intervals/intervals.factor b/basis/math/intervals/intervals.factor index 7c3bf27e9d..f359cfb7c4 100644 --- a/basis/math/intervals/intervals.factor +++ b/basis/math/intervals/intervals.factor @@ -1,8 +1,9 @@ -! Copyright (C) 2007, 2008 Slava Pestov. +! Copyright (C) 2007, 2008 Slava Pestov, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. ! Based on Slate's src/unfinished/interval.slate by Brian Rice. USING: accessors kernel sequences arrays math math.order -combinators generic ; +combinators generic random math.constants qualified ; +FROM: math.ranges => ; IN: math.intervals SYMBOL: empty-interval @@ -396,3 +397,37 @@ SYMBOL: incomparable [ to>> first2 [ 1- ] unless ] bi [a,b] ] unless ; + +> second not ; + +: open-right? ( interval -- ? ) to>> second not ; + +: integral-interval? ( interval -- ? ) + [ from>> ] [ to>> ] bi [ first integer? ] both? ; + +PRIVATE> + +ERROR: empty-random-interval ; + +: random-interval-integer ( interval -- n ) + [ [ to>> first ] [ open-right? [ 1- ] when ] bi ] + [ + [ from>> first ] + [ open-left? [ 1+ ] when ] bi + tuck - 1+ random + + ] bi ; + +: random-interval-float ( interval -- x ) + [ [ from>> first ] [ open-left? [ epsilon + ] when ] bi ] + [ [ to>> first ] [ open-right? [ epsilon - ] when ] bi ] bi + epsilon random [ empty-random-interval ] unless* ; + +M: interval random ( interval -- x ) + dup empty-interval = [ empty-random-interval ] when + dup integral-interval? [ + random-interval-integer + ] [ + random-interval-float + ] if ; From ce7cf8122435c2e8be6386a388faf5dab476e65f Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 12:45:10 -0500 Subject: [PATCH 063/244] add more unit tests --- basis/math/intervals/intervals-tests.factor | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/basis/math/intervals/intervals-tests.factor b/basis/math/intervals/intervals-tests.factor index 7d8d496737..481b065a1c 100644 --- a/basis/math/intervals/intervals-tests.factor +++ b/basis/math/intervals/intervals-tests.factor @@ -1,6 +1,6 @@ USING: math.intervals kernel sequences words math math.order arrays prettyprint tools.test random vocabs combinators -accessors ; +accessors math.constants ; IN: math.intervals.tests [ empty-interval ] [ 2 2 (a,b) ] unit-test @@ -334,3 +334,13 @@ IN: math.intervals.tests [ execute ] [ swapd execute ] 3bi = ] all? ] unit-test + +[ t ] [ 1.0 1.0 epsilon + [a,b] random float? ] unit-test +[ t ] [ 1.0 1.0 epsilon + [a,b) random float? ] unit-test +[ t ] [ 1.0 1.0 epsilon + (a,b] random float? ] unit-test +[ 1.0 1.0 (a,b) random float? ] must-fail + +[ 3 4 + (a,b) random ] must-fail +[ 3 ] [ 3 4 [a,b) random ] unit-test +[ 4 ] [ 3 4 (a,b] random ] unit-test +[ t ] [ 3 4 [a,b] random { 3 4 } member? ] unit-test From a057da4116ea7871679920048dd7484da09147f5 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 13:21:06 -0500 Subject: [PATCH 064/244] "finish" database docs --- basis/db/db-docs.factor | 10 ++++++++++ basis/db/tuples/tuples-docs.factor | 17 +++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/basis/db/db-docs.factor b/basis/db/db-docs.factor index 509391579e..0acd1f0245 100644 --- a/basis/db/db-docs.factor +++ b/basis/db/db-docs.factor @@ -49,6 +49,16 @@ HELP: new-statement { $values { "sql" string } { "in" sequence } { "out" sequence } { "class" class } { "statement" statement } } { $description "Makes a new statement object from the given parameters." } ; +HELP: bind-statement +{ $values + { "obj" object } { "statement" statement } } +{ $description "Sets the statement's " { $slot "bind-params" } " and calls " { $link bind-statement* } " to do the database-specific bind. Sets " { $slot "bound?" } " to true if binding succeeds." } ; + +HELP: bind-statement* +{ $values + { "statement" statement } } +{ $description "Does a low-level bind of the SQL statement's tuple parameters if the database requires. Some databases should treat this as a no-op and bind instead when the actual statement is run." } ; + HELP: { $values { "string" string } { "in" sequence } { "out" sequence } { "statement" statement } } diff --git a/basis/db/tuples/tuples-docs.factor b/basis/db/tuples/tuples-docs.factor index 8b1c8cbb49..02f5dfa38c 100644 --- a/basis/db/tuples/tuples-docs.factor +++ b/basis/db/tuples/tuples-docs.factor @@ -4,6 +4,23 @@ USING: classes help.markup help.syntax io.streams.string kernel quotations sequences strings multiline math db.types db ; IN: db.tuples +HELP: create-sql-statement +{ $values + { "class" class } + { "object" object } } +{ $description "Generates the SQL code for creating a table for a given class." } ; + +HELP: drop-sql-statement +{ $values + { "class" class } + { "object" object } } +{ $description "Generates the SQL code for dropping a table for a given class." } ; + +HELP: insert-tuple-set-key +{ $values + { "tuple" tuple } { "statement" statement } } +{ $description "Inserts a tuple and sets its primary key in one word. This is necessary for some databases." } ; + HELP: { $values { "query" query } From 12afcd2c2c0e2d0062db8d88a4399576bbde3895 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 13:26:17 -0500 Subject: [PATCH 065/244] add relative-url to urls --- basis/urls/urls-docs.factor | 6 ++++++ basis/urls/urls.factor | 2 ++ 2 files changed, 8 insertions(+) diff --git a/basis/urls/urls-docs.factor b/basis/urls/urls-docs.factor index 03ffaded05..dc61623571 100644 --- a/basis/urls/urls-docs.factor +++ b/basis/urls/urls-docs.factor @@ -135,6 +135,12 @@ HELP: relative-url } } ; +HELP: relative-url? +{ $values + { "url" url } + { "?" "a boolean" } } +{ $description "Tests whether a given url is relative to a domain." } ; + HELP: secure-protocol? { $values { "protocol" string } { "?" "a boolean" } } { $description "Tests if protocol connections must be made with secure sockets (SSL/TLS)." } diff --git a/basis/urls/urls.factor b/basis/urls/urls.factor index 30e8c68f9d..597cdfdb7f 100644 --- a/basis/urls/urls.factor +++ b/basis/urls/urls.factor @@ -155,6 +155,8 @@ PRIVATE> f >>host f >>port ; +: relative-url? ( url -- ? ) protocol>> not ; + ! Half-baked stuff follows : secure-protocol? ( protocol -- ? ) "https" = ; From af37d280422de00a9106339ff05662d9bd5b54d7 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 13:27:29 -0500 Subject: [PATCH 066/244] remove relative-urls? word and some dead code --- extra/spider/spider.factor | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/extra/spider/spider.factor b/extra/spider/spider.factor index 64ee081ecc..bd5b2668be 100644 --- a/extra/spider/spider.factor +++ b/extra/spider/spider.factor @@ -9,7 +9,6 @@ IN: spider TUPLE: spider base count max-count sleep max-depth initial-links filters spidered todo nonmatching quiet ; -! secure? agent page-timeout data-timeout overall-timeout TUPLE: spider-result url depth headers fetch-time parsed-html links processing-time timestamp ; @@ -27,8 +26,6 @@ links processing-time timestamp ; > not ; - : apply-filters ( links spider -- links' ) filters>> [ '[ _ 1&& ] filter ] when* ; @@ -82,10 +79,10 @@ links processing-time timestamp ; [ initial-links>> normalize-hrefs 0 ] keep [ add-todo ] keep ; -: slurp-heap-when ( heap quot1 quot2: ( value key -- ) -- ) +: slurp-heap-while ( heap quot1 quot2: ( value key -- ) -- ) pick heap-empty? [ 3drop ] [ [ [ heap-pop dup ] 2dip slip [ t ] compose [ 2drop f ] if ] - [ roll [ slurp-heap-when ] [ 3drop ] if ] 3bi + [ roll [ slurp-heap-while ] [ 3drop ] if ] 3bi ] if ; inline recursive PRIVATE> @@ -98,7 +95,7 @@ PRIVATE> '[ _ <= spider get [ count>> ] [ max-count>> ] bi < and - ] [ spider-page spider-sleep ] slurp-heap-when + ] [ spider-page spider-sleep ] slurp-heap-while spider get ] with-variable ] with-logging ; From a130928ec248874b03aaff802c357689a53bad68 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 13:28:42 -0500 Subject: [PATCH 067/244] fix docs --- extra/spider/spider-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/spider/spider-docs.factor b/extra/spider/spider-docs.factor index 5f820ca368..41dd13e918 100644 --- a/extra/spider/spider-docs.factor +++ b/extra/spider/spider-docs.factor @@ -16,7 +16,7 @@ HELP: run-spider { "spider" spider } } { $description "Runs a spider until completion. See the " { $subsection "spider-tutorial" } " for a complete description of the tuple slots that affect how thet spider works." } ; -HELP: slurp-heap-when +HELP: slurp-heap-while { $values { "heap" "a heap" } { "quot1" quotation } { "quot2" quotation } } { $description "Removes values from a heap that match the predicate quotation " { $snippet "quot1" } " and processes them with " { $snippet "quot2" } " until the predicate quotation no longer matches." } ; From 7dc77903629356e69fe5e317b02bcda2868dce16 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 4 Oct 2008 14:18:16 -0500 Subject: [PATCH 068/244] fix link --- basis/help/handbook/handbook.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/help/handbook/handbook.factor b/basis/help/handbook/handbook.factor index 51750d772f..c1505705da 100644 --- a/basis/help/handbook/handbook.factor +++ b/basis/help/handbook/handbook.factor @@ -90,7 +90,7 @@ ARTICLE: "numbers" "Numbers" { $subsection "math-constants" } { $subsection "math-functions" } { $subsection "number-strings" } -{ $subsection "random-numbers" } +{ $subsection "random" } "Number implementations:" { $subsection "integers" } { $subsection "rationals" } From 54f28c0751cd9df7c283724e67b2cd5be69cb756 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 5 Oct 2008 14:11:11 -0500 Subject: [PATCH 069/244] Fix terminology --- basis/urls/urls-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/urls/urls-docs.factor b/basis/urls/urls-docs.factor index dc61623571..204dc2ff08 100644 --- a/basis/urls/urls-docs.factor +++ b/basis/urls/urls-docs.factor @@ -139,7 +139,7 @@ HELP: relative-url? { $values { "url" url } { "?" "a boolean" } } -{ $description "Tests whether a given url is relative to a domain." } ; +{ $description "Tests whether a given URL is relative to a domain." } ; HELP: secure-protocol? { $values { "protocol" string } { "?" "a boolean" } } From 503963580b2e2d09ae41130604eebbee4b2ab252 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 5 Oct 2008 14:33:06 -0500 Subject: [PATCH 070/244] Cut down on vergbiage --- basis/urls/urls-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/urls/urls-docs.factor b/basis/urls/urls-docs.factor index 204dc2ff08..b423e6b751 100644 --- a/basis/urls/urls-docs.factor +++ b/basis/urls/urls-docs.factor @@ -139,7 +139,7 @@ HELP: relative-url? { $values { "url" url } { "?" "a boolean" } } -{ $description "Tests whether a given URL is relative to a domain." } ; +{ $description "Tests whether a URL is relative." } ; HELP: secure-protocol? { $values { "protocol" string } { "?" "a boolean" } } From fad3d52bc147af98cf1e9a263607286025698067 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 15:14:05 -0500 Subject: [PATCH 071/244] remove random floats, better docs --- basis/random/random-docs.factor | 19 ++++++++++++++++--- basis/random/random.factor | 5 +---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/basis/random/random-docs.factor b/basis/random/random-docs.factor index c5daee783e..51656a77dd 100644 --- a/basis/random/random-docs.factor +++ b/basis/random/random-docs.factor @@ -16,8 +16,21 @@ HELP: random-bytes* HELP: random { $values { "obj" object } { "elt" "a random element" } } -{ $description "Outputs a random element of the input object. If the object is an integer, an input of zero always returns a zero, a negative integer throws an error, and positive integers yield a random integer in the interval " { $snippet "[0,n)" } ". On a sequence, an empty sequence always outputs " { $link f } " while any other sequence outputs a random element." } -{ $notes "Since integers are sequences, passing an integer " { $snippet "n" } " yields a random integer in the interval " { $snippet "[0,n)" } "." } ; +{ $description "Outputs a random element of the input object. If the object is an integer, an input of zero always returns a zero, while any other integer integers yield a random integer in the interval between itself and zero, inclusive of zero. On a sequence, an empty sequence always outputs " { $link f } "." } +{ $examples + { $unchecked-example "USING: random prettyprint ;" + "10 random ." + "3" } + { $example "USING: random prettyprint ;" + "0 random ." + "0" } + { $unchecked-example "USING: random prettyprint ;" + "-10 random ." + "-8" } + { $unchecked-example "USING: random prettyprint ;" + "{ \"a\" \"b\" \"c\" } random ." + "\"a\"" } +} ; HELP: random-bytes { $values { "n" "an integer" } { "byte-array" "a random integer" } } @@ -51,7 +64,7 @@ HELP: delete-random { $values { "seq" sequence } { "elt" object } } -{ $description "Delete a random number from a sequence using " { $link delete-nth } " and returns the deleted object." } ; +{ $description "Deletes a random number from a sequence using " { $link delete-nth } " and returns the deleted object." } ; ARTICLE: "random-protocol" "Random protocol" "A random number generator must implement one of these two words:" diff --git a/basis/random/random.factor b/basis/random/random.factor index 673a97caa3..8a69b28171 100644 --- a/basis/random/random.factor +++ b/basis/random/random.factor @@ -55,13 +55,10 @@ ERROR: negative-random n ; M: integer random ( integer -- integer' ) { { [ dup 0 = ] [ ] } - { [ dup 0 < ] [ negative-random ] } + { [ dup 0 < ] [ neg random-integer neg ] } [ random-integer ] } cond ; -M: float random ( float -- elt ) - 64 random-bits 64 2^ 1- / * ; - : delete-random ( seq -- elt ) [ length random-integer ] keep [ nth ] 2keep delete-nth ; From 4e88005bf4b362d81b578789fd619524fef27e38 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 15:14:18 -0500 Subject: [PATCH 072/244] remove random intervals for now --- basis/math/intervals/intervals.factor | 34 --------------------------- 1 file changed, 34 deletions(-) diff --git a/basis/math/intervals/intervals.factor b/basis/math/intervals/intervals.factor index f359cfb7c4..38d67aa043 100644 --- a/basis/math/intervals/intervals.factor +++ b/basis/math/intervals/intervals.factor @@ -397,37 +397,3 @@ SYMBOL: incomparable [ to>> first2 [ 1- ] unless ] bi [a,b] ] unless ; - -> second not ; - -: open-right? ( interval -- ? ) to>> second not ; - -: integral-interval? ( interval -- ? ) - [ from>> ] [ to>> ] bi [ first integer? ] both? ; - -PRIVATE> - -ERROR: empty-random-interval ; - -: random-interval-integer ( interval -- n ) - [ [ to>> first ] [ open-right? [ 1- ] when ] bi ] - [ - [ from>> first ] - [ open-left? [ 1+ ] when ] bi - tuck - 1+ random + - ] bi ; - -: random-interval-float ( interval -- x ) - [ [ from>> first ] [ open-left? [ epsilon + ] when ] bi ] - [ [ to>> first ] [ open-right? [ epsilon - ] when ] bi ] bi - epsilon random [ empty-random-interval ] unless* ; - -M: interval random ( interval -- x ) - dup empty-interval = [ empty-random-interval ] when - dup integral-interval? [ - random-interval-integer - ] [ - random-interval-float - ] if ; From 02bb3063ffcb35ec074016460bf9c307902d27da Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 15:21:23 -0500 Subject: [PATCH 073/244] add word to convert timevals to unix time, add utility words --- basis/calendar/calendar-docs.factor | 38 ++++++++++++++++++++++++++--- basis/calendar/calendar.factor | 10 +++++++- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/basis/calendar/calendar-docs.factor b/basis/calendar/calendar-docs.factor index c3d84fc783..f1cdafb476 100644 --- a/basis/calendar/calendar-docs.factor +++ b/basis/calendar/calendar-docs.factor @@ -165,7 +165,15 @@ HELP: milliseconds { $values { "x" number } { "duration" duration } } { $description "Creates a duration object with the specified number of milliseconds." } ; -{ years months days hours minutes seconds milliseconds } related-words +HELP: microseconds +{ $values { "x" number } { "duration" duration } } +{ $description "Creates a duration object with the specified number of microseconds." } ; + +HELP: nanoseconds +{ $values { "x" number } { "duration" duration } } +{ $description "Creates a duration object with the specified number of nanoseconds." } ; + +{ years months days hours minutes seconds milliseconds microseconds nanoseconds } related-words HELP: leap-year? { $values { "obj" object } { "?" "a boolean" } } @@ -263,7 +271,27 @@ HELP: duration>milliseconds } } ; -{ duration>years duration>months duration>days duration>hours duration>minutes duration>seconds duration>milliseconds } related-words +HELP: duration>microseconds +{ $values { "duration" duration } { "x" number } } +{ $description "Calculates the length of a duration in microseconds." } +{ $examples + { $example "USING: calendar prettyprint ;" + "6 seconds duration>microseconds ." + "6000000" + } +} ; + +HELP: duration>nanoseconds +{ $values { "duration" duration } { "x" number } } +{ $description "Calculates the length of a duration in nanoseconds." } +{ $examples + { $example "USING: calendar prettyprint ;" + "6 seconds duration>nanoseconds ." + "6000000000" + } +} ; + +{ duration>years duration>months duration>days duration>hours duration>minutes duration>seconds duration>milliseconds duration>microseconds duration>nanoseconds } related-words HELP: time- @@ -528,6 +556,8 @@ ARTICLE: "using-durations" "Using durations" { $subsection minutes } { $subsection seconds } { $subsection milliseconds } +{ $subsection microseconds } +{ $subsection nanoseconds } { $subsection instant } "Converting a duration to a number:" { $subsection duration>years } @@ -536,7 +566,9 @@ ARTICLE: "using-durations" "Using durations" { $subsection duration>hours } { $subsection duration>minutes } { $subsection duration>seconds } -{ $subsection duration>milliseconds } ; +{ $subsection duration>milliseconds } +{ $subsection duration>microseconds } +{ $subsection duration>nanoseconds } ; ARTICLE: "relative-timestamps" "Relative timestamps" "In the future:" diff --git a/basis/calendar/calendar.factor b/basis/calendar/calendar.factor index c2c386a790..31c835aada 100644 --- a/basis/calendar/calendar.factor +++ b/basis/calendar/calendar.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel math math.functions namespaces sequences strings system vocabs.loader threads accessors combinators -locals classes.tuple math.order summary +locals classes.tuple math.order summary structs combinators.short-circuit ; IN: calendar @@ -129,6 +129,8 @@ PRIVATE> : minutes ( x -- duration ) instant clone swap >>minute ; : seconds ( x -- duration ) instant clone swap >>second ; : milliseconds ( x -- duration ) 1000 / seconds ; +: microseconds ( x -- duration ) 1000000 / seconds ; +: nanoseconds ( x -- duration ) 1000000000 / seconds ; GENERIC: leap-year? ( obj -- ? ) @@ -261,6 +263,8 @@ M: duration <=> [ duration>years ] compare ; : duration>minutes ( duration -- x ) duration>years minutes-per-year * ; : duration>seconds ( duration -- x ) duration>years seconds-per-year * ; : duration>milliseconds ( duration -- x ) duration>seconds 1000 * ; +: duration>microseconds ( duration -- x ) duration>seconds 1000000 * ; +: duration>nanoseconds ( duration -- x ) duration>seconds 1000000000 * ; GENERIC: time- ( time1 time2 -- time3 ) @@ -398,6 +402,10 @@ PRIVATE> : time-since-midnight ( timestamp -- duration ) dup midnight time- ; +: timeval>unix-time ( timeval -- timestamp ) + [ timeval-sec seconds ] [ timeval-usec microseconds ] bi + time+ unix-1970 time+ >local-time ; + M: timestamp sleep-until timestamp>millis sleep-until ; M: duration sleep hence sleep-until ; From 5c8de440852a2bcc927d0553518094961e8c90e3 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 15:23:04 -0500 Subject: [PATCH 074/244] more unix ffi functions --- basis/unix/linux/linux.factor | 2 +- basis/unix/unix.factor | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/basis/unix/linux/linux.factor b/basis/unix/linux/linux.factor index 0c08cf0f2b..457d96c7d8 100644 --- a/basis/unix/linux/linux.factor +++ b/basis/unix/linux/linux.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: unix USING: alien.syntax ; +IN: unix ! Linux. diff --git a/basis/unix/unix.factor b/basis/unix/unix.factor index 2011fa0dcb..4c572a6be0 100644 --- a/basis/unix/unix.factor +++ b/basis/unix/unix.factor @@ -1,12 +1,10 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. - -USING: alien alien.c-types alien.syntax kernel libc structs sequences - continuations byte-arrays strings - math namespaces system combinators vocabs.loader qualified - accessors stack-checker macros locals generalizations - unix.types debugger io prettyprint ; - +USING: alien alien.c-types alien.syntax kernel libc structs +sequences continuations byte-arrays strings math namespaces +system combinators vocabs.loader qualified accessors +stack-checker macros locals generalizations unix.types +debugger io prettyprint ; IN: unix TYPEDEF: uint in_addr_t @@ -109,8 +107,12 @@ FUNCTION: uid_t geteuid ; FUNCTION: gid_t getgid ; FUNCTION: int getgrgid_r ( gid_t gid, group* grp, char* buffer, size_t bufsize, group** result ) ; FUNCTION: int getgrnam_r ( char* name, group* grp, char* buffer, size_t bufsize, group** result ) ; +FUNCTION: passwd* getpwent ( ) ; FUNCTION: int getpwnam_r ( char* login, passwd* pwd, char* buffer, size_t bufsize, passwd** result ) ; FUNCTION: int getgroups ( int gidsetlen, gid_t* gidset ) ; +FUNCTION: int getgrouplist ( char* name, int basegid, int* groups, int* ngroups ) ; + +FUNCTION: group* getgrent ; FUNCTION: int gethostname ( char* name, int len ) ; FUNCTION: int getsockname ( int socket, sockaddr* address, socklen_t* address_len ) ; FUNCTION: int getpeername ( int socket, sockaddr* address, socklen_t* address_len ) ; From 6d8bfa4bf4728514b4bbc0da639329e53bb23072 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 15:38:31 -0500 Subject: [PATCH 075/244] remove some dead usings --- basis/math/intervals/intervals.factor | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/basis/math/intervals/intervals.factor b/basis/math/intervals/intervals.factor index 38d67aa043..213bfce354 100644 --- a/basis/math/intervals/intervals.factor +++ b/basis/math/intervals/intervals.factor @@ -2,8 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. ! Based on Slate's src/unfinished/interval.slate by Brian Rice. USING: accessors kernel sequences arrays math math.order -combinators generic random math.constants qualified ; -FROM: math.ranges => ; +combinators generic ; IN: math.intervals SYMBOL: empty-interval From 7bf5a3a077f74ca787c5805390fd819d18f25b6d Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 16:41:42 -0500 Subject: [PATCH 076/244] remove unit test --- basis/random/random-tests.factor | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/basis/random/random-tests.factor b/basis/random/random-tests.factor index 7300a0dac4..c6d88c5525 100644 --- a/basis/random/random-tests.factor +++ b/basis/random/random-tests.factor @@ -1,5 +1,5 @@ USING: random sequences tools.test kernel math math.functions -sets math.constants ; +sets ; IN: random.tests [ 4 ] [ 4 random-bytes length ] unit-test @@ -16,6 +16,4 @@ IN: random.tests [ t ] [ 1000 [ 400 random ] replicate prune length 256 > ] unit-test -[ t ] [ pi random float? ] unit-test - [ 0 ] [ 0 random ] unit-test From ccdcacfd0419afabeb42fba76d4d1fbaaf8d5594 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 16:41:51 -0500 Subject: [PATCH 077/244] remove unit tests --- basis/math/intervals/intervals-tests.factor | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/basis/math/intervals/intervals-tests.factor b/basis/math/intervals/intervals-tests.factor index 481b065a1c..ad2fb53dc4 100644 --- a/basis/math/intervals/intervals-tests.factor +++ b/basis/math/intervals/intervals-tests.factor @@ -334,13 +334,3 @@ IN: math.intervals.tests [ execute ] [ swapd execute ] 3bi = ] all? ] unit-test - -[ t ] [ 1.0 1.0 epsilon + [a,b] random float? ] unit-test -[ t ] [ 1.0 1.0 epsilon + [a,b) random float? ] unit-test -[ t ] [ 1.0 1.0 epsilon + (a,b] random float? ] unit-test -[ 1.0 1.0 (a,b) random float? ] must-fail - -[ 3 4 + (a,b) random ] must-fail -[ 3 ] [ 3 4 [a,b) random ] unit-test -[ 4 ] [ 3 4 (a,b] random ] unit-test -[ t ] [ 3 4 [a,b] random { 3 4 } member? ] unit-test From 94d7772c1352c5db0c57b5431d86dff47034e90c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 18:26:24 -0500 Subject: [PATCH 078/244] remove unused word, make some stuff compile --- basis/unicode/collation/collation-tests.factor | 6 +----- basis/unicode/collation/collation.factor | 9 ++++----- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/basis/unicode/collation/collation-tests.factor b/basis/unicode/collation/collation-tests.factor index bf87c6b7da..be6af2d920 100644 --- a/basis/unicode/collation/collation-tests.factor +++ b/basis/unicode/collation/collation-tests.factor @@ -11,11 +11,7 @@ IN: unicode.collation.tests : test-two ( str1 str2 -- ) [ +lt+ ] -rot [ string<=> ] 2curry unit-test ; -: failures - parse-test dup 2 - [ string<=> +lt+ = not ] assoc-filter dup assoc-size ; - -: test-equality +: test-equality ( str1 str2 -- ) { primary= secondary= tertiary= quaternary= } [ execute ] with with each ; diff --git a/basis/unicode/collation/collation.factor b/basis/unicode/collation/collation.factor index 8e9e2963a8..65786ede5d 100644 --- a/basis/unicode/collation/collation.factor +++ b/basis/unicode/collation/collation.factor @@ -100,8 +100,8 @@ ducet insert-helpers ] { } map-as concat ; : append-weights ( weights quot -- ) - swap [ ignorable?>> not ] filter - swap map [ zero? not ] filter % 0 , ; + [ [ ignorable?>> not ] filter ] dip + map [ zero? not ] filter % 0 , ; inline : variable-weight ( weight -- ) dup ignorable?>> [ primary>> ] [ drop HEX: FFFF ] if , ; @@ -135,7 +135,7 @@ PRIVATE> @@ -158,8 +158,7 @@ PRIVATE> PRIVATE> : sort-strings ( strings -- sorted ) - [ w/collation-key ] map - natural-sort values ; + [ w/collation-key ] map natural-sort values ; : string<=> ( str1 str2 -- <=> ) [ w/collation-key ] compare ; From a712fd3d0b4d6a0ebd52656ef8ea05976a3e6849 Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Sun, 5 Oct 2008 21:18:58 -0200 Subject: [PATCH 079/244] irc.client: Rename listeners to chats, rename some words, better handling of channel joins for chats attached before login, fixes, etc --- extra/irc/client/client-docs.factor | 75 ++++++------ extra/irc/client/client-tests.factor | 54 ++++----- extra/irc/client/client.factor | 167 ++++++++++++++------------- 3 files changed, 146 insertions(+), 150 deletions(-) diff --git a/extra/irc/client/client-docs.factor b/extra/irc/client/client-docs.factor index d150e6d36f..1b9204c4f1 100644 --- a/extra/irc/client/client-docs.factor +++ b/extra/irc/client/client-docs.factor @@ -3,11 +3,11 @@ IN: irc.client HELP: irc-client "IRC Client object" ; -HELP: irc-server-listener "Listener for server messages unmanaged by other listeners" ; +HELP: irc-server-chat "Chat for server messages unmanaged by other chats" ; -HELP: irc-channel-listener "Listener for irc channels" ; +HELP: irc-channel-chat "Chat for irc channels" ; -HELP: irc-nick-listener "Listener for irc users" ; +HELP: irc-nick-chat "Chat for irc users" ; HELP: irc-profile "IRC Client profile object" ; @@ -15,48 +15,43 @@ HELP: connect-irc "Connecting to an irc server" { $values { "irc-client" "an irc client object" } } { $description "Connects and logins " { $link irc-client } " using the settings specified on its " { $link irc-profile } "." } ; -HELP: add-listener "Listening to irc channels/users/etc" -{ $values { "irc-listener" "an irc listener object" } { "irc-client" "an irc client object" } } -{ $description "Registers " { $snippet "irc-listener" } " with " { $snippet "irc-client" } " and starts listening." } ; +HELP: attach-chat "Chatting with irc channels/users/etc" +{ $values { "irc-chat" "an irc chat object" } { "irc-client" "an irc client object" } } +{ $description "Registers " { $snippet "irc-chat" } " with " { $snippet "irc-client" } " and starts listening." } ; -HELP: join-irc-channel "Joining channels" -{ $values { "irc-client-listener" "an irc client listener object" } } -{ $description "Joins to the channel being listened by " { $snippet "irc-listener" } "." } ; - -HELP: remove-listener "Stop an unregister listener" -{ $values { "irc-listener" "an irc listener object" } { "irc-client" "an irc client object" } } -{ $description "Unregisters " { $snippet "irc-listener" } " from " { $snippet "irc-client" } " and stops listening. This is how you part from a channel." } ; +HELP: dettach-chat "Stop an unregister chat" +{ $values { "irc-chat" "an irc chat object" } { "irc-client" "an irc client object" } } +{ $description "Unregisters " { $snippet "irc-chat" } " from " { $snippet "irc-client" } " and stops listening. This is how you part from a channel." } ; HELP: terminate-irc "Terminates an irc client" { $values { "irc-client" "an irc client object" } } -{ $description "Terminates all activity by " { $link irc-client } " cleaning up resources and notifying listeners." } ; +{ $description "Terminates all activity by " { $link irc-client } " cleaning up resources and notifying chats." } ; -HELP: write-message "Sends a message through a listener" -{ $values { "message" "a string or irc message object" } { "irc-listener" "an irc listener object" } } -{ $description "Sends " { $snippet "message" } " through " { $snippet "irc-listener" } ". Strings are automatically promoted to privmsg objects." } ; +HELP: speak "Sends a message through a chat" +{ $values { "message" "a string or irc message object" } { "irc-chat" "an irc chat object" } } +{ $description "Sends " { $snippet "message" } " through " { $snippet "irc-chat" } ". Strings are automatically promoted to privmsg objects." } ; -HELP: read-message "Reads a message from a listener" -{ $values { "irc-listener" "an irc listener object" } { "message" "an irc message object" } } -{ $description "Reads " { $snippet "message" } " from " { $snippet "irc-listener" } "." } ; +HELP: hear "Reads a message from a chat" +{ $values { "irc-chat" "an irc chat object" } { "message" "an irc message object" } } +{ $description "Reads " { $snippet "message" } " from " { $snippet "irc-chat" } "." } ; ARTICLE: "irc.client" "IRC Client" "An IRC Client library" { $heading "IRC objects:" } { $subsection irc-client } -{ $heading "Listener objects:" } -{ $subsection irc-server-listener } -{ $subsection irc-channel-listener } -{ $subsection irc-nick-listener } +{ $heading "Chat objects:" } +{ $subsection irc-server-chat } +{ $subsection irc-channel-chat } +{ $subsection irc-nick-chat } { $heading "Setup objects:" } { $subsection irc-profile } { $heading "Words:" } { $subsection connect-irc } { $subsection terminate-irc } -{ $subsection add-listener } -{ $subsection remove-listener } -{ $subsection join-irc-channel } -{ $subsection read-message } -{ $subsection write-message } +{ $subsection attach-chat } +{ $subsection dettach-chat } +{ $subsection hear } +{ $subsection speak } { $heading "IRC messages" } "Some of the RFC defined irc messages as objects:" { $table @@ -77,10 +72,10 @@ ARTICLE: "irc.client" "IRC Client" { $heading "Special messages" } "Some special messages that are created by the library and not by the irc server." { $table - { { $link irc-listener-end } "sent to a listener when it has been dettached from the client, the listener should stop after it receives this message. " } - { { $link irc-end } " sent when the client isn't running anymore, listeners should stop after it receives this message." } - { { $link irc-disconnected } " sent to notify listeners that connection was lost." } - { { $link irc-connected } " sent to notify listeners that a connection with the irc server was established." } } + { { $link irc-chat-end } "sent to a chat when it has been dettached from the client, the chat should stop after it receives this message. " } + { { $link irc-end } " sent when the client isn't running anymore, chats should stop after it receives this message." } + { { $link irc-disconnected } " sent to notify chats that connection was lost." } + { { $link irc-connected } " sent to notify chats that a connection with the irc server was established." } } { $heading "Example:" } { $code @@ -91,16 +86,14 @@ ARTICLE: "irc.client" "IRC Client" "\"irc.freenode.org\" irc-port \"mybot123\" f bot set" "! Connect to the server" "bot get connect-irc" - "! Create a channel listener" - "\"#mychannel123\" mychannel set" - "! Register and start listener (this joins the channel)" - "mychannel get bot get add-listener" - "! Join to the channel" - "mychannel get join-irc-channel" + "! Create a channel chat" + "\"#mychannel123\" mychannel set" + "! Register and start chat (this joins the channel)" + "mychannel get bot get attach-chat" "! Send a message to the channel" - "\"what's up?\" mychannel get write-message" + "\"what's up?\" mychannel get speak" "! Read a message from the channel" - "mychannel get read-message" + "mychannel get hear" } ; diff --git a/extra/irc/client/client-tests.factor b/extra/irc/client/client-tests.factor index acd5a783db..fe85d6c375 100644 --- a/extra/irc/client/client-tests.factor +++ b/extra/irc/client/client-tests.factor @@ -1,5 +1,5 @@ USING: kernel tools.test accessors arrays sequences qualified - io io.streams.duplex namespaces threads + io io.streams.duplex namespaces threads destructors calendar irc.client.private irc.client irc.messages.private concurrency.mailboxes classes assocs combinators ; EXCLUDE: irc.messages => join ; @@ -19,22 +19,23 @@ M: mb-reader stream-readln ( mb-reader -- str/f ) lines>> mailbox-get ; M: mb-writer stream-nl ( mb-writer -- ) [ [ last-line>> concat ] [ lines>> ] bi push ] keep V{ } clone >>last-line drop ; +M: mb-reader dispose drop ; +M: mb-writer dispose drop ; : spawn-client ( -- irc-client ) "someserver" irc-port "factorbot" f + t >>is-ready t >>is-running >>stream dup [ spawn-irc yield ] with-irc-client ; ! to be used inside with-irc-client quotations -: %add-named-listener ( listener -- ) irc> add-listener ; +: %add-named-chat ( chat -- ) irc> attach-chat ; : %push-line ( line -- ) irc> stream>> in>> push-line yield ; -: %join ( channel -- ) - - [ irc> add-listener ] [ join-irc-channel ] bi ; +: %join ( channel -- ) irc> attach-chat ; -: read-matching-message ( listener quot: ( msg -- ? ) -- irc-message ) +: read-matching-message ( chat quot: ( msg -- ? ) -- irc-message ) [ in-messages>> 0.1 seconds ] dip mailbox-get-timeout? ; : with-irc ( quot: ( -- ) -- ) @@ -68,7 +69,8 @@ M: mb-writer stream-nl ( mb-writer -- ) { V{ "NICK factorbot" "USER factorbot hostname servername :irc.factor" } } [ "someserver" irc-port "factorbot" f [ 2drop t ] >>connect - [ connect-irc ] keep stream>> out>> lines>> + [ connect-irc ] keep + stream>> [ in>> [ f ] dip push-line ] [ out>> lines>> ] bi ] unit-test ! Test join @@ -79,7 +81,7 @@ M: mb-writer stream-nl ( mb-writer -- ) ] with-irc [ { join_ "#factortest" } [ - "#factortest" [ %add-named-listener ] keep + "#factortest" [ %add-named-chat ] keep { ":factorbot!n=factorbo@some.where JOIN :#factortest" ":ircserver.net 353 factorbot @ #factortest :@factorbot " ":ircserver.net 366 factorbot #factortest :End of /NAMES list." @@ -91,14 +93,14 @@ M: mb-writer stream-nl ( mb-writer -- ) ] with-irc [ { T{ participant-changed f "somebody" +join+ } } [ - "#factortest" [ %add-named-listener ] keep + "#factortest" [ %add-named-chat ] keep ":somebody!n=somebody@some.where JOIN :#factortest" %push-line [ participant-changed? ] read-matching-message ] unit-test ] with-irc [ { privmsg "#factortest" "hello" } [ - "#factortest" [ %add-named-listener ] keep + "#factortest" [ %add-named-chat ] keep ":somebody!n=somebody@some.where PRIVMSG #factortest :hello" %push-line [ privmsg? ] read-matching-message [ class ] [ name>> ] [ trailing>> ] tri @@ -106,7 +108,7 @@ M: mb-writer stream-nl ( mb-writer -- ) ] with-irc [ { privmsg "factorbot" "hello" } [ - "ircuser" [ %add-named-listener ] keep + "ircuser" [ %add-named-chat ] keep ":ircuser!n=user@isp.net PRIVMSG factorbot :hello" %push-line [ privmsg? ] read-matching-message [ class ] [ name>> ] [ trailing>> ] tri @@ -114,7 +116,7 @@ M: mb-writer stream-nl ( mb-writer -- ) ] with-irc [ { mode } [ - "#factortest" [ %add-named-listener ] keep + "#factortest" [ %add-named-chat ] keep ":ircserver.net MODE #factortest +ns" %push-line [ mode? ] read-matching-message class ] unit-test @@ -122,46 +124,46 @@ M: mb-writer stream-nl ( mb-writer -- ) ! Participant lists tests [ { H{ { "ircuser" +normal+ } } } [ - "#factortest" [ %add-named-listener ] keep + "#factortest" [ %add-named-chat ] keep ":ircuser!n=user@isp.net JOIN :#factortest" %push-line participants>> ] unit-test ] with-irc [ { H{ { "ircuser2" +normal+ } } } [ - "#factortest" + "#factortest" H{ { "ircuser2" +normal+ } { "ircuser" +normal+ } } clone >>participants - [ %add-named-listener ] keep + [ %add-named-chat ] keep ":ircuser!n=user@isp.net PART #factortest" %push-line participants>> ] unit-test ] with-irc [ { H{ { "ircuser2" +normal+ } } } [ - "#factortest" + "#factortest" H{ { "ircuser2" +normal+ } { "ircuser" +normal+ } } clone >>participants - [ %add-named-listener ] keep + [ %add-named-chat ] keep ":ircuser!n=user@isp.net QUIT" %push-line participants>> ] unit-test ] with-irc [ { H{ { "ircuser2" +normal+ } } } [ - "#factortest" + "#factortest" H{ { "ircuser2" +normal+ } { "ircuser" +normal+ } } clone >>participants - [ %add-named-listener ] keep + [ %add-named-chat ] keep ":ircuser2!n=user2@isp.net KICK #factortest ircuser" %push-line participants>> ] unit-test ] with-irc [ { H{ { "ircuser2" +normal+ } } } [ - "#factortest" + "#factortest" H{ { "ircuser" +normal+ } } clone >>participants - [ %add-named-listener ] keep + [ %add-named-chat ] keep ":ircuser!n=user2@isp.net NICK :ircuser2" %push-line participants>> ] unit-test @@ -169,7 +171,7 @@ M: mb-writer stream-nl ( mb-writer -- ) ! Namelist change notification [ { T{ participant-changed f f f f } } [ - "#factortest" [ %add-named-listener ] keep + "#factortest" [ %add-named-chat ] keep ":ircserver.net 353 factorbot @ #factortest :@factorbot " %push-line ":ircserver.net 366 factorbot #factortest :End of /NAMES list." %push-line [ participant-changed? ] read-matching-message @@ -177,18 +179,18 @@ M: mb-writer stream-nl ( mb-writer -- ) ] with-irc [ { T{ participant-changed f "ircuser" +part+ f } } [ - "#factortest" + "#factortest" H{ { "ircuser" +normal+ } } clone >>participants - [ %add-named-listener ] keep + [ %add-named-chat ] keep ":ircuser!n=user@isp.net QUIT" %push-line [ participant-changed? ] read-matching-message ] unit-test ] with-irc [ { T{ participant-changed f "ircuser" +nick+ "ircuser2" } } [ - "#factortest" + "#factortest" H{ { "ircuser" +normal+ } } clone >>participants - [ %add-named-listener ] keep + [ %add-named-chat ] keep ":ircuser!n=user2@isp.net NICK :ircuser2" %push-line [ participant-changed? ] read-matching-message ] unit-test diff --git a/extra/irc/client/client.factor b/extra/irc/client/client.factor index 606a8206da..d40c7d400d 100755 --- a/extra/irc/client/client.factor +++ b/extra/irc/client/client.factor @@ -18,16 +18,16 @@ TUPLE: irc-profile server port nickname password ; C: irc-profile TUPLE: irc-client profile stream in-messages out-messages - listeners is-running nick connect reconnect-time ; + chats is-running nick connect reconnect-time is-ready ; : ( profile -- irc-client ) [ f H{ } clone f ] keep nickname>> - [ latin1 ] 15 seconds irc-client boa ; + [ latin1 ] 15 seconds f irc-client boa ; -TUPLE: irc-listener in-messages client ; -TUPLE: irc-server-listener < irc-listener ; -TUPLE: irc-channel-listener < irc-listener name password timeout participants ; -TUPLE: irc-nick-listener < irc-listener name ; -SYMBOL: +server-listener+ +TUPLE: irc-chat in-messages client ; +TUPLE: irc-server-chat < irc-chat ; +TUPLE: irc-channel-chat < irc-chat name password timeout participants ; +TUPLE: irc-nick-chat < irc-chat name ; +SYMBOL: +server-chat+ ! participant modes SYMBOL: +operator+ @@ -43,18 +43,16 @@ SYMBOL: +part+ SYMBOL: +mode+ SYMBOL: +nick+ -! listener objects -: ( -- irc-listener ) irc-listener boa ; +! chat objects +: ( -- irc-server-chat ) + f irc-server-chat boa ; -: ( -- irc-server-listener ) - f irc-server-listener boa ; - -: ( name -- irc-channel-listener ) +: ( name -- irc-channel-chat ) [ f ] dip f 60 seconds H{ } clone - irc-channel-listener boa ; + irc-channel-chat boa ; -: ( name -- irc-nick-listener ) - [ f ] dip irc-nick-listener boa ; +: ( name -- irc-nick-chat ) + [ f ] dip irc-nick-chat boa ; ! ====================================== ! Message objects @@ -63,15 +61,15 @@ SYMBOL: +nick+ TUPLE: participant-changed nick action parameter ; C: participant-changed -SINGLETON: irc-listener-end ! send to a listener to stop its execution +SINGLETON: irc-chat-end ! sent to a chat to stop its execution SINGLETON: irc-end ! sent when the client isn't running anymore SINGLETON: irc-disconnected ! sent when connection is lost SINGLETON: irc-connected ! sent when connection is established -SINGLETON: irc-ready ! sent after the client is logged in : terminate-irc ( irc-client -- ) [ is-running>> ] keep and [ f >>is-running + [ stream>> dispose ] keep [ in-messages>> ] [ out-messages>> ] bi 2array [ irc-end swap mailbox-put ] each ] when* ; @@ -85,66 +83,65 @@ SYMBOL: current-irc-client ! ====================================== : irc> ( -- irc-client ) current-irc-client get ; -: irc-stream> ( -- stream ) irc> stream>> ; -: irc-write ( s -- ) irc-stream> stream-write ; -: irc-print ( s -- ) irc-stream> [ stream-print ] keep stream-flush ; +: irc-write ( s -- ) irc> stream>> stream-write ; +: irc-print ( s -- ) irc> stream>> [ stream-print ] keep stream-flush ; : irc-send ( irc-message -- ) irc> out-messages>> mailbox-put ; -: listener> ( name -- listener/f ) irc> listeners>> at ; +: chat> ( name -- chat/f ) irc> chats>> at ; : channel-mode? ( mode -- ? ) name>> first "#&" member? ; : me? ( string -- ? ) irc> nick>> = ; -GENERIC: to-listener ( message obj -- ) +GENERIC: to-chat ( message obj -- ) -M: string to-listener - listener> [ +server-listener+ listener> ] unless* - [ to-listener ] [ drop ] if* ; +M: string to-chat + chat> [ +server-chat+ chat> ] unless* + [ to-chat ] [ drop ] if* ; -M: irc-listener to-listener in-messages>> mailbox-put ; +M: irc-chat to-chat in-messages>> mailbox-put ; -: unregister-listener ( name -- ) - irc> listeners>> - [ at [ irc-listener-end ] dip to-listener ] +: unregister-chat ( name -- ) + irc> chats>> + [ at [ irc-chat-end ] dip to-chat ] [ delete-at ] 2bi ; -: (remove-participant) ( nick listener -- ) +: (remove-participant) ( nick chat -- ) [ participants>> delete-at ] - [ [ +part+ f ] dip to-listener ] 2bi ; + [ [ +part+ f ] dip to-chat ] 2bi ; : remove-participant ( nick channel -- ) - listener> [ (remove-participant) ] [ drop ] if* ; + chat> [ (remove-participant) ] [ drop ] if* ; -: listeners-with-participant ( nick -- seq ) - irc> listeners>> values - [ [ irc-channel-listener? ] keep and [ participants>> key? ] [ drop f ] if* ] +: chats-with-participant ( nick -- seq ) + irc> chats>> values + [ [ irc-channel-chat? ] keep and [ participants>> key? ] [ drop f ] if* ] with filter ; -: to-listeners-with-participant ( message nickname -- ) - listeners-with-participant [ to-listener ] with each ; +: to-chats-with-participant ( message nickname -- ) + chats-with-participant [ to-chat ] with each ; : remove-participant-from-all ( nick -- ) - dup listeners-with-participant [ (remove-participant) ] with each ; + dup chats-with-participant [ (remove-participant) ] with each ; -: notify-rename ( newnick oldnick listener -- ) +: notify-rename ( newnick oldnick chat -- ) [ participant-changed new +nick+ >>action - [ (>>nick) ] [ (>>parameter) ] [ ] tri ] dip to-listener ; + [ (>>nick) ] [ (>>parameter) ] [ ] tri ] dip to-chat ; -: rename-participant ( newnick oldnick listener -- ) - [ participants>> [ delete-at* drop ] [ [ swap ] dip set-at ] bi ] +: rename-participant ( newnick oldnick chat -- ) + [ participants>> [ delete-at* drop ] [ swapd set-at ] bi ] [ notify-rename ] 3bi ; : rename-participant-in-all ( oldnick newnick -- ) - swap dup listeners-with-participant [ rename-participant ] with with each ; + swap dup chats-with-participant [ rename-participant ] with with each ; : add-participant ( mode nick channel -- ) - listener> + chat> [ participants>> set-at ] - [ [ +join+ f ] dip to-listener ] 2bi ; + [ [ +join+ f ] dip to-chat ] 2bi ; : change-participant-mode ( channel mode nick -- ) - rot listener> + rot chat> [ participants>> set-at ] - [ [ [ +mode+ ] dip ] dip to-listener ] 3bi ; ! FIXME + [ [ [ +mode+ ] dip ] dip to-chat ] 3bi ; ! FIXME DEFER: me? @@ -174,6 +171,10 @@ DEFER: me? ! Server message handling ! ====================================== +GENERIC: initialize-chat ( chat -- ) +M: irc-chat initialize-chat drop ; +M: irc-channel-chat initialize-chat [ name>> ] [ password>> ] bi /JOIN ; + GENERIC: forward-name ( irc-message -- name ) M: join forward-name trailing>> ; M: part forward-name channel>> ; @@ -187,32 +188,34 @@ UNION: broadcast-forward irc-end irc-disconnected irc-connected ; GENERIC: forward-message ( irc-message -- ) M: irc-message forward-message - +server-listener+ listener> [ to-listener ] [ drop ] if* ; + +server-chat+ chat> [ to-chat ] [ drop ] if* ; -M: single-forward forward-message dup forward-name to-listener ; +M: single-forward forward-message dup forward-name to-chat ; M: multiple-forward forward-message - dup irc-message-sender to-listeners-with-participant ; + dup irc-message-sender to-chats-with-participant ; M: broadcast-forward forward-message - irc> listeners>> values [ to-listener ] with each ; + irc> chats>> values [ to-chat ] with each ; GENERIC: process-message ( irc-message -- ) M: object process-message drop ; -M: logged-in process-message name>> irc> (>>nick) ; +M: logged-in process-message + name>> f irc> [ (>>is-ready) ] [ (>>nick) ] [ chats>> ] tri + values [ initialize-chat ] each ; M: ping process-message trailing>> /PONG ; M: nick-in-use process-message name>> "_" append /NICK ; M: join process-message [ drop +normal+ ] [ irc-message-sender ] [ trailing>> ] tri - dup listener> [ add-participant ] [ 3drop ] if ; + dup chat> [ add-participant ] [ 3drop ] if ; M: part process-message [ irc-message-sender ] [ channel>> ] bi remove-participant ; M: kick process-message [ [ who>> ] [ channel>> ] bi remove-participant ] - [ dup who>> me? [ unregister-listener ] [ drop ] if ] + [ dup who>> me? [ unregister-chat ] [ drop ] if ] bi ; M: quit process-message @@ -235,9 +238,9 @@ M: nick process-message [ >nick/mode 2array ] map >hashtable ; M: names-reply process-message - [ names-reply>participants ] [ channel>> listener> ] bi [ + [ names-reply>participants ] [ channel>> chat> ] bi [ [ (>>participants) ] - [ [ f f f ] dip name>> to-listener ] bi + [ [ f f f ] dip name>> to-chat ] bi ] [ drop ] if* ; ! ====================================== @@ -265,8 +268,8 @@ DEFER: (connect-irc) tri ; ! FIXME: do something with the exception, store somewhere to help debugging -: handle-disconnect ( error -- ) - drop irc> is-running>> [ (handle-disconnect) ] when ; +: handle-disconnect ( error -- ? ) + drop irc> is-running>> [ (handle-disconnect) t ] [ f ] if ; : (reader-loop) ( -- ? ) irc> stream>> [ @@ -278,7 +281,7 @@ DEFER: (connect-irc) ] with-destructors ; : reader-loop ( -- ? ) - [ (reader-loop) ] [ handle-disconnect t ] recover ; + [ (reader-loop) ] [ handle-disconnect ] recover ; : writer-loop ( -- ? ) irc> out-messages>> mailbox-get handle-outgoing-irc ; @@ -300,7 +303,7 @@ DEFER: (connect-irc) [ nip ] } cond ; -GENERIC: annotate-message ( listener object -- object ) +GENERIC: annotate-message ( chat object -- object ) M: object annotate-message nip ; M: part annotate-message swap name>> >>channel ; M: privmsg annotate-message swap name>> >>name ; @@ -312,25 +315,27 @@ M: string annotate-message [ name>> ] dip strings>privmsg ; [ in-multiplexer-loop ] "in-multiplexer-loop" spawn-server 3drop ; -GENERIC: (add-listener) ( irc-listener -- ) +GENERIC: (attach-chat) ( irc-chat -- ) +USE: prettyprint +M: irc-chat (attach-chat) + [ [ irc> >>client ] [ name>> ] bi irc> chats>> set-at ] + [ [ irc> is-ready>> ] dip and [ initialize-chat ] when* ] + bi ; -M: irc-listener (add-listener) - [ irc> >>client ] [ name>> ] bi irc> listeners>> set-at ; +M: irc-server-chat (attach-chat) + irc> >>client +server-chat+ irc> chats>> set-at ; -M: irc-server-listener (add-listener) - irc> >>client +server-listener+ irc> listeners>> set-at ; +GENERIC: (remove-chat) ( irc-chat -- ) -GENERIC: (remove-listener) ( irc-listener -- ) +M: irc-nick-chat (remove-chat) + name>> unregister-chat ; -M: irc-nick-listener (remove-listener) - name>> unregister-listener ; - -M: irc-channel-listener (remove-listener) +M: irc-channel-chat (remove-chat) [ part new annotate-message irc> out-messages>> mailbox-put ] keep - name>> unregister-listener ; + name>> unregister-chat ; -M: irc-server-listener (remove-listener) - drop +server-listener+ unregister-listener ; +M: irc-server-chat (remove-chat) + drop +server-chat+ unregister-chat ; : (connect-irc) ( irc-client -- ) { @@ -348,16 +353,12 @@ PRIVATE> : connect-irc ( irc-client -- ) dup [ [ (connect-irc) ] [ nick>> /LOGIN ] bi spawn-irc ] with-irc-client ; -: add-listener ( irc-listener irc-client -- ) - swap '[ _ (add-listener) ] with-irc-client ; +: attach-chat ( irc-chat irc-client -- ) [ (attach-chat) ] with-irc-client ; -: remove-listener ( irc-listener -- ) - [ client>> ] keep '[ _ (remove-listener) ] with-irc-client ; +: dettach-chat ( irc-chat -- ) + [ client>> ] keep '[ _ (remove-chat) ] with-irc-client ; -: join-irc-channel ( irc-channel-listener -- ) - dup client>> [ [ name>> ] [ password>> ] bi /JOIN ] with-irc-client ; - -: write-message ( message irc-listener -- ) +: speak ( message irc-chat -- ) [ swap annotate-message ] [ client>> out-messages>> mailbox-put ] bi ; -: read-message ( irc-listener -- message ) in-messages>> mailbox-get ; +: hear ( irc-chat -- message ) in-messages>> mailbox-get ; From 14dcf83993495b41e30c4a65aa42019af4d57ccc Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Sun, 5 Oct 2008 21:33:53 -0200 Subject: [PATCH 080/244] irc.ui: Update to work with the latest irc.client changes --- extra/irc/ui/commands/commands.factor | 4 +-- extra/irc/ui/ui.factor | 44 ++++++++++++--------------- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/extra/irc/ui/commands/commands.factor b/extra/irc/ui/commands/commands.factor index 184a2b4de8..4bb77e7490 100755 --- a/extra/irc/ui/commands/commands.factor +++ b/extra/irc/ui/commands/commands.factor @@ -8,7 +8,7 @@ IN: irc.ui.commands : say ( string -- ) irc-tab get [ window>> client>> profile>> nickname>> print-irc ] - [ listener>> write-message ] 2bi ; + [ chat>> speak ] 2bi ; : join ( string -- ) irc-tab get window>> join-channel ; @@ -18,7 +18,7 @@ IN: irc.ui.commands : whois ( string -- ) "WHOIS" swap { } clone swap - irc-tab get listener>> write-message ; + irc-tab get listener>> speak ; : quote ( string -- ) drop ; ! THIS WILL CHANGE diff --git a/extra/irc/ui/ui.factor b/extra/irc/ui/ui.factor index c171fef0b6..50dc9378a2 100755 --- a/extra/irc/ui/ui.factor +++ b/extra/irc/ui/ui.factor @@ -15,7 +15,7 @@ RENAME: join sequences => sjoin IN: irc.ui -SYMBOL: listener +SYMBOL: chat SYMBOL: client @@ -24,7 +24,7 @@ TUPLE: ui-window < tabbed client ; M: ui-window ungraft* client>> terminate-irc ; -TUPLE: irc-tab < frame listener client window ; +TUPLE: irc-tab < frame chat client window ; : write-color ( str color -- ) foreground associate format ; @@ -117,7 +117,7 @@ M: irc-disconnected write-irc M: irc-connected write-irc drop "* Connected" dark-green write-color ; -M: irc-listener-end write-irc +M: irc-chat-end write-irc drop ; M: irc-message write-irc @@ -135,7 +135,7 @@ M: object time-happened drop now ; : send-message ( message -- ) [ print-irc ] - [ listener get write-message ] bi ; + [ chat get speak ] bi ; GENERIC: handle-inbox ( tab message -- ) @@ -150,7 +150,7 @@ M: object handle-inbox : display ( stream tab -- ) '[ _ [ [ t ] - [ _ dup listener>> read-message handle-inbox ] + [ _ dup chat>> hear handle-inbox ] [ ] while ] with-output-stream ] "ircv" spawn drop ; : ( tab -- tab pane ) @@ -175,33 +175,28 @@ irc-editor "general" f { { T{ key-down f f "ENTER" } editor-send } } define-command-map -: new-irc-tab ( listener ui-window class -- irc-tab ) +: new-irc-tab ( chat ui-window class -- irc-tab ) new-frame swap >>window - swap >>listener + swap >>chat [ @center grid-add ] keep @bottom grid-add ; -GENERIC: init-listener ( listener -- ) -M: object init-listener drop ; -M: irc-channel-listener init-listener join-irc-channel ; - M: irc-tab graft* - [ listener>> dup ] [ window>> client>> ] bi add-listener - init-listener ; + [ chat>> ] [ window>> client>> ] bi attach-chat ; M: irc-tab ungraft* - listener>> remove-listener ; + chat>> dettach-chat ; TUPLE: irc-channel-tab < irc-tab userlist ; -: ( listener ui-window -- irc-tab ) +: ( chat ui-window -- irc-tab ) irc-channel-tab new-irc-tab [ @right grid-add ] keep >>userlist ; : update-participants ( tab -- ) [ userlist>> [ clear-gadget ] keep ] - [ listener>> participants>> ] bi + [ chat>> participants>> ] bi [ +operator+ value-labels dark-green add-gadget-color ] [ +voice+ value-labels blue add-gadget-color ] [ +normal+ value-labels black add-gadget-color ] tri drop ; @@ -211,22 +206,22 @@ M: participant-changed handle-inbox TUPLE: irc-server-tab < irc-tab ; -: ( listener -- irc-tab ) +: ( chat -- irc-tab ) f irc-server-tab new-irc-tab ; -: ( listener ui-window -- irc-tab ) +: ( chat ui-window -- irc-tab ) irc-tab new-irc-tab ; M: irc-tab pref-dim* drop { 480 480 } ; : join-channel ( name ui-window -- ) - [ dup ] dip + [ dup ] dip [ swap ] keep add-page ; : query-nick ( nick ui-window -- ) - [ dup ] dip + [ dup ] dip [ swap ] keep add-page ; @@ -237,16 +232,15 @@ M: irc-tab pref-dim* : ui-connect ( profile -- ui-window ) - { [ [ ] dip add-listener ] - [ listeners>> +server-listener+ swap at dup + { [ [ ] dip attach-chat ] + [ chats>> +server-chat+ swap at dup "Server" associate ui-window new-tabbed [ swap (>>window) ] keep ] [ >>client ] [ connect-irc ] } cleave ; : server-open ( server port nick password channels -- ) - [ ui-connect [ irc-window ] keep ] dip 2drop ; -! FIXME: should join channels only after we have been logged in -! [ over join-channel ] each drop ; + [ ui-connect [ irc-window ] keep ] dip + [ over join-channel ] each drop ; : main-run ( -- ) run-ircui ; From a30dbec5fba4d68bd67c96bc450994c06564eb16 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 5 Oct 2008 18:36:56 -0500 Subject: [PATCH 081/244] remove dead code, add copyright --- basis/unicode/breaks/breaks.factor | 2 ++ basis/unicode/case/case.factor | 13 ++----------- basis/unicode/categories/categories.factor | 2 ++ basis/unicode/collation/collation.factor | 2 ++ basis/unicode/data/data.factor | 2 ++ basis/unicode/normalize/normalize.factor | 2 ++ basis/unicode/script/script.factor | 2 ++ basis/unicode/syntax/syntax.factor | 2 ++ 8 files changed, 16 insertions(+), 11 deletions(-) diff --git a/basis/unicode/breaks/breaks.factor b/basis/unicode/breaks/breaks.factor index 6aa3e60647..0f2e12119d 100644 --- a/basis/unicode/breaks/breaks.factor +++ b/basis/unicode/breaks/breaks.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Daniel Ehrenberg. +! See http://factorcode.org/license.txt for BSD license. USING: combinators.short-circuit unicode.categories kernel math combinators splitting sequences math.parser io.files io assocs arrays namespaces make math.ranges unicode.normalize values diff --git a/basis/unicode/case/case.factor b/basis/unicode/case/case.factor index 5e961e2d67..3def7b5f48 100644 --- a/basis/unicode/case/case.factor +++ b/basis/unicode/case/case.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Daniel Ehrenberg. +! See http://factorcode.org/license.txt for BSD license. USING: unicode.data sequences sequences.next namespaces make unicode.normalize math unicode.categories combinators assocs strings splitting kernel accessors ; @@ -70,17 +72,6 @@ SYMBOL: locale ! Just casing locale, or overall? : final-sigma ( string -- string ) HEX: 3A3 over member? [ sigma-map ] when ; -! : map-case ( string string-quot char-quot -- case ) -! [ -! rot [ -! -rot [ -! rot dup special-casing at -! [ -rot drop call % ] -! [ -rot nip call , ] ?if -! ] 2keep -! ] each 2drop -! ] "" make ; inline - : map-case ( string string-quot char-quot -- case ) [ [ diff --git a/basis/unicode/categories/categories.factor b/basis/unicode/categories/categories.factor index 4ba96fb9c4..0464e31b12 100644 --- a/basis/unicode/categories/categories.factor +++ b/basis/unicode/categories/categories.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Daniel Ehrenberg. +! See http://factorcode.org/license.txt for BSD license. USING: unicode.syntax ; IN: unicode.categories diff --git a/basis/unicode/collation/collation.factor b/basis/unicode/collation/collation.factor index 65786ede5d..7f445b8513 100644 --- a/basis/unicode/collation/collation.factor +++ b/basis/unicode/collation/collation.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Daniel Ehrenberg. +! See http://factorcode.org/license.txt for BSD license. USING: combinators.short-circuit sequences io.files io.encodings.ascii kernel values splitting accessors math.parser ascii io assocs strings math namespaces make sorting combinators diff --git a/basis/unicode/data/data.factor b/basis/unicode/data/data.factor index cd54b93f2a..31d0be799f 100644 --- a/basis/unicode/data/data.factor +++ b/basis/unicode/data/data.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Daniel Ehrenberg. +! See http://factorcode.org/license.txt for BSD license. USING: combinators.short-circuit assocs math kernel sequences io.files hashtables quotations splitting grouping arrays math.parser hash2 math.order byte-arrays words namespaces words diff --git a/basis/unicode/normalize/normalize.factor b/basis/unicode/normalize/normalize.factor index 53a38faed4..8d6f6e888a 100644 --- a/basis/unicode/normalize/normalize.factor +++ b/basis/unicode/normalize/normalize.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Daniel Ehrenberg. +! See http://factorcode.org/license.txt for BSD license. USING: sequences namespaces make unicode.data kernel math arrays locals sorting.insertion accessors ; IN: unicode.normalize diff --git a/basis/unicode/script/script.factor b/basis/unicode/script/script.factor index 103beb4d2a..9691797128 100644 --- a/basis/unicode/script/script.factor +++ b/basis/unicode/script/script.factor @@ -1,3 +1,5 @@ +! 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 namespaces make byte-arrays locals math sets io.encodings.ascii diff --git a/basis/unicode/syntax/syntax.factor b/basis/unicode/syntax/syntax.factor index 1ba76fd380..bf4610ab0d 100644 --- a/basis/unicode/syntax/syntax.factor +++ b/basis/unicode/syntax/syntax.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Daniel Ehrenberg. +! See http://factorcode.org/license.txt for BSD license. USING: unicode.data kernel math sequences parser lexer bit-arrays namespaces make sequences.private arrays quotations assocs classes.predicate math.order eval ; From 46c3f0def1ca86400df0ce7c82f2ed6ee8ef1a49 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 5 Oct 2008 20:31:48 -0500 Subject: [PATCH 082/244] Remove unused error class --- basis/random/random.factor | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/basis/random/random.factor b/basis/random/random.factor index 8a69b28171..b5f8ac48b8 100644 --- a/basis/random/random.factor +++ b/basis/random/random.factor @@ -51,13 +51,12 @@ M: sequence random ( seq -- elt ) [ length random-integer ] keep nth ] if-empty ; -ERROR: negative-random n ; M: integer random ( integer -- integer' ) - { - { [ dup 0 = ] [ ] } - { [ dup 0 < ] [ neg random-integer neg ] } - [ random-integer ] - } cond ; + dup sgn { + { 0 [ ] } + { -1 [ neg random-integer neg ] } + { 1 [ random-integer ] } + } case ; : delete-random ( seq -- elt ) [ length random-integer ] keep [ nth ] 2keep delete-nth ; From d5112a0ced6aebdde1cd76e388a1632cb352f1de Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 5 Oct 2008 21:30:29 -0500 Subject: [PATCH 083/244] Working on stack frame cleanup --- basis/compiler/generator/generator.factor | 7 +- .../cpu/ppc/architecture/architecture.factor | 27 ++--- basis/cpu/x86/32/32.factor | 106 ++++++++---------- basis/cpu/x86/64/64.factor | 32 +++--- .../cpu/x86/architecture/architecture.factor | 14 ++- 5 files changed, 88 insertions(+), 98 deletions(-) diff --git a/basis/compiler/generator/generator.factor b/basis/compiler/generator/generator.factor index 0a9885357e..2b398eaeea 100644 --- a/basis/compiler/generator/generator.factor +++ b/basis/compiler/generator/generator.factor @@ -296,16 +296,13 @@ M: #return-recursive generate-node : return-size ( ctype -- n ) #! Amount of space we reserve for a return value. - dup large-struct? [ heap-size ] [ drop 0 ] if ; + dup large-struct? [ heap-size ] [ drop 2 cells ] if ; : alien-stack-frame ( params -- n ) alien-parameters parameter-sizes drop ; : alien-invoke-frame ( params -- n ) - #! Two cells for temporary storage, temp@ and on x86.64, - #! small struct return value unpacking - [ return>> return-size ] [ alien-stack-frame ] bi - + 2 cells + ; + [ return>> return-size ] [ alien-stack-frame ] bi + ; : set-stack-frame ( n -- ) dup [ frame-required ] when* \ stack-frame set ; diff --git a/basis/cpu/ppc/architecture/architecture.factor b/basis/cpu/ppc/architecture/architecture.factor index 80ee1802e1..aab104fa6e 100644 --- a/basis/cpu/ppc/architecture/architecture.factor +++ b/basis/cpu/ppc/architecture/architecture.factor @@ -44,7 +44,7 @@ IN: cpu.ppc.architecture : xt-save ( n -- i ) 2 cells - ; M: ppc stack-frame ( n -- i ) - local@ factor-area-size + 4 cells align ; + local@ factor-area-size + cell + 4 cells align ; M: temp-reg v>operand drop 11 ; @@ -166,11 +166,13 @@ M: float-regs %load-param-reg >r 1 rot local@ r> LF ; M: stack-params %load-param-reg ( stack reg reg-class -- ) drop >r 0 1 rot local@ LWZ 0 1 r> param@ STW ; +: next-param@ ( n -- x ) param@ stack-frame* + ; + 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 param@ stack-frame* + LWZ + 0 1 rot next-param@ LWZ 0 1 rot local@ STW ; M: ppc %prepare-unbox ( -- ) @@ -197,10 +199,8 @@ M: ppc %unbox-long-long ( n func -- ) M: ppc %unbox-large-struct ( n c-type -- ) ! Value must be in r3 - ! Compute destination address - 4 1 roll local@ ADDI - ! Load struct size - heap-size 5 LI + ! Compute destination address and load struct size + [ 4 1 rot local@ ADDI ] [ heap-size 5 LI ] bi* ! Call the function "to_value_struct" f %alien-invoke ; @@ -218,9 +218,8 @@ M: ppc %box-long-long ( n func -- ) 4 1 rot cell + local@ LWZ ] when* r> f %alien-invoke ; -: temp@ ( m -- n ) stack-frame* factor-area-size - swap - ; - -: struct-return@ ( size n -- n ) [ local@ ] [ temp@ ] ?if ; +: struct-return@ ( size n -- n ) + [ local@ ] [ stack-frame* factor-area-size - swap - ] ?if ; M: ppc %prepare-box-struct ( size -- ) #! Compute target address for value struct return @@ -231,10 +230,8 @@ M: ppc %box-large-struct ( n c-type -- ) #! If n = f, then we're boxing a returned struct heap-size [ swap struct-return@ ] keep - ! Compute destination address - 3 1 roll ADDI - ! Load struct size - 4 LI + ! Compute destination address and load struct size + [ 3 1 rot ADDI ] [ 4 LI ] bi* ! Call the function "box_value_struct" f %alien-invoke ; @@ -256,10 +253,10 @@ M: ppc %alien-callback ( quot -- ) M: ppc %prepare-alien-indirect ( -- ) "unbox_alien" f %alien-invoke - 3 1 cell temp@ STW ; + 3 11 MR ; M: ppc %alien-indirect ( -- ) - 11 1 cell temp@ LWZ (%call) ; + (%call) ; M: ppc %callback-value ( ctype -- ) ! Save top of data stack diff --git a/basis/cpu/x86/32/32.factor b/basis/cpu/x86/32/32.factor index 50d8025b38..1173b9e68e 100644 --- a/basis/cpu/x86/32/32.factor +++ b/basis/cpu/x86/32/32.factor @@ -1,13 +1,12 @@ ! Copyright (C) 2005, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien.c-types arrays cpu.x86.assembler +USING: locals alien.c-types arrays cpu.x86.assembler cpu.x86.architecture cpu.x86.intrinsics cpu.x86.allot cpu.architecture kernel kernel.private math namespaces sequences -stack-checker.known-words -compiler.generator.registers compiler.generator.fixup -compiler.generator system layouts combinators -command-line compiler compiler.units io vocabs.loader accessors -init ; +stack-checker.known-words compiler.generator.registers +compiler.generator.fixup compiler.generator system layouts +combinators command-line compiler compiler.units io +vocabs.loader accessors init ; IN: cpu.x86.32 ! We implement the FFI for Linux, OS X and Windows all at once. @@ -18,7 +17,6 @@ IN: cpu.x86.32 M: x86.32 ds-reg ESI ; M: x86.32 rs-reg EDI ; M: x86.32 stack-reg ESP ; -M: x86.32 stack-save-reg EDX ; M: x86.32 temp-reg-1 EAX ; M: x86.32 temp-reg-2 ECX ; @@ -32,15 +30,20 @@ M: x86.32 struct-small-enough? ( size -- ? ) heap-size { 1 2 4 8 } member? os { linux netbsd solaris } member? not and ; +: struct-return@ ( size n -- operand ) + [ next-stack@ ] [ \ stack-frame get swap - stack@ ] ?if ; + ! On x86, parameters are never passed in registers. M: int-regs return-reg drop EAX ; M: int-regs param-regs drop { } ; M: int-regs vregs drop { EAX ECX EDX EBP } ; M: int-regs push-return-reg return-reg PUSH ; -: load/store-int-return ( n reg-class -- src dst ) - return-reg stack-reg rot [+] ; -M: int-regs load-return-reg load/store-int-return MOV ; -M: int-regs store-return-reg load/store-int-return swap MOV ; + +M: int-regs load-return-reg + return-reg swap next-stack@ MOV ; + +M: int-regs store-return-reg + [ stack@ ] [ return-reg ] bi* MOV ; M: float-regs param-regs drop { } ; M: float-regs vregs drop { XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 } ; @@ -48,14 +51,16 @@ M: float-regs vregs drop { XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 } ; : FSTP ( operand size -- ) 4 = [ FSTPS ] [ FSTPL ] if ; M: float-regs push-return-reg - stack-reg swap reg-size [ SUB stack-reg [] ] keep FSTP ; + stack-reg swap reg-size + [ SUB ] [ [ [] ] dip FSTP ] 2bi ; : FLD ( operand size -- ) 4 = [ FLDS ] [ FLDL ] if ; -: load/store-float-return ( n reg-class -- op size ) - [ stack@ ] [ reg-size ] bi* ; -M: float-regs load-return-reg load/store-float-return FLD ; -M: float-regs store-return-reg load/store-float-return FSTP ; +M: float-regs load-return-reg + [ next-stack@ ] [ reg-size ] bi* FLD ; + +M: float-regs store-return-reg + [ stack@ ] [ reg-size ] bi* FSTP ; : align-sub ( n -- ) dup 16 align swap - ESP swap SUB ; @@ -64,7 +69,8 @@ M: float-regs store-return-reg load/store-float-return FSTP ; 16 align ESP swap ADD ; : with-aligned-stack ( n quot -- ) - swap dup align-sub slip align-add ; inline + [ [ align-sub ] [ call ] bi* ] + [ [ align-add ] [ drop ] bi* ] 2bi ; inline M: x86.32 fixnum>slot@ 1 SHR ; @@ -77,57 +83,40 @@ M: object %load-param-reg 3drop ; M: object %save-param-reg 3drop ; -: box@ ( n reg-class -- stack@ ) - #! Used for callbacks; we want to box the values given to - #! us by the C function caller. Computes stack location of - #! nth parameter; note that we must go back one more stack - #! frame, since %box sets one up to call the one-arg boxer - #! function. The size of this stack frame so far depends on - #! the reg-class of the boxer's arg. - reg-size neg + stack-frame* + 20 + ; - : (%box) ( n reg-class -- ) #! If n is f, push the return register onto the stack; we #! are boxing a return value of a C function. If n is an #! integer, push [ESP+n] on the stack; we are boxing a #! parameter being passed to a callback from C. - over [ [ box@ ] keep [ load-return-reg ] keep ] [ nip ] if - push-return-reg ; + over [ load-return-reg ] [ 2drop ] if ; -M: x86.32 %box ( n reg-class func -- ) - over reg-size [ - >r (%box) r> f %alien-invoke +M:: x86.32 %box ( n reg-class func -- ) + n reg-class (%box) + reg-class reg-size [ + reg-class push-return-reg + func f %alien-invoke ] with-aligned-stack ; : (%box-long-long) ( n -- ) - #! If n is f, push the return registers onto the stack; we - #! are boxing a return value of a C function. If n is an - #! integer, push [ESP+n]:[ESP+n+4] on the stack; we are - #! boxing a parameter being passed to a callback from C. [ - int-regs box@ - EDX over stack@ MOV - EAX swap cell - stack@ MOV - ] when* - EDX PUSH - EAX PUSH ; + EDX over next-stack@ MOV + EAX swap cell - next-stack@ MOV + ] when* ; M: x86.32 %box-long-long ( n func -- ) + [ (%box-long-long) ] dip 8 [ - [ (%box-long-long) ] [ f %alien-invoke ] bi* + EDX PUSH + EAX PUSH + f %alien-invoke ] with-aligned-stack ; -: struct-return@ ( size n -- n ) - [ stack-frame* cell + + ] [ \ stack-frame get swap - ] ?if ; - -M: x86.32 %box-large-struct ( n c-type -- ) +M:: x86.32 %box-large-struct ( n c-type -- ) ! Compute destination address - heap-size - [ swap struct-return@ ] keep - ECX ESP roll [+] LEA + ECX c-type heap-size n struct-return@ LEA 8 [ ! Push struct size - PUSH + c-type heap-size PUSH ! Push destination address ECX PUSH ! Copy the struct from the C stack @@ -136,9 +125,9 @@ M: x86.32 %box-large-struct ( n c-type -- ) M: x86.32 %prepare-box-struct ( size -- ) ! Compute target address for value struct return - EAX ESP rot f struct-return@ [+] LEA + EAX swap f struct-return@ LEA ! Store it as the first parameter - ESP [] EAX MOV ; + 0 stack@ EAX MOV ; M: x86.32 %box-small-struct ( c-type -- ) #! Box a <= 8-byte struct returned in EAX:EDX. OS X only. @@ -207,13 +196,12 @@ M: x86 %unbox-small-struct ( size -- ) } case ; M: x86.32 %unbox-large-struct ( n c-type -- ) - #! Alien must be in EAX. - heap-size + ! Alien must be in EAX. ! Compute destination address - ECX ESP roll [+] LEA + ECX rot stack@ LEA 12 [ ! Push struct size - PUSH + heap-size PUSH ! Push destination address ECX PUSH ! Push source address @@ -224,10 +212,10 @@ M: x86.32 %unbox-large-struct ( n c-type -- ) M: x86.32 %prepare-alien-indirect ( -- ) "unbox_alien" f %alien-invoke - cell temp@ EAX MOV ; + EBP EAX MOV ; M: x86.32 %alien-indirect ( -- ) - cell temp@ CALL ; + EBP CALL ; M: x86.32 %alien-callback ( quot -- ) 4 [ @@ -239,7 +227,7 @@ M: x86.32 %alien-callback ( quot -- ) M: x86.32 %callback-value ( ctype -- ) ! Align C stack ESP 12 SUB - ! Save top of data stack + ! Save top of data stack in non-volatile register %prepare-unbox EAX PUSH ! Restore data/call/retain stacks diff --git a/basis/cpu/x86/64/64.factor b/basis/cpu/x86/64/64.factor index 01b8935e39..8c9762630b 100644 --- a/basis/cpu/x86/64/64.factor +++ b/basis/cpu/x86/64/64.factor @@ -12,7 +12,6 @@ IN: cpu.x86.64 M: x86.64 ds-reg R14 ; M: x86.64 rs-reg R15 ; M: x86.64 stack-reg RSP ; -M: x86.64 stack-save-reg RSI ; M: x86.64 temp-reg-1 RAX ; M: x86.64 temp-reg-2 RCX ; @@ -46,7 +45,9 @@ M: stack-params %load-param-reg r> stack@ R11 MOV ; M: stack-params %save-param-reg - >r stack-frame* + cell + swap r> %load-param-reg ; + drop + R11 swap next-stack@ MOV + stack@ R11 MOV ; : with-return-regs ( quot -- ) [ @@ -121,7 +122,7 @@ M: x86.64 %unbox-large-struct ( n c-type -- ) ! Source is in RDI heap-size ! Load destination address - RSI RSP roll [+] LEA + RSI rot stack@ LEA ! Load structure size RDX swap MOV ! Copy the struct to the C stack @@ -145,7 +146,7 @@ M: x86.64 %box-long-long ( n func -- ) M: x86.64 struct-small-enough? ( size -- ? ) heap-size 2 cells <= ; -: box-struct-field@ ( i -- operand ) RSP swap 1+ cells [+] ; +: box-struct-field@ ( i -- operand ) 1+ cells stack@ ; : %box-struct-field ( c-type i -- ) box-struct-field@ swap reg-class>> { @@ -164,21 +165,22 @@ M: x86.64 %box-small-struct ( c-type -- ) ] with-return-regs ; : struct-return@ ( size n -- n ) - [ ] [ \ stack-frame get swap - ] ?if ; + [ ] [ \ stack-frame get swap - ] ?if stack@ ; M: x86.64 %box-large-struct ( n c-type -- ) ! Struct size is parameter 2 heap-size RSI over MOV ! Compute destination address - swap struct-return@ RDI RSP rot [+] LEA + RDI spin struct-return@ LEA ! Copy the struct from the C stack "box_value_struct" f %alien-invoke ; M: x86.64 %prepare-box-struct ( size -- ) - ! Compute target address for value struct return - RAX RSP rot f struct-return@ [+] LEA - RSP 0 [+] RAX MOV ; + ! Compute target address for value struct return, store it + ! as the first parameter + RAX swap f struct-return@ LEA + 0 stack@ RAX MOV ; M: x86.64 %prepare-var-args RAX RAX XOR ; @@ -192,10 +194,10 @@ M: x86.64 %alien-invoke M: x86.64 %prepare-alien-indirect ( -- ) "unbox_alien" f %alien-invoke - cell temp@ RAX MOV ; + RBP RAX MOV ; M: x86.64 %alien-indirect ( -- ) - cell temp@ CALL ; + RBP CALL ; M: x86.64 %alien-callback ( quot -- ) RDI load-indirect "c_to_factor" f %alien-invoke ; @@ -203,12 +205,14 @@ M: x86.64 %alien-callback ( quot -- ) M: x86.64 %callback-value ( ctype -- ) ! Save top of data stack %prepare-unbox - ! Put former top of data stack in RDI - cell temp@ RDI MOV + ! Save top of data stack + RSP 8 SUB + RDI PUSH ! Restore data/call/retain stacks "unnest_stacks" f %alien-invoke ! Put former top of data stack in RDI - RDI cell temp@ MOV + RDI POP + RSP 8 ADD ! Unbox former top of data stack to return registers unbox-return ; diff --git a/basis/cpu/x86/architecture/architecture.factor b/basis/cpu/x86/architecture/architecture.factor index c97552a649..4770400434 100644 --- a/basis/cpu/x86/architecture/architecture.factor +++ b/basis/cpu/x86/architecture/architecture.factor @@ -10,10 +10,16 @@ IN: cpu.x86.architecture HOOK: ds-reg cpu ( -- reg ) HOOK: rs-reg cpu ( -- reg ) HOOK: stack-reg cpu ( -- reg ) -HOOK: stack-save-reg cpu ( -- reg ) : stack@ ( n -- op ) stack-reg swap [+] ; +: next-stack@ ( n -- operand ) + #! nth parameter from the next stack frame. Used to box + #! input values to callbacks; the callback has its own + #! stack frame set up, and we want to read the frame + #! set up by the caller. + stack-frame* + cell + stack@ ; + : reg-stack ( n reg -- op ) swap cells neg [+] ; M: ds-loc v>operand n>> ds-reg reg-stack ; @@ -32,8 +38,8 @@ M: float-regs %save-param-reg >r >r stack@ r> r> MOVSS/D ; M: float-regs %load-param-reg >r swap stack@ r> MOVSS/D ; GENERIC: push-return-reg ( reg-class -- ) -GENERIC: load-return-reg ( stack@ reg-class -- ) -GENERIC: store-return-reg ( stack@ reg-class -- ) +GENERIC: load-return-reg ( n reg-class -- ) +GENERIC: store-return-reg ( n reg-class -- ) ! Only used by inline allocation HOOK: temp-reg-1 cpu ( -- reg ) @@ -137,8 +143,6 @@ M: x86 small-enough? ( n -- ? ) : %tag-fixnum ( reg -- ) tag-bits get SHL ; -: temp@ ( n -- op ) stack-reg \ stack-frame get rot - [+] ; - M: x86 %return ( -- ) 0 %unwind ; ! Alien intrinsics From cf135e08b382e63c43f44905492ccc1598457556 Mon Sep 17 00:00:00 2001 From: "U-SLAVA-DFB8FF805\\Slava" Date: Sun, 5 Oct 2008 22:00:35 -0500 Subject: [PATCH 084/244] Tweak deploy descriptor to speed up tools.deploy test --- basis/tools/deploy/test/6/deploy.factor | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/basis/tools/deploy/test/6/deploy.factor b/basis/tools/deploy/test/6/deploy.factor index 410bb770be..e7d3764d39 100644 --- a/basis/tools/deploy/test/6/deploy.factor +++ b/basis/tools/deploy/test/6/deploy.factor @@ -1,15 +1,15 @@ USING: tools.deploy.config ; H{ - { deploy-threads? f } - { deploy-ui? f } - { deploy-io 1 } - { deploy-c-types? f } - { deploy-name "tools.deploy.test.6" } - { deploy-compiler? t } { deploy-reflection 1 } { deploy-word-props? f } + { deploy-io 1 } + { deploy-name "tools.deploy.test.6" } + { deploy-math? t } + { deploy-random? f } + { deploy-compiler? t } + { deploy-ui? f } + { deploy-c-types? f } { deploy-word-defs? f } { "stop-after-last-window?" t } - { deploy-random? f } - { deploy-math? f } + { deploy-threads? f } } From 66ae62638d74f983d923ba08daef139b64be838c Mon Sep 17 00:00:00 2001 From: "U-SLAVA-DFB8FF805\\Slava" Date: Sun, 5 Oct 2008 22:00:52 -0500 Subject: [PATCH 085/244] Fix Windows deployment --- basis/tools/deploy/shaker/shaker.factor | 2 +- basis/tools/deploy/windows/windows.factor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 basis/tools/deploy/shaker/shaker.factor mode change 100644 => 100755 basis/tools/deploy/windows/windows.factor diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor old mode 100644 new mode 100755 index 7c02e87209..d9348bedd5 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -321,7 +321,7 @@ IN: tools.deploy.shaker ] [ drop ] if ; : strip-c-io ( -- ) - deploy-io get 2 = [ + deploy-io get 2 = os windows? or [ [ c-io-backend forget "io.streams.c" forget-vocab diff --git a/basis/tools/deploy/windows/windows.factor b/basis/tools/deploy/windows/windows.factor old mode 100644 new mode 100755 index ce4fee19d7..ad1b3cbd84 --- a/basis/tools/deploy/windows/windows.factor +++ b/basis/tools/deploy/windows/windows.factor @@ -14,7 +14,7 @@ IN: tools.deploy.windows "resource:freetype6.dll" "resource:zlib1.dll" } swap copy-files-into - ] when ; + ] [ drop ] if ; : create-exe-dir ( vocab bundle-name -- vm ) deploy-ui? get [ From 0cfedcdc8d788064abc544eeea946b41cc8b4fde Mon Sep 17 00:00:00 2001 From: "U-SLAVA-DFB8FF805\\Slava" Date: Sun, 5 Oct 2008 22:08:13 -0500 Subject: [PATCH 086/244] Fix deploy size regresson --- basis/random/random-docs.factor | 22 +++++++++++----------- basis/random/random.factor | 15 +++------------ 2 files changed, 14 insertions(+), 23 deletions(-) mode change 100644 => 100755 basis/random/random-docs.factor mode change 100644 => 100755 basis/random/random.factor diff --git a/basis/random/random-docs.factor b/basis/random/random-docs.factor old mode 100644 new mode 100755 index 51656a77dd..18c9ca781c --- a/basis/random/random-docs.factor +++ b/basis/random/random-docs.factor @@ -15,21 +15,18 @@ HELP: random-bytes* { $description "Generates a byte-array of random bytes." } ; HELP: random -{ $values { "obj" object } { "elt" "a random element" } } -{ $description "Outputs a random element of the input object. If the object is an integer, an input of zero always returns a zero, while any other integer integers yield a random integer in the interval between itself and zero, inclusive of zero. On a sequence, an empty sequence always outputs " { $link f } "." } +{ $values { "seq" sequence } { "elt" "a random element" } } +{ $description "Outputs a random element of the input sequence. Outputs " { $link f } " if the sequence is empty." } +{ $notes "Since integers are sequences, passing an integer " { $snippet "n" } " outputs an integer in the interval " { $snippet "[0,n)" } "." } { $examples { $unchecked-example "USING: random prettyprint ;" "10 random ." "3" } - { $example "USING: random prettyprint ;" - "0 random ." - "0" } { $unchecked-example "USING: random prettyprint ;" - "-10 random ." - "-8" } - { $unchecked-example "USING: random prettyprint ;" - "{ \"a\" \"b\" \"c\" } random ." - "\"a\"" } + "SYMBOL: heads" + "SYMBOL: tails" + "{ heads tails } random ." + "heads" } } ; HELP: random-bytes @@ -74,7 +71,10 @@ ARTICLE: "random-protocol" "Random protocol" { $subsection seed-random } ; ARTICLE: "random" "Generating random integers" -"The " { $vocab-link "random" } " vocabulary contains a protocol for generating random or pseudorandom numbers. The ``Mersenne Twister'' pseudorandom number generator algorithm is the default generator stored in " { $link random-generator } "." +"The " { $vocab-link "random" } " vocabulary contains a protocol for generating random or pseudorandom numbers." +$nl +"The ``Mersenne Twister'' pseudorandom number generator algorithm is the default generator stored in " { $link random-generator } "." +$nl "Generate a random object:" { $subsection random } "Combinators to change the random number generator:" diff --git a/basis/random/random.factor b/basis/random/random.factor old mode 100644 new mode 100755 index b5f8ac48b8..845f8e004f --- a/basis/random/random.factor +++ b/basis/random/random.factor @@ -33,10 +33,6 @@ M: f random-32* ( obj -- * ) no-random-number-generator ; random-generator get random-bytes* ] keep head ; -GENERIC: random ( obj -- elt ) - -: random-bits ( n -- r ) 2^ random ; - -M: sequence random ( seq -- elt ) +: random-bits ( n -- r ) 2^ random-integer ; + +: random ( seq -- elt ) [ f ] [ [ length random-integer ] keep nth ] if-empty ; -M: integer random ( integer -- integer' ) - dup sgn { - { 0 [ ] } - { -1 [ neg random-integer neg ] } - { 1 [ random-integer ] } - } case ; - : delete-random ( seq -- elt ) [ length random-integer ] keep [ nth ] 2keep delete-nth ; From a5fcb006fbd58d8d0dba442a70495cc33efcc1b4 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 5 Oct 2008 22:17:56 -0500 Subject: [PATCH 087/244] Clean up x86 stack frame code a bit more --- basis/cpu/x86/architecture/architecture.factor | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/basis/cpu/x86/architecture/architecture.factor b/basis/cpu/x86/architecture/architecture.factor index 4770400434..ea54ef85af 100644 --- a/basis/cpu/x86/architecture/architecture.factor +++ b/basis/cpu/x86/architecture/architecture.factor @@ -18,7 +18,7 @@ HOOK: stack-reg cpu ( -- reg ) #! input values to callbacks; the callback has its own #! stack frame set up, and we want to read the frame #! set up by the caller. - stack-frame* + cell + stack@ ; + stack-frame* + stack@ ; : reg-stack ( n reg -- op ) swap cells neg [+] ; @@ -52,20 +52,18 @@ HOOK: prepare-division cpu ( -- ) M: immediate load-literal v>operand swap v>operand MOV ; M: x86 stack-frame ( n -- i ) - 3 cells + 16 align cell - ; + 3 cells + 16 align ; M: x86 %save-word-xt ( -- ) temp-reg v>operand 0 MOV rc-absolute-cell rel-this ; -: factor-area-size ( -- n ) 4 cells ; - M: x86 %prologue ( n -- ) - dup cell + PUSH + dup PUSH temp-reg v>operand PUSH - stack-reg swap 2 cells - SUB ; + stack-reg swap 3 cells - SUB ; M: x86 %epilogue ( n -- ) - stack-reg swap ADD ; + stack-reg swap cell - ADD ; HOOK: %alien-global cpu ( symbol dll register -- ) From b0d57ead863995421f0a259294e3c53e5deed5ad Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 5 Oct 2008 23:09:10 -0500 Subject: [PATCH 088/244] Fix unit test --- basis/random/random-tests.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/random/random-tests.factor b/basis/random/random-tests.factor index c6d88c5525..e686dd7301 100644 --- a/basis/random/random-tests.factor +++ b/basis/random/random-tests.factor @@ -16,4 +16,4 @@ IN: random.tests [ t ] [ 1000 [ 400 random ] replicate prune length 256 > ] unit-test -[ 0 ] [ 0 random ] unit-test +[ f ] [ 0 random ] unit-test From 33d775890cfe24d95fc295cfe6da4399b36c25fd Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 6 Oct 2008 00:20:00 -0500 Subject: [PATCH 089/244] More stack frame refactoring --- basis/compiler/generator/fixup/fixup.factor | 6 ++-- basis/compiler/generator/generator.factor | 31 +++++++++---------- basis/cpu/architecture/architecture.factor | 13 ++++---- .../cpu/ppc/architecture/architecture.factor | 20 ++++++------ basis/cpu/x86/32/32.factor | 16 +++++----- basis/cpu/x86/64/64.factor | 17 +++++----- .../cpu/x86/architecture/architecture.factor | 20 ++++++++---- 7 files changed, 63 insertions(+), 60 deletions(-) diff --git a/basis/compiler/generator/fixup/fixup.factor b/basis/compiler/generator/fixup/fixup.factor index ecc88a7a5e..e8bdc561b7 100644 --- a/basis/compiler/generator/fixup/fixup.factor +++ b/basis/compiler/generator/fixup/fixup.factor @@ -13,7 +13,7 @@ TUPLE: frame-required n ; : frame-required ( n -- ) \ frame-required boa , ; -: stack-frame-size ( code -- n ) +: compute-stack-frame-size ( code -- n ) no-stack-frame [ dup frame-required? [ n>> max ] [ drop ] if ] reduce ; @@ -37,7 +37,7 @@ M: label fixup* : if-stack-frame ( frame-size quot -- ) swap dup no-stack-frame = - [ 2drop ] [ stack-frame swap call ] if ; inline + [ 2drop ] [ stack-frame-size swap call ] if ; inline M: word fixup* { @@ -146,7 +146,7 @@ SYMBOL: literal-table : fixup ( code -- literals relocation labels code ) [ init-fixup - dup stack-frame-size swap [ fixup* ] each drop + dup compute-stack-frame-size swap [ fixup* ] each drop literal-table get >array relocation-table get >byte-array diff --git a/basis/compiler/generator/generator.factor b/basis/compiler/generator/generator.factor index 2b398eaeea..22de9d3587 100644 --- a/basis/compiler/generator/generator.factor +++ b/basis/compiler/generator/generator.factor @@ -299,18 +299,17 @@ M: #return-recursive generate-node dup large-struct? [ heap-size ] [ drop 2 cells ] if ; : alien-stack-frame ( params -- n ) - alien-parameters parameter-sizes drop ; + stack-frame new + swap + [ return>> return-size >>return ] + [ alien-parameters parameter-sizes drop >>params ] bi + dup [ params>> ] [ return>> ] bi + >>size + dup size>> stack-frame-size >>total-size ; -: alien-invoke-frame ( params -- n ) - [ return>> return-size ] [ alien-stack-frame ] bi + ; - -: set-stack-frame ( n -- ) - dup [ frame-required ] when* \ stack-frame set ; - -: with-stack-frame ( n quot -- ) - swap set-stack-frame +: with-stack-frame ( params quot -- ) + swap alien-stack-frame [ size>> frame-required ] [ stack-frame set ] bi call - f set-stack-frame ; inline + stack-frame off ; inline GENERIC: reg-size ( register-class -- n ) @@ -413,8 +412,8 @@ M: long-long-type flatten-value-type ( type -- types ) #! parameters. If the C function is returning a structure, #! the first parameter is an implicit target area pointer, #! so we need to use a different offset. - return>> dup large-struct? - [ heap-size %prepare-box-struct cell ] [ drop 0 ] if ; + return>> large-struct? + [ %prepare-box-struct cell ] [ 0 ] if ; : objects>registers ( params -- ) #! Generate code for unboxing a list of C types, then @@ -473,7 +472,7 @@ M: no-such-symbol compiler-error-type M: #alien-invoke generate-node params>> - dup alien-invoke-frame [ + dup [ end-basic-block %prepare-alien-invoke dup objects>registers @@ -487,7 +486,7 @@ M: #alien-invoke generate-node ! #alien-indirect M: #alien-indirect generate-node params>> - dup alien-invoke-frame [ + dup [ ! Flush registers end-basic-block ! Save registers for GC @@ -553,7 +552,7 @@ TUPLE: callback-context ; : callback-unwind ( params -- n ) { - { [ dup abi>> "stdcall" = ] [ alien-stack-frame ] } + { [ dup abi>> "stdcall" = ] [ drop stack-frame get params>> ] } { [ dup return>> large-struct? ] [ drop 4 ] } [ drop 0 ] } cond ; @@ -569,7 +568,7 @@ TUPLE: callback-context ; dup xt>> dup [ init-templates %prologue-later - dup alien-stack-frame [ + dup [ [ registers>objects ] [ wrap-callback-quot %alien-callback ] [ %callback-return ] diff --git a/basis/cpu/architecture/architecture.factor b/basis/cpu/architecture/architecture.factor index 63c52d1025..f22d4a2a90 100644 --- a/basis/cpu/architecture/architecture.factor +++ b/basis/cpu/architecture/architecture.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2006, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays generic kernel kernel.private math memory -namespaces make sequences layouts system hashtables classes -alien byte-arrays combinators words sets ; +USING: accessors arrays generic kernel kernel.private math +memory namespaces make sequences layouts system hashtables +classes alien byte-arrays combinators words sets ; IN: cpu.architecture ! Register classes @@ -33,10 +33,9 @@ GENERIC# load-literal 1 ( obj vreg -- ) HOOK: load-indirect cpu ( obj reg -- ) -HOOK: stack-frame cpu ( frame-size -- n ) +HOOK: stack-frame-size cpu ( frame-size -- n ) -: stack-frame* ( -- n ) - \ stack-frame get stack-frame ; +TUPLE: stack-frame total-size size params return ; ! Set up caller stack frame HOOK: %prologue cpu ( n -- ) @@ -117,7 +116,7 @@ HOOK: %box cpu ( n reg-class func -- ) HOOK: %box-long-long cpu ( n func -- ) -HOOK: %prepare-box-struct cpu ( size -- ) +HOOK: %prepare-box-struct cpu ( -- ) HOOK: %box-small-struct cpu ( c-type -- ) diff --git a/basis/cpu/ppc/architecture/architecture.factor b/basis/cpu/ppc/architecture/architecture.factor index aab104fa6e..357349193e 100644 --- a/basis/cpu/ppc/architecture/architecture.factor +++ b/basis/cpu/ppc/architecture/architecture.factor @@ -43,8 +43,8 @@ IN: cpu.ppc.architecture : xt-save ( n -- i ) 2 cells - ; -M: ppc stack-frame ( n -- i ) - local@ factor-area-size + cell + 4 cells align ; +M: ppc stack-frame-size ( n -- i ) + local@ factor-area-size + 4 cells align ; M: temp-reg v>operand drop 11 ; @@ -166,7 +166,7 @@ M: float-regs %load-param-reg >r 1 rot local@ r> LF ; M: stack-params %load-param-reg ( stack reg reg-class -- ) drop >r 0 1 rot local@ LWZ 0 1 r> param@ STW ; -: next-param@ ( n -- x ) param@ stack-frame* + ; +: next-param@ ( n -- x ) param@ stack-frame get total-size>> + ; M: stack-params %save-param-reg ( stack reg reg-class -- ) #! Funky. Read the parameter from the caller's stack frame. @@ -218,20 +218,18 @@ M: ppc %box-long-long ( n func -- ) 4 1 rot cell + local@ LWZ ] when* r> f %alien-invoke ; -: struct-return@ ( size n -- n ) - [ local@ ] [ stack-frame* factor-area-size - swap - ] ?if ; +: struct-return@ ( n -- n ) + [ stack-frame get params>> ] unless* local@ ; -M: ppc %prepare-box-struct ( size -- ) +M: ppc %prepare-box-struct ( -- ) #! Compute target address for value struct return - 3 1 rot f struct-return@ ADDI + 3 1 f struct-return@ ADDI 3 1 0 local@ STW ; M: ppc %box-large-struct ( n c-type -- ) - #! If n = f, then we're boxing a returned struct - heap-size - [ swap struct-return@ ] keep + ! If n = f, then we're boxing a returned struct ! Compute destination address and load struct size - [ 3 1 rot ADDI ] [ 4 LI ] bi* + [ 3 1 rot struct-return@ ADDI ] [ heap-size 4 LI ] bi* ! Call the function "box_value_struct" f %alien-invoke ; diff --git a/basis/cpu/x86/32/32.factor b/basis/cpu/x86/32/32.factor index 1173b9e68e..dc891a8178 100644 --- a/basis/cpu/x86/32/32.factor +++ b/basis/cpu/x86/32/32.factor @@ -30,8 +30,8 @@ M: x86.32 struct-small-enough? ( size -- ? ) heap-size { 1 2 4 8 } member? os { linux netbsd solaris } member? not and ; -: struct-return@ ( size n -- operand ) - [ next-stack@ ] [ \ stack-frame get swap - stack@ ] ?if ; +: struct-return@ ( n -- operand ) + [ next-stack@ ] [ stack-frame get params>> stack@ ] if* ; ! On x86, parameters are never passed in registers. M: int-regs return-reg drop EAX ; @@ -63,10 +63,10 @@ M: float-regs store-return-reg [ stack@ ] [ reg-size ] bi* FSTP ; : align-sub ( n -- ) - dup 16 align swap - ESP swap SUB ; + [ align-stack ] keep - decr-stack-reg ; : align-add ( n -- ) - 16 align ESP swap ADD ; + align-stack incr-stack-reg ; : with-aligned-stack ( n quot -- ) [ [ align-sub ] [ call ] bi* ] @@ -113,7 +113,7 @@ M: x86.32 %box-long-long ( n func -- ) M:: x86.32 %box-large-struct ( n c-type -- ) ! Compute destination address - ECX c-type heap-size n struct-return@ LEA + ECX n struct-return@ LEA 8 [ ! Push struct size c-type heap-size PUSH @@ -123,9 +123,9 @@ M:: x86.32 %box-large-struct ( n c-type -- ) "box_value_struct" f %alien-invoke ] with-aligned-stack ; -M: x86.32 %prepare-box-struct ( size -- ) +M: x86.32 %prepare-box-struct ( -- ) ! Compute target address for value struct return - EAX swap f struct-return@ LEA + EAX f struct-return@ LEA ! Store it as the first parameter 0 stack@ EAX MOV ; @@ -248,7 +248,7 @@ M: x86.32 %cleanup ( alien-node -- ) { { [ dup abi>> "stdcall" = ] - [ alien-stack-frame ESP swap SUB ] + [ drop ESP stack-frame get params>> SUB ] } { [ dup return>> large-struct? ] [ drop EAX PUSH ] diff --git a/basis/cpu/x86/64/64.factor b/basis/cpu/x86/64/64.factor index 8c9762630b..5bcd733eaa 100644 --- a/basis/cpu/x86/64/64.factor +++ b/basis/cpu/x86/64/64.factor @@ -164,22 +164,21 @@ M: x86.64 %box-small-struct ( c-type -- ) "box_small_struct" f %alien-invoke ] with-return-regs ; -: struct-return@ ( size n -- n ) - [ ] [ \ stack-frame get swap - ] ?if stack@ ; +: struct-return@ ( n -- operand ) + [ stack-frame get params>> ] unless* stack@ ; M: x86.64 %box-large-struct ( n c-type -- ) ! Struct size is parameter 2 - heap-size - RSI over MOV + RSI swap heap-size MOV ! Compute destination address - RDI spin struct-return@ LEA + RDI swap struct-return@ LEA ! Copy the struct from the C stack "box_value_struct" f %alien-invoke ; -M: x86.64 %prepare-box-struct ( size -- ) - ! Compute target address for value struct return, store it - ! as the first parameter - RAX swap f struct-return@ LEA +M: x86.64 %prepare-box-struct ( -- ) + ! Compute target address for value struct return + RAX f struct-return@ LEA + ! Store it as the first parameter 0 stack@ RAX MOV ; M: x86.64 %prepare-var-args RAX RAX XOR ; diff --git a/basis/cpu/x86/architecture/architecture.factor b/basis/cpu/x86/architecture/architecture.factor index ea54ef85af..d10397de3b 100644 --- a/basis/cpu/x86/architecture/architecture.factor +++ b/basis/cpu/x86/architecture/architecture.factor @@ -18,7 +18,7 @@ HOOK: stack-reg cpu ( -- reg ) #! input values to callbacks; the callback has its own #! stack frame set up, and we want to read the frame #! set up by the caller. - stack-frame* + stack@ ; + stack-frame get total-size>> + stack@ ; : reg-stack ( n reg -- op ) swap cells neg [+] ; @@ -51,19 +51,27 @@ HOOK: prepare-division cpu ( -- ) M: immediate load-literal v>operand swap v>operand MOV ; -M: x86 stack-frame ( n -- i ) - 3 cells + 16 align ; +: align-stack ( n -- n' ) + os macosx? [ 16 align ] when ; + +M: x86 stack-frame-size ( n -- i ) + 3 cells + align-stack ; M: x86 %save-word-xt ( -- ) temp-reg v>operand 0 MOV rc-absolute-cell rel-this ; +: decr-stack-reg ( n -- ) + dup 0 = [ drop ] [ stack-reg swap SUB ] if ; + M: x86 %prologue ( n -- ) dup PUSH temp-reg v>operand PUSH - stack-reg swap 3 cells - SUB ; + 3 cells - decr-stack-reg ; -M: x86 %epilogue ( n -- ) - stack-reg swap cell - ADD ; +: incr-stack-reg ( n -- ) + dup 0 = [ ] [ stack-reg swap ADD ] if ; + +M: x86 %epilogue ( n -- ) cell - incr-stack-reg ; HOOK: %alien-global cpu ( symbol dll register -- ) From 4ca06ae50ff25eb93a5214914645eb1381393969 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 6 Oct 2008 00:20:24 -0500 Subject: [PATCH 090/244] Typo --- basis/cpu/x86/architecture/architecture.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/cpu/x86/architecture/architecture.factor b/basis/cpu/x86/architecture/architecture.factor index d10397de3b..417f90c9f9 100644 --- a/basis/cpu/x86/architecture/architecture.factor +++ b/basis/cpu/x86/architecture/architecture.factor @@ -69,7 +69,7 @@ M: x86 %prologue ( n -- ) 3 cells - decr-stack-reg ; : incr-stack-reg ( n -- ) - dup 0 = [ ] [ stack-reg swap ADD ] if ; + dup 0 = [ drop ] [ stack-reg swap ADD ] if ; M: x86 %epilogue ( n -- ) cell - incr-stack-reg ; From 3c2caf948ae4c58a56d211597c7ab4fa9d284bd2 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 6 Oct 2008 00:33:47 -0500 Subject: [PATCH 091/244] 16-align stack on x86-64 --- basis/cpu/x86/architecture/architecture.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/cpu/x86/architecture/architecture.factor b/basis/cpu/x86/architecture/architecture.factor index 417f90c9f9..01256fb4c5 100644 --- a/basis/cpu/x86/architecture/architecture.factor +++ b/basis/cpu/x86/architecture/architecture.factor @@ -52,7 +52,7 @@ HOOK: prepare-division cpu ( -- ) M: immediate load-literal v>operand swap v>operand MOV ; : align-stack ( n -- n' ) - os macosx? [ 16 align ] when ; + os macosx? cpu x86.64? or [ 16 align ] when ; M: x86 stack-frame-size ( n -- i ) 3 cells + align-stack ; From d142b3283772fa54998f4f4c6c709a51d45f6503 Mon Sep 17 00:00:00 2001 From: erg Date: Mon, 6 Oct 2008 14:54:27 -0500 Subject: [PATCH 092/244] cleaner irc.messages --- extra/irc/messages/messages.factor | 168 +++++++++++++++++------------ 1 file changed, 98 insertions(+), 70 deletions(-) diff --git a/extra/irc/messages/messages.factor b/extra/irc/messages/messages.factor index 882cec5c8d..14c8633f6f 100755 --- a/extra/irc/messages/messages.factor +++ b/extra/irc/messages/messages.factor @@ -4,7 +4,6 @@ USING: kernel fry splitting ascii calendar accessors combinators qualified arrays classes.tuple math.order ; RENAME: join sequences => sjoin EXCLUDE: sequences => join ; -EXCLUDE: inverse => _ ; IN: irc.messages TUPLE: irc-message line prefix command parameters trailing timestamp ; @@ -17,75 +16,99 @@ TUPLE: nick < irc-message ; TUPLE: privmsg < irc-message name ; TUPLE: kick < irc-message channel who ; TUPLE: roomlist < irc-message channel names ; -TUPLE: nick-in-use < irc-message name ; +TUPLE: nick-in-use < irc-message asterisk name ; TUPLE: notice < irc-message type ; TUPLE: mode < irc-message name mode parameter ; TUPLE: names-reply < irc-message who channel ; TUPLE: unhandled < irc-message ; : ( command parameters trailing -- irc-message ) - irc-message new now >>timestamp - [ [ (>>trailing) ] [ (>>parameters) ] [ (>>command) ] tri ] keep ; + irc-message new + now >>timestamp + swap >>trailing + swap >>parameters + swap >>command ; > ( irc-message -- string ) -M: irc-message command-string>> command>> ; -M: ping command-string>> drop "PING" ; -M: join command-string>> drop "JOIN" ; -M: part command-string>> drop "PART" ; -M: quit command-string>> drop "QUIT" ; -M: nick command-string>> drop "NICK" ; -M: privmsg command-string>> drop "PRIVMSG" ; -M: notice command-string>> drop "NOTICE" ; -M: mode command-string>> drop "MODE" ; -M: kick command-string>> drop "KICK" ; +M: irc-message command-string>> ( irc-message -- string ) command>> ; +M: ping command-string>> ( ping -- string ) drop "PING" ; +M: join command-string>> ( join -- string ) drop "JOIN" ; +M: part command-string>> ( part -- string ) drop "PART" ; +M: quit command-string>> ( quit -- string ) drop "QUIT" ; +M: nick command-string>> ( nick -- string ) drop "NICK" ; +M: privmsg command-string>> ( privmsg -- string ) drop "PRIVMSG" ; +M: notice command-string>> ( notice -- string ) drop "NOTICE" ; +M: mode command-string>> ( mode -- string ) drop "MODE" ; +M: kick command-string>> ( kick -- string ) drop "KICK" ; GENERIC: command-parameters>> ( irc-message -- seq ) -M: irc-message command-parameters>> parameters>> ; -M: ping command-parameters>> drop { } ; -M: join command-parameters>> drop { } ; -M: part command-parameters>> channel>> 1array ; -M: quit command-parameters>> drop { } ; -M: nick command-parameters>> drop { } ; -M: privmsg command-parameters>> name>> 1array ; -M: notice command-parameters>> type>> 1array ; -M: kick command-parameters>> [ channel>> ] [ who>> ] bi 2array ; -M: mode command-parameters>> [ name>> ] [ channel>> ] [ mode>> ] tri 3array ; +M: irc-message command-parameters>> ( irc-message -- seq ) parameters>> ; +M: ping command-parameters>> ( ping -- seq ) drop { } ; +M: join command-parameters>> ( join -- seq ) drop { } ; +M: part command-parameters>> ( part -- seq ) channel>> 1array ; +M: quit command-parameters>> ( quit -- seq ) drop { } ; +M: nick command-parameters>> ( nick -- seq ) drop { } ; +M: privmsg command-parameters>> ( privmsg -- seq ) name>> 1array ; +M: notice command-parameters>> ( norice -- seq ) type>> 1array ; +M: kick command-parameters>> ( kick -- seq ) + [ channel>> ] [ who>> ] bi 2array ; +M: mode command-parameters>> ( mode -- seq ) + [ name>> ] [ channel>> ] [ mode>> ] tri 3array ; -GENERIC: (>>command-parameters) ( params irc-message -- ) +GENERIC# >>command-parameters 1 ( irc-message params -- irc-message ) -M: irc-message (>>command-parameters) 2drop ; -M: logged-in (>>command-parameters) [ first ] dip (>>name) ; -M: privmsg (>>command-parameters) [ first ] dip (>>name) ; -M: notice (>>command-parameters) [ first ] dip (>>type) ; -M: part (>>command-parameters) [ first ] dip (>>channel) ; -M: nick-in-use (>>command-parameters) [ second ] dip (>>name) ; -M: kick (>>command-parameters) - [ first2 ] dip [ (>>who) ] [ (>>channel) ] bi ; -M: names-reply (>>command-parameters) - [ [ first ] dip (>>who) ] [ [ third ] dip (>>channel) ] 2bi ; -M: mode (>>command-parameters) - { { [ >r 2array r> ] [ [ (>>mode) ] [ (>>name) ] bi ] } - { [ >r 3array r> ] [ [ (>>parameter) ] [ (>>mode) ] [ (>>name) ] tri ] } - } switch ; +M: irc-message >>command-parameters ( irc-message params -- irc-message ) + drop ; + +M: logged-in >>command-parameters ( part params -- part ) + first >>name ; + +M: privmsg >>command-parameters ( privmsg params -- privmsg ) + first >>name ; + +M: notice >>command-parameters ( notice params -- notice ) + first >>type ; + +M: part >>command-parameters ( part params -- part ) + first >>channel ; + +M: kick >>command-parameters ( kick params -- kick ) + first2 [ >>channel ] [ >>who ] bi* ; + +M: nick-in-use >>command-parameters ( nick-in-use params -- nick-in-use ) + second >>name ; + +M: names-reply >>command-parameters ( names-reply params -- names-reply ) + first3 nip [ >>who ] [ >>channel ] bi* ; + +M: mode >>command-parameters ( mode params -- mode ) + dup length 3 = [ + first3 [ >>name ] [ >>mode ] [ >>parameter ] tri* + ] [ + first2 [ >>name ] [ >>mode ] bi* + ] if ; PRIVATE> GENERIC: irc-message>client-line ( irc-message -- string ) -M: irc-message irc-message>client-line +M: irc-message irc-message>client-line ( irc-message -- string ) [ command-string>> ] [ command-parameters>> " " sjoin ] [ trailing>> [ CHAR: : prefix ] [ "" ] if* ] tri 3array " " sjoin ; GENERIC: irc-message>server-line ( irc-message -- string ) -M: irc-message irc-message>server-line drop "not implemented yet" ; + +M: irc-message irc-message>server-line ( irc-message -- string ) + drop "not implemented yet" ; server-line drop "not implemented yet" ; : split-at-first ( seq separators -- before after ) dupd '[ _ member? ] find [ cut 1 tail ] [ swap ] if ; -: remove-heading-: ( seq -- seq ) dup ":" head? [ 1 tail ] when ; +: remove-heading-: ( seq -- seq ) + ":" ?head drop ; : parse-name ( string -- string ) remove-heading-: "!" split-at-first drop ; : split-prefix ( string -- string/f string ) dup ":" head? - [ remove-heading-: " " split1 ] - [ f swap ] - if ; + [ remove-heading-: " " split1 ] [ f swap ] if ; : split-trailing ( string -- string string/f ) ":" split1 ; -: copy-message-in ( origin dest -- ) - { [ [ parameters>> ] dip [ (>>command-parameters) ] [ (>>parameters) ] 2bi ] - [ [ line>> ] dip (>>line) ] - [ [ prefix>> ] dip (>>prefix) ] - [ [ command>> ] dip (>>command) ] - [ [ trailing>> ] dip (>>trailing) ] - [ [ timestamp>> ] dip (>>timestamp) ] - } 2cleave ; +: copy-message-in ( command irc-message -- command ) + { + [ parameters>> [ >>parameters ] [ >>command-parameters ] bi ] + [ line>> >>line ] + [ prefix>> >>prefix ] + [ command>> >>command ] + [ trailing>> >>trailing ] + [ timestamp>> >>timestamp ] + } cleave ; PRIVATE> UNION: sender-in-prefix privmsg join part quit kick mode nick ; GENERIC: irc-message-sender ( irc-message -- sender ) -M: sender-in-prefix irc-message-sender prefix>> parse-name ; +M: sender-in-prefix irc-message-sender ( sender-in-prefix -- sender ) + prefix>> parse-name ; : string>irc-message ( string -- object ) dup split-prefix split-trailing [ [ blank? ] trim " " split unclip swap ] dip now irc-message boa ; +: irc-message>command ( irc-message -- command ) + [ + command>> { + { "PING" [ ping ] } + { "NOTICE" [ notice ] } + { "001" [ logged-in ] } + { "433" [ nick-in-use ] } + { "353" [ names-reply ] } + { "JOIN" [ join ] } + { "PART" [ part ] } + { "NICK" [ nick ] } + { "PRIVMSG" [ privmsg ] } + { "QUIT" [ quit ] } + { "MODE" [ mode ] } + { "KICK" [ kick ] } + [ drop unhandled ] + } case new + ] keep copy-message-in ; + : parse-irc-line ( string -- message ) - string>irc-message - dup command>> { - { "PING" [ ping ] } - { "NOTICE" [ notice ] } - { "001" [ logged-in ] } - { "433" [ nick-in-use ] } - { "353" [ names-reply ] } - { "JOIN" [ join ] } - { "PART" [ part ] } - { "NICK" [ nick ] } - { "PRIVMSG" [ privmsg ] } - { "QUIT" [ quit ] } - { "MODE" [ mode ] } - { "KICK" [ kick ] } - [ drop unhandled ] - } case new [ copy-message-in ] keep ; + string>irc-message irc-message>command ; From e42a2d8825a7a280a11610ca9910de643576654d Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 15:01:01 -0500 Subject: [PATCH 093/244] clean up constructor --- extra/irc/client/client.factor | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/extra/irc/client/client.factor b/extra/irc/client/client.factor index d40c7d400d..463e35f415 100755 --- a/extra/irc/client/client.factor +++ b/extra/irc/client/client.factor @@ -19,9 +19,16 @@ C: irc-profile TUPLE: irc-client profile stream in-messages out-messages chats is-running nick connect reconnect-time is-ready ; + : ( profile -- irc-client ) - [ f H{ } clone f ] keep nickname>> - [ latin1 ] 15 seconds f irc-client boa ; + irc-client new + swap >>profile + >>in-messages + >>out-messages + H{ } clone >>chats + dup profile>> nickname>> >>nick + [ latin1 ] >>connect + 15 seconds >>reconnect-time ; TUPLE: irc-chat in-messages client ; TUPLE: irc-server-chat < irc-chat ; From 03043a7cfdba7ee943c5adadd210e3cbb83ca1e7 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 15:25:17 -0500 Subject: [PATCH 094/244] remove slot --- extra/irc/messages/messages.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/irc/messages/messages.factor b/extra/irc/messages/messages.factor index 14c8633f6f..32533c102a 100755 --- a/extra/irc/messages/messages.factor +++ b/extra/irc/messages/messages.factor @@ -16,7 +16,7 @@ TUPLE: nick < irc-message ; TUPLE: privmsg < irc-message name ; TUPLE: kick < irc-message channel who ; TUPLE: roomlist < irc-message channel names ; -TUPLE: nick-in-use < irc-message asterisk name ; +TUPLE: nick-in-use < irc-message name ; TUPLE: notice < irc-message type ; TUPLE: mode < irc-message name mode parameter ; TUPLE: names-reply < irc-message who channel ; From a0a17646c5e4f4b16be73556570336d6dfc346fd Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 15:56:54 -0500 Subject: [PATCH 095/244] dettach -> detach (spelling), fix docs --- extra/irc/client/client-docs.factor | 10 +++++----- extra/irc/client/client.factor | 2 +- extra/irc/ui/ui.factor | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/extra/irc/client/client-docs.factor b/extra/irc/client/client-docs.factor index 1b9204c4f1..6d4fae9b83 100644 --- a/extra/irc/client/client-docs.factor +++ b/extra/irc/client/client-docs.factor @@ -19,8 +19,8 @@ HELP: attach-chat "Chatting with irc channels/users/etc" { $values { "irc-chat" "an irc chat object" } { "irc-client" "an irc client object" } } { $description "Registers " { $snippet "irc-chat" } " with " { $snippet "irc-client" } " and starts listening." } ; -HELP: dettach-chat "Stop an unregister chat" -{ $values { "irc-chat" "an irc chat object" } { "irc-client" "an irc client object" } } +HELP: detach-chat "Stop an unregister chat" +{ $values { "irc-chat" "an irc chat object" } } { $description "Unregisters " { $snippet "irc-chat" } " from " { $snippet "irc-client" } " and stops listening. This is how you part from a channel." } ; HELP: terminate-irc "Terminates an irc client" @@ -49,7 +49,7 @@ ARTICLE: "irc.client" "IRC Client" { $subsection connect-irc } { $subsection terminate-irc } { $subsection attach-chat } -{ $subsection dettach-chat } +{ $subsection detach-chat } { $subsection hear } { $subsection speak } { $heading "IRC messages" } @@ -72,7 +72,7 @@ ARTICLE: "irc.client" "IRC Client" { $heading "Special messages" } "Some special messages that are created by the library and not by the irc server." { $table - { { $link irc-chat-end } "sent to a chat when it has been dettached from the client, the chat should stop after it receives this message. " } + { { $link irc-chat-end } "sent to a chat when it has been detached from the client, the chat should stop after it receives this message. " } { { $link irc-end } " sent when the client isn't running anymore, chats should stop after it receives this message." } { { $link irc-disconnected } " sent to notify chats that connection was lost." } { { $link irc-connected } " sent to notify chats that a connection with the irc server was established." } } @@ -97,4 +97,4 @@ ARTICLE: "irc.client" "IRC Client" } ; -ABOUT: "irc.client" \ No newline at end of file +ABOUT: "irc.client" diff --git a/extra/irc/client/client.factor b/extra/irc/client/client.factor index 463e35f415..ce7a6e5373 100755 --- a/extra/irc/client/client.factor +++ b/extra/irc/client/client.factor @@ -362,7 +362,7 @@ PRIVATE> : attach-chat ( irc-chat irc-client -- ) [ (attach-chat) ] with-irc-client ; -: dettach-chat ( irc-chat -- ) +: detach-chat ( irc-chat -- ) [ client>> ] keep '[ _ (remove-chat) ] with-irc-client ; : speak ( message irc-chat -- ) diff --git a/extra/irc/ui/ui.factor b/extra/irc/ui/ui.factor index 50dc9378a2..e854d285b7 100755 --- a/extra/irc/ui/ui.factor +++ b/extra/irc/ui/ui.factor @@ -186,7 +186,7 @@ M: irc-tab graft* [ chat>> ] [ window>> client>> ] bi attach-chat ; M: irc-tab ungraft* - chat>> dettach-chat ; + chat>> detach-chat ; TUPLE: irc-channel-tab < irc-tab userlist ; From e0d6aadc8e7c8af2819907f4156f9dd7db7528fc Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 17:17:14 -0500 Subject: [PATCH 096/244] complete file-info across *bsd, linux --- basis/io/unix/files/files.factor | 71 +++++++++++++++------- basis/io/unix/files/freebsd/freebsd.factor | 17 ++++++ basis/io/unix/files/freebsd/tags.txt | 1 + basis/io/unix/files/macosx/macosx.factor | 16 +++++ basis/io/unix/files/macosx/tags.txt | 1 + basis/io/unix/files/netbsd/netbsd.factor | 17 ++++++ basis/io/unix/files/netbsd/tags.txt | 1 + basis/io/unix/files/openbsd/openbsd.factor | 17 ++++++ basis/io/unix/files/openbsd/tags.txt | 1 + basis/io/unix/files/unique/unique.factor | 2 + 10 files changed, 123 insertions(+), 21 deletions(-) create mode 100644 basis/io/unix/files/freebsd/freebsd.factor create mode 100644 basis/io/unix/files/freebsd/tags.txt create mode 100644 basis/io/unix/files/macosx/macosx.factor create mode 100644 basis/io/unix/files/macosx/tags.txt create mode 100644 basis/io/unix/files/netbsd/netbsd.factor create mode 100644 basis/io/unix/files/netbsd/tags.txt create mode 100644 basis/io/unix/files/openbsd/openbsd.factor create mode 100644 basis/io/unix/files/openbsd/tags.txt diff --git a/basis/io/unix/files/files.factor b/basis/io/unix/files/files.factor index c6eda50855..4319b6c8de 100644 --- a/basis/io/unix/files/files.factor +++ b/basis/io/unix/files/files.factor @@ -4,7 +4,7 @@ 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 ; +io.files.private destructors vocabs.loader ; IN: io.unix.files @@ -74,26 +74,14 @@ M: unix copy-file ( from to -- ) [ swap file-info permissions>> chmod io-error ] 2bi ; -: stat>type ( stat -- type ) - stat-st_mode 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 ; +HOOK: stat>file-info os ( stat -- file-info ) -: stat>file-info ( stat -- info ) - { - [ stat>type ] - [ stat-st_size ] - [ stat-st_mode ] - [ stat-st_mtim timespec-sec seconds unix-1970 time+ ] - } cleave - \ file-info boa ; +HOOK: stat>type os ( stat -- file-info ) + +HOOK: new-file-info os ( -- class ) + +TUPLE: unix-file-info < file-info uid gid dev ino +nlink rdev blocks blocksize ; M: unix file-info ( path -- info ) normalize-path file-status stat>file-info ; @@ -105,4 +93,45 @@ M: unix make-link ( path1 path2 -- ) normalize-path symlink io-error ; M: unix read-link ( path -- path' ) - normalize-path read-symbolic-link ; \ No newline at end of file + 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_ctim timespec>unix-time >>created ] + [ stat-st_mtim timespec>unix-time >>modified ] + [ stat-st_atim 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 ; + +M: unix stat>type ( stat -- type ) + stat-st_mode 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 ; + +! Linux has no extra fields in its stat struct +os { + { 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 diff --git a/basis/io/unix/files/freebsd/freebsd.factor b/basis/io/unix/files/freebsd/freebsd.factor new file mode 100644 index 0000000000..14d15bc93d --- /dev/null +++ b/basis/io/unix/files/freebsd/freebsd.factor @@ -0,0 +1,17 @@ +! 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 ; +IN: io.unix.files.freebsd + +TUPLE: freebsd-file-info < unix-file-info birth-time flags gen ; + +M: freebsd new-file-info ( -- class ) freebsd-file-info new ; + +M: freebsd stat>file-info ( stat -- file-info ) + [ call-next-method ] keep + { + [ stat-st_flags >>flags ] + [ stat-st_gen >>gen ] + [ stat-st_birthtimepsec timespec>timestamp >>birth-time ] + } cleave ; diff --git a/basis/io/unix/files/freebsd/tags.txt b/basis/io/unix/files/freebsd/tags.txt new file mode 100644 index 0000000000..6bf68304bb --- /dev/null +++ b/basis/io/unix/files/freebsd/tags.txt @@ -0,0 +1 @@ +unportable diff --git a/basis/io/unix/files/macosx/macosx.factor b/basis/io/unix/files/macosx/macosx.factor new file mode 100644 index 0000000000..4173123e45 --- /dev/null +++ b/basis/io/unix/files/macosx/macosx.factor @@ -0,0 +1,16 @@ +! 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 ; +IN: io.unix.files.macosx + +TUPLE: macosx-file-info < unix-file-info flags gen ; + +M: macosx new-file-info ( -- class ) macosx-file-info new ; + +M: macosx stat>file-info ( stat -- file-info ) + [ call-next-method ] keep + { + [ stat-st_flags >>flags ] + [ stat-st_gen >>gen ] + } cleave ; diff --git a/basis/io/unix/files/macosx/tags.txt b/basis/io/unix/files/macosx/tags.txt new file mode 100644 index 0000000000..6bf68304bb --- /dev/null +++ b/basis/io/unix/files/macosx/tags.txt @@ -0,0 +1 @@ +unportable diff --git a/basis/io/unix/files/netbsd/netbsd.factor b/basis/io/unix/files/netbsd/netbsd.factor new file mode 100644 index 0000000000..c61304c128 --- /dev/null +++ b/basis/io/unix/files/netbsd/netbsd.factor @@ -0,0 +1,17 @@ +! 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 ; +IN: io.unix.files.netbsd + +TUPLE: netbsd-file-info < unix-file-info birth-time flags gen ; + +M: netbsd new-file-info ( -- class ) netbsd-file-info new ; + +M: netbsd stat>file-info ( stat -- file-info ) + [ call-next-method ] keep + { + [ stat-st_flags >>flags ] + [ stat-st_gen >>gen ] + [ stat-st_birthtim timespec>timestamp >>birth-time ] + } cleave ; diff --git a/basis/io/unix/files/netbsd/tags.txt b/basis/io/unix/files/netbsd/tags.txt new file mode 100644 index 0000000000..6bf68304bb --- /dev/null +++ b/basis/io/unix/files/netbsd/tags.txt @@ -0,0 +1 @@ +unportable diff --git a/basis/io/unix/files/openbsd/openbsd.factor b/basis/io/unix/files/openbsd/openbsd.factor new file mode 100644 index 0000000000..e1473eed4d --- /dev/null +++ b/basis/io/unix/files/openbsd/openbsd.factor @@ -0,0 +1,17 @@ +! 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 ; +IN: io.unix.files.openbsd + +TUPLE: openbsd-file-info < unix-file-info birth-time flags gen ; + +M: openbsd new-file-info ( -- class ) openbsd-file-info new ; + +M: openbsd stat>file-info ( stat -- file-info ) + [ call-next-method ] keep + { + [ stat-st_flags >>flags ] + [ stat-st_gen >>gen ] + [ stat-st_birthtim timespec>timestamp >>birth-time ] + } cleave ; diff --git a/basis/io/unix/files/openbsd/tags.txt b/basis/io/unix/files/openbsd/tags.txt new file mode 100644 index 0000000000..6bf68304bb --- /dev/null +++ b/basis/io/unix/files/openbsd/tags.txt @@ -0,0 +1 @@ +unportable diff --git a/basis/io/unix/files/unique/unique.factor b/basis/io/unix/files/unique/unique.factor index 95e321fd93..e47ac6a2e3 100644 --- a/basis/io/unix/files/unique/unique.factor +++ b/basis/io/unix/files/unique/unique.factor @@ -1,3 +1,5 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: kernel io.ports io.unix.backend math.bitwise unix io.files.unique.backend system ; IN: io.unix.files.unique From b168d75a46747ccc64f45dc18ee02b0f6d6c1825 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 17:17:49 -0500 Subject: [PATCH 097/244] add timespec>timestamp word --- basis/calendar/calendar.factor | 9 ++++++++- basis/structs/structs.factor | 10 ++++++++++ basis/unix/time/time.factor | 12 ------------ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/basis/calendar/calendar.factor b/basis/calendar/calendar.factor index 31c835aada..8a27a46aa2 100644 --- a/basis/calendar/calendar.factor +++ b/basis/calendar/calendar.factor @@ -402,9 +402,16 @@ PRIVATE> : time-since-midnight ( timestamp -- duration ) dup midnight time- ; +: since-1970 ( time -- timestamp ) + unix-1970 time+ >local-time ; + : timeval>unix-time ( timeval -- timestamp ) [ timeval-sec seconds ] [ timeval-usec microseconds ] bi - time+ unix-1970 time+ >local-time ; + time+ since-1970 ; + +: timespec>unix-time ( timeval -- timestamp ) + [ timespec-sec seconds ] [ timespec-nsec nanoseconds ] bi + time+ since-1970 ; M: timestamp sleep-until timestamp>millis sleep-until ; diff --git a/basis/structs/structs.factor b/basis/structs/structs.factor index f54917dc47..51ac517af3 100644 --- a/basis/structs/structs.factor +++ b/basis/structs/structs.factor @@ -10,3 +10,13 @@ C-STRUCT: timeval "timeval" [ set-timeval-usec ] keep [ set-timeval-sec ] keep ; + +C-STRUCT: timespec + { "time_t" "sec" } + { "long" "nsec" } ; + +: make-timespec ( ms -- timespec ) + 1000 /mod 1000000 * + "timespec" + [ set-timespec-nsec ] keep + [ set-timespec-sec ] keep ; diff --git a/basis/unix/time/time.factor b/basis/unix/time/time.factor index 4fbb20dca0..26b42ddfe7 100644 --- a/basis/unix/time/time.factor +++ b/basis/unix/time/time.factor @@ -1,6 +1,4 @@ - USING: kernel alien.syntax alien.c-types math ; - IN: unix.time TYPEDEF: uint time_t @@ -18,16 +16,6 @@ C-STRUCT: tm { "long" "gmtoff" } ! Seconds: 0-59 (K&R says 0-61?) { "char*" "zone" } ; -C-STRUCT: timespec - { "time_t" "sec" } - { "long" "nsec" } ; - -: make-timespec ( ms -- timespec ) - 1000 /mod 1000000 * - "timespec" - [ set-timespec-nsec ] keep - [ set-timespec-sec ] keep ; - FUNCTION: time_t time ( time_t* t ) ; FUNCTION: tm* localtime ( time_t* clock ) ; FUNCTION: int gettimeofday ( timespec* TP, void* TZP ) ; From 9459eaab4b81c1a9f060393c2cef594b72873523 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 17:28:11 -0500 Subject: [PATCH 098/244] all platforms support the file-info structure --- core/io/files/files.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/io/files/files.factor b/core/io/files/files.factor index 1634b7a3f1..bc84aa5d21 100644 --- a/core/io/files/files.factor +++ b/core/io/files/files.factor @@ -153,7 +153,7 @@ PRIVATE> "." last-split1 nip ; ! File info -TUPLE: file-info type size permissions modified ; +TUPLE: file-info type size permissions created modified accessed ; HOOK: file-info io-backend ( path -- info ) From 0294308c4c40e3ed49f446b1e45e5e1370bd008e Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 17:28:42 -0500 Subject: [PATCH 099/244] work on windows file-info --- basis/io/windows/files/files.factor | 41 ++++++++++++++++++----------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/basis/io/windows/files/files.factor b/basis/io/windows/files/files.factor index 40e7e17402..f4bb3c71dc 100644 --- a/basis/io/windows/files/files.factor +++ b/basis/io/windows/files/files.factor @@ -147,18 +147,18 @@ SYMBOLS: +read-only+ +hidden+ +system+ FILE_ATTRIBUTE_DIRECTORY mask? +directory+ +regular-file+ ? ; : WIN32_FIND_DATA>file-info ( WIN32_FIND_DATA -- file-info ) + [ file-info new ] dip { - [ WIN32_FIND_DATA-dwFileAttributes win32-file-type ] + [ WIN32_FIND_DATA-dwFileAttributes win32-file-type >>type ] [ [ WIN32_FIND_DATA-nFileSizeLow ] - [ WIN32_FIND_DATA-nFileSizeHigh ] bi >64bit + [ WIN32_FIND_DATA-nFileSizeHigh ] bi >64bit >>size ] - [ WIN32_FIND_DATA-dwFileAttributes ] - ! [ WIN32_FIND_DATA-ftCreationTime FILETIME>timestamp ] - [ WIN32_FIND_DATA-ftLastWriteTime FILETIME>timestamp ] - ! [ WIN32_FIND_DATA-ftLastAccessTime FILETIME>timestamp ] - } cleave - \ file-info boa ; + [ WIN32_FIND_DATA-dwFileAttributes >>mode ] + [ 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" [ @@ -168,23 +168,32 @@ SYMBOLS: +read-only+ +hidden+ +system+ ] keep ; : BY_HANDLE_FILE_INFORMATION>file-info ( HANDLE_FILE_INFORMATION -- file-info ) + [ file-info new ] dip { - [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes win32-file-type ] + [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes win32-file-type >>type ] [ [ BY_HANDLE_FILE_INFORMATION-nFileSizeLow ] - [ BY_HANDLE_FILE_INFORMATION-nFileSizeHigh ] bi >64bit + [ BY_HANDLE_FILE_INFORMATION-nFileSizeHigh ] bi >64bit >>size + ] + [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes >>mode ] + [ + 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-dwFileAttributes ] - ! [ BY_HANDLE_FILE_INFORMATION-ftCreationTime FILETIME>timestamp ] - [ BY_HANDLE_FILE_INFORMATION-ftLastWriteTime FILETIME>timestamp ] - ! [ BY_HANDLE_FILE_INFORMATION-ftLastAccessTime FILETIME>timestamp ] ! [ BY_HANDLE_FILE_INFORMATION-nNumberOfLinks ] ! [ ! [ BY_HANDLE_FILE_INFORMATION-nFileIndexLow ] ! [ BY_HANDLE_FILE_INFORMATION-nFileIndexHigh ] bi >64bit ! ] - } cleave - \ file-info boa ; + } cleave ; : get-file-information ( handle -- BY_HANDLE_FILE_INFORMATION ) [ From 847205432fe1d234f028aa6f2527d8713f17c4de Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 17:34:58 -0500 Subject: [PATCH 100/244] fix load error --- basis/structs/structs.factor | 2 +- basis/unix/time/time.factor | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/basis/structs/structs.factor b/basis/structs/structs.factor index 51ac517af3..6aef757eb4 100644 --- a/basis/structs/structs.factor +++ b/basis/structs/structs.factor @@ -1,4 +1,4 @@ -USING: alien.c-types alien.syntax kernel math ; +USING: alien.c-types alien.syntax kernel math unix.types ; IN: structs C-STRUCT: timeval diff --git a/basis/unix/time/time.factor b/basis/unix/time/time.factor index 26b42ddfe7..67611ae193 100644 --- a/basis/unix/time/time.factor +++ b/basis/unix/time/time.factor @@ -1,8 +1,8 @@ -USING: kernel alien.syntax alien.c-types math ; +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel alien.syntax alien.c-types math unix.types ; IN: unix.time -TYPEDEF: uint time_t - C-STRUCT: tm { "int" "sec" } ! Seconds: 0-59 (K&R says 0-61?) { "int" "min" } ! Minutes: 0-59 From 1d25db2a6e6c7ad968cafb1228b7486ec20c2ec0 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 17:54:50 -0500 Subject: [PATCH 101/244] empty case for linux --- basis/io/unix/files/files.factor | 1 + 1 file changed, 1 insertion(+) diff --git a/basis/io/unix/files/files.factor b/basis/io/unix/files/files.factor index 4319b6c8de..fafc56154b 100644 --- a/basis/io/unix/files/files.factor +++ b/basis/io/unix/files/files.factor @@ -134,4 +134,5 @@ os { { freebsd [ "io.unix.files.freebsd" require ] } { netbsd [ "io.unix.files.netbsd" require ] } { openbsd [ "io.unix.files.openbsd" require ] } + { linux [ ] } } case From 9f6a7bfd87723f7a294687b0c1917c84f57a302a Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 17:56:12 -0500 Subject: [PATCH 102/244] typo --- basis/io/unix/files/freebsd/freebsd.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/io/unix/files/freebsd/freebsd.factor b/basis/io/unix/files/freebsd/freebsd.factor index 14d15bc93d..42857d1132 100644 --- a/basis/io/unix/files/freebsd/freebsd.factor +++ b/basis/io/unix/files/freebsd/freebsd.factor @@ -13,5 +13,5 @@ M: freebsd stat>file-info ( stat -- file-info ) { [ stat-st_flags >>flags ] [ stat-st_gen >>gen ] - [ stat-st_birthtimepsec timespec>timestamp >>birth-time ] + [ stat-st_birthtimespec timespec>timestamp >>birth-time ] } cleave ; From f949f6ee1a678f81e8354ddbe3530ba9dc770618 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 17:59:20 -0500 Subject: [PATCH 103/244] move basis/structs to calendar.unix --- basis/calendar/unix/unix.factor | 24 ++++++++++++++++++++++-- basis/structs/authors.txt | 1 - basis/structs/structs.factor | 22 ---------------------- basis/structs/summary.txt | 1 - 4 files changed, 22 insertions(+), 26 deletions(-) delete mode 100755 basis/structs/authors.txt delete mode 100644 basis/structs/structs.factor delete mode 100644 basis/structs/summary.txt diff --git a/basis/calendar/unix/unix.factor b/basis/calendar/unix/unix.factor index 1da554e0f1..e811abcab8 100644 --- a/basis/calendar/unix/unix.factor +++ b/basis/calendar/unix/unix.factor @@ -1,7 +1,27 @@ -USING: alien alien.c-types arrays calendar kernel structs -math unix.time namespaces system ; +USING: alien alien.c-types alien.syntax arrays calendar +kernel structs math unix.time namespaces system ; IN: calendar.unix +C-STRUCT: timeval + { "long" "sec" } + { "long" "usec" } ; + +: make-timeval ( ms -- timeval ) + 1000 /mod 1000 * + "timeval" + [ set-timeval-usec ] keep + [ set-timeval-sec ] keep ; + +C-STRUCT: timespec + { "time_t" "sec" } + { "long" "nsec" } ; + +: make-timespec ( ms -- timespec ) + 1000 /mod 1000000 * + "timespec" + [ set-timespec-nsec ] keep + [ set-timespec-sec ] keep ; + : get-time ( -- alien ) f time localtime ; diff --git a/basis/structs/authors.txt b/basis/structs/authors.txt deleted file mode 100755 index 7c1b2f2279..0000000000 --- a/basis/structs/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Doug Coleman diff --git a/basis/structs/structs.factor b/basis/structs/structs.factor deleted file mode 100644 index 6aef757eb4..0000000000 --- a/basis/structs/structs.factor +++ /dev/null @@ -1,22 +0,0 @@ -USING: alien.c-types alien.syntax kernel math unix.types ; -IN: structs - -C-STRUCT: timeval - { "long" "sec" } - { "long" "usec" } ; - -: make-timeval ( ms -- timeval ) - 1000 /mod 1000 * - "timeval" - [ set-timeval-usec ] keep - [ set-timeval-sec ] keep ; - -C-STRUCT: timespec - { "time_t" "sec" } - { "long" "nsec" } ; - -: make-timespec ( ms -- timespec ) - 1000 /mod 1000000 * - "timespec" - [ set-timespec-nsec ] keep - [ set-timespec-sec ] keep ; diff --git a/basis/structs/summary.txt b/basis/structs/summary.txt deleted file mode 100644 index 86d6ad349e..0000000000 --- a/basis/structs/summary.txt +++ /dev/null @@ -1 +0,0 @@ -Cross-platform C structs From 5e57f68814b87acf25e2ccc89477b3eacd46b213 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 18:01:53 -0500 Subject: [PATCH 104/244] use calendar.unix --- basis/io/unix/files/freebsd/freebsd.factor | 2 +- basis/io/unix/files/netbsd/netbsd.factor | 2 +- basis/io/unix/files/openbsd/openbsd.factor | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/basis/io/unix/files/freebsd/freebsd.factor b/basis/io/unix/files/freebsd/freebsd.factor index 42857d1132..e6fff4dfe0 100644 --- a/basis/io/unix/files/freebsd/freebsd.factor +++ b/basis/io/unix/files/freebsd/freebsd.factor @@ -1,7 +1,7 @@ ! 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.stat accessors combinators calendar.unix ; IN: io.unix.files.freebsd TUPLE: freebsd-file-info < unix-file-info birth-time flags gen ; diff --git a/basis/io/unix/files/netbsd/netbsd.factor b/basis/io/unix/files/netbsd/netbsd.factor index c61304c128..6a41e6e18a 100644 --- a/basis/io/unix/files/netbsd/netbsd.factor +++ b/basis/io/unix/files/netbsd/netbsd.factor @@ -1,7 +1,7 @@ ! 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.stat accessors combinators calendar.unix ; IN: io.unix.files.netbsd TUPLE: netbsd-file-info < unix-file-info birth-time flags gen ; diff --git a/basis/io/unix/files/openbsd/openbsd.factor b/basis/io/unix/files/openbsd/openbsd.factor index e1473eed4d..5723827481 100644 --- a/basis/io/unix/files/openbsd/openbsd.factor +++ b/basis/io/unix/files/openbsd/openbsd.factor @@ -1,7 +1,7 @@ ! 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.stat accessors combinators calendar.unix ; IN: io.unix.files.openbsd TUPLE: openbsd-file-info < unix-file-info birth-time flags gen ; From c4fdad4df6e30fe5a88e1d36245795dc4401d50e Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 18:02:07 -0500 Subject: [PATCH 105/244] move structs around AGAIN --- basis/calendar/unix/unix.factor | 10 +--------- basis/unix/unix.factor | 11 ++++++++++- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/basis/calendar/unix/unix.factor b/basis/calendar/unix/unix.factor index e811abcab8..4a1b7d49ef 100644 --- a/basis/calendar/unix/unix.factor +++ b/basis/calendar/unix/unix.factor @@ -1,21 +1,13 @@ USING: alien alien.c-types alien.syntax arrays calendar -kernel structs math unix.time namespaces system ; +kernel structs math unix unix.time namespaces system ; IN: calendar.unix -C-STRUCT: timeval - { "long" "sec" } - { "long" "usec" } ; - : make-timeval ( ms -- timeval ) 1000 /mod 1000 * "timeval" [ set-timeval-usec ] keep [ set-timeval-sec ] keep ; -C-STRUCT: timespec - { "time_t" "sec" } - { "long" "nsec" } ; - : make-timespec ( ms -- timespec ) 1000 /mod 1000000 * "timespec" diff --git a/basis/unix/unix.factor b/basis/unix/unix.factor index 4c572a6be0..8ccc14f44d 100644 --- a/basis/unix/unix.factor +++ b/basis/unix/unix.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.c-types alien.syntax kernel libc structs +USING: alien alien.c-types alien.syntax kernel libc sequences continuations byte-arrays strings math namespaces system combinators vocabs.loader qualified accessors stack-checker macros locals generalizations unix.types @@ -29,6 +29,15 @@ C-STRUCT: group { "int" "gr_gid" } { "char**" "gr_mem" } ; +C-STRUCT: timeval + { "long" "sec" } + { "long" "usec" } ; + +C-STRUCT: timespec + { "time_t" "sec" } + { "long" "nsec" } ; + + LIBRARY: factor FUNCTION: void clear_err_no ( ) ; From 0ba6d93626a1283b7d63b6981830b726af15f6cd Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 18:02:52 -0500 Subject: [PATCH 106/244] remove using --- basis/calendar/calendar.factor | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/basis/calendar/calendar.factor b/basis/calendar/calendar.factor index 8a27a46aa2..719f0f6e9f 100644 --- a/basis/calendar/calendar.factor +++ b/basis/calendar/calendar.factor @@ -2,8 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel math math.functions namespaces sequences strings system vocabs.loader threads accessors combinators -locals classes.tuple math.order summary structs -combinators.short-circuit ; +locals classes.tuple math.order summary combinators.short-circuit ; IN: calendar HOOK: gmt-offset os ( -- hours minutes seconds ) From 4734b62dd8d1086a89c5df09cab91b0fab6a6c10 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 18:03:56 -0500 Subject: [PATCH 107/244] things in the wrong place still, probably will have some using errors now.. --- basis/calendar/calendar.factor | 8 -------- basis/calendar/unix/unix.factor | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/basis/calendar/calendar.factor b/basis/calendar/calendar.factor index 719f0f6e9f..d5824768f4 100644 --- a/basis/calendar/calendar.factor +++ b/basis/calendar/calendar.factor @@ -404,14 +404,6 @@ PRIVATE> : since-1970 ( time -- timestamp ) unix-1970 time+ >local-time ; -: timeval>unix-time ( timeval -- timestamp ) - [ timeval-sec seconds ] [ timeval-usec microseconds ] bi - time+ since-1970 ; - -: timespec>unix-time ( timeval -- timestamp ) - [ timespec-sec seconds ] [ timespec-nsec nanoseconds ] bi - time+ since-1970 ; - M: timestamp sleep-until timestamp>millis sleep-until ; M: duration sleep hence sleep-until ; diff --git a/basis/calendar/unix/unix.factor b/basis/calendar/unix/unix.factor index 4a1b7d49ef..679cc69fad 100644 --- a/basis/calendar/unix/unix.factor +++ b/basis/calendar/unix/unix.factor @@ -14,6 +14,14 @@ IN: calendar.unix [ set-timespec-nsec ] keep [ set-timespec-sec ] keep ; +: timeval>unix-time ( timeval -- timestamp ) + [ timeval-sec seconds ] [ timeval-usec microseconds ] bi + time+ since-1970 ; + +: timespec>unix-time ( timeval -- timestamp ) + [ timespec-sec seconds ] [ timespec-nsec nanoseconds ] bi + time+ since-1970 ; + : get-time ( -- alien ) f time localtime ; From dd56cd4a4fc39ea9089fff5abd49552110c62dff Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 18:07:40 -0500 Subject: [PATCH 108/244] fix typo --- basis/io/windows/files/files.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/basis/io/windows/files/files.factor b/basis/io/windows/files/files.factor index f4bb3c71dc..fdb75c72f0 100644 --- a/basis/io/windows/files/files.factor +++ b/basis/io/windows/files/files.factor @@ -154,7 +154,7 @@ SYMBOLS: +read-only+ +hidden+ +system+ [ WIN32_FIND_DATA-nFileSizeLow ] [ WIN32_FIND_DATA-nFileSizeHigh ] bi >64bit >>size ] - [ WIN32_FIND_DATA-dwFileAttributes >>mode ] + [ 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 ] @@ -175,7 +175,7 @@ SYMBOLS: +read-only+ +hidden+ +system+ [ BY_HANDLE_FILE_INFORMATION-nFileSizeLow ] [ BY_HANDLE_FILE_INFORMATION-nFileSizeHigh ] bi >64bit >>size ] - [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes >>mode ] + [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes >>permissions ] [ BY_HANDLE_FILE_INFORMATION-ftCreationTime FILETIME>timestamp >>created From 4eb3f734839ccb02ce5fb0004ec53d39dd0eeee5 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 6 Oct 2008 18:18:33 -0500 Subject: [PATCH 109/244] moving structs around --- basis/calendar/unix/unix.factor | 4 +++- basis/unix/time/time.factor | 8 ++++++++ basis/unix/unix.factor | 9 --------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/basis/calendar/unix/unix.factor b/basis/calendar/unix/unix.factor index 679cc69fad..fcdfcc8a67 100644 --- a/basis/calendar/unix/unix.factor +++ b/basis/calendar/unix/unix.factor @@ -1,5 +1,7 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. USING: alien alien.c-types alien.syntax arrays calendar -kernel structs math unix unix.time namespaces system ; +kernel math unix unix.time namespaces system ; IN: calendar.unix : make-timeval ( ms -- timeval ) diff --git a/basis/unix/time/time.factor b/basis/unix/time/time.factor index 67611ae193..b6471e9892 100644 --- a/basis/unix/time/time.factor +++ b/basis/unix/time/time.factor @@ -3,6 +3,14 @@ USING: kernel alien.syntax alien.c-types math unix.types ; IN: unix.time +C-STRUCT: timeval + { "long" "sec" } + { "long" "usec" } ; + +C-STRUCT: timespec + { "time_t" "sec" } + { "long" "nsec" } ; + C-STRUCT: tm { "int" "sec" } ! Seconds: 0-59 (K&R says 0-61?) { "int" "min" } ! Minutes: 0-59 diff --git a/basis/unix/unix.factor b/basis/unix/unix.factor index 8ccc14f44d..a68274f09b 100644 --- a/basis/unix/unix.factor +++ b/basis/unix/unix.factor @@ -29,15 +29,6 @@ C-STRUCT: group { "int" "gr_gid" } { "char**" "gr_mem" } ; -C-STRUCT: timeval - { "long" "sec" } - { "long" "usec" } ; - -C-STRUCT: timespec - { "time_t" "sec" } - { "long" "nsec" } ; - - LIBRARY: factor FUNCTION: void clear_err_no ( ) ; From f1205587a1b52e92047d59f96cfaa014f337ea12 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 19 Sep 2008 18:33:28 -0500 Subject: [PATCH 110/244] fix error from having tuple and generic with same name. annoying... --- basis/io/windows/files/files.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/basis/io/windows/files/files.factor b/basis/io/windows/files/files.factor index fdb75c72f0..dbe16f0a6e 100644 --- a/basis/io/windows/files/files.factor +++ b/basis/io/windows/files/files.factor @@ -147,7 +147,7 @@ SYMBOLS: +read-only+ +hidden+ +system+ FILE_ATTRIBUTE_DIRECTORY mask? +directory+ +regular-file+ ? ; : WIN32_FIND_DATA>file-info ( WIN32_FIND_DATA -- file-info ) - [ file-info new ] dip + [ \ file-info new ] dip { [ WIN32_FIND_DATA-dwFileAttributes win32-file-type >>type ] [ @@ -168,7 +168,7 @@ SYMBOLS: +read-only+ +hidden+ +system+ ] keep ; : BY_HANDLE_FILE_INFORMATION>file-info ( HANDLE_FILE_INFORMATION -- file-info ) - [ file-info new ] dip + [ \ file-info new ] dip { [ BY_HANDLE_FILE_INFORMATION-dwFileAttributes win32-file-type >>type ] [ From 2c1f6ee3dd37c8ef92b6df2ad34928d55b8984cc Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 19 Sep 2008 22:06:28 -0500 Subject: [PATCH 111/244] apply p1dzkl's patch to let the windows ui cascade new windows instead of putting them all on top of each other. thanks! --- basis/ui/windows/windows.factor | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/basis/ui/windows/windows.factor b/basis/ui/windows/windows.factor index 345c73bcb9..3e600d2e3c 100644 --- a/basis/ui/windows/windows.factor +++ b/basis/ui/windows/windows.factor @@ -420,15 +420,25 @@ M: windows-ui-backend do-events style 0 ex-style AdjustWindowRectEx win32-error=0/f ; : make-RECT ( world -- RECT ) - dup window-loc>> { 40 40 } vmax dup rot rect-dim v+ + dup window-loc>> dup rot rect-dim v+ "RECT" over first over set-RECT-right swap second over set-RECT-bottom over first over set-RECT-left swap second over set-RECT-top ; +: default-position-RECT ( RECT -- ) + dup get-RECT-dimensions [ 2drop ] 2dip + CW_USEDEFAULT + pick set-RECT-bottom + CW_USEDEFAULT + over set-RECT-right + CW_USEDEFAULT over set-RECT-left + CW_USEDEFAULT swap set-RECT-top ; + : make-adjusted-RECT ( rect -- RECT ) - make-RECT dup adjust-RECT ; + make-RECT + dup get-RECT-top-left [ zero? ] both? swap + dup adjust-RECT + swap [ dup default-position-RECT ] when ; : create-window ( rect -- hwnd ) make-adjusted-RECT From ded36a2279397c32ff33ff652416df0bfbea9206 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 28 Sep 2008 21:55:40 -0500 Subject: [PATCH 112/244] Fix GC bug --- vm/types.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vm/types.c b/vm/types.c index 3097ee73f8..ccc7cbdba3 100755 --- a/vm/types.c +++ b/vm/types.c @@ -470,6 +470,7 @@ F_STRING* reallot_string(F_STRING* string, CELL capacity, CELL fill) UNREGISTER_UNTAGGED(new_string); UNREGISTER_UNTAGGED(string); + write_barrier((CELL)new_string); new_string->aux = tag_object(new_aux); F_BYTE_ARRAY *aux = untag_object(string->aux); @@ -477,7 +478,9 @@ F_STRING* reallot_string(F_STRING* string, CELL capacity, CELL fill) } REGISTER_UNTAGGED(string); + REGISTER_UNTAGGED(new_string); fill_string(new_string,to_copy,capacity,fill); + UNREGISTER_UNTAGGED(new_string); UNREGISTER_UNTAGGED(string); return new_string; From e62f068db7203dec4a6eb851a2f683e060cce38e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 04:09:02 -0500 Subject: [PATCH 113/244] html.streams now emits clickable URLs for $url markup elements --- basis/help/markup/markup.factor | 5 ++++- basis/html/streams/streams-docs.factor | 6 +++--- basis/html/streams/streams-tests.factor | 4 ++-- basis/html/streams/streams.factor | 9 ++++++--- basis/io/styles/styles.factor | 2 ++ 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/basis/help/markup/markup.factor b/basis/help/markup/markup.factor index b5e074b598..1eae56cfcc 100755 --- a/basis/help/markup/markup.factor +++ b/basis/help/markup/markup.factor @@ -71,7 +71,10 @@ ALIAS: $slot $snippet [ strong-style get print-element* ] ($span) ; : $url ( children -- ) - [ url-style get print-element* ] ($span) ; + [ + dup first href associate url-style get assoc-union + print-element* + ] ($span) ; : $nl ( children -- ) nl nl drop ; diff --git a/basis/html/streams/streams-docs.factor b/basis/html/streams/streams-docs.factor index d7638a2817..f05eeb30fc 100644 --- a/basis/html/streams/streams-docs.factor +++ b/basis/html/streams/streams-docs.factor @@ -13,13 +13,13 @@ HELP: { $values { "stream" "an output stream" } { "html-stream" html-stream } } { $description "Creates a new formatted output stream which emits HTML markup on " { $snippet "stream" } "." } ; -HELP: with-html-stream +HELP: with-html-writer { $values { "quot" quotation } } { $description "Calls the quotation in a new dynamic scope with " { $link output-stream } " rebound to an " { $link html-stream } " wrapping the current " { $link output-stream } "." } { $examples { $example "USING: io io.styles html.streams ;" - "[ \"Hello\" { { font-style bold } } format nl ] with-html-stream" + "[ \"Hello\" { { font-style bold } } format nl ] with-html-writer" "Hello
" } } ; @@ -28,6 +28,6 @@ ARTICLE: "html.streams" "HTML streams" "The " { $vocab-link "html.streams" } " vocabulary provides a stream which implements " { $link "styles" } " by writing HTML markup to the wrapped stream." { $subsection html-stream } { $subsection } -{ $subsection with-html-stream } ; +{ $subsection with-html-writer } ; ABOUT: "html.streams" diff --git a/basis/html/streams/streams-tests.factor b/basis/html/streams/streams-tests.factor index b5707c158f..94229b3aea 100644 --- a/basis/html/streams/streams-tests.factor +++ b/basis/html/streams/streams-tests.factor @@ -4,7 +4,7 @@ xml.writer sbufs sequences inspector colors ; IN: html.streams.tests : make-html-string - [ with-html-stream ] with-string-writer ; inline + [ with-html-writer ] with-string-writer ; inline [ [ ] make-html-string ] must-infer @@ -71,4 +71,4 @@ M: funky browser-link-href [ H{ } [ ] with-nesting nl ] make-html-string ] unit-test -[ ] [ [ { 1 2 3 } describe ] with-html-stream ] unit-test +[ ] [ [ { 1 2 3 } describe ] with-html-writer ] unit-test diff --git a/basis/html/streams/streams.factor b/basis/html/streams/streams.factor index 7d0fe9b17c..6874dc2edd 100755 --- a/basis/html/streams/streams.factor +++ b/basis/html/streams/streams.factor @@ -22,7 +22,7 @@ TUPLE: html-stream stream last-div ; : not-a-div ( stream -- stream ) f >>last-div ; inline -: a-div ( stream -- straem ) +: a-div ( stream -- stream ) t >>last-div ; inline : ( stream -- html-stream ) @@ -48,6 +48,9 @@ TUPLE: html-sub-stream < html-stream style parent ; ] [ call ] if* ] [ call ] if* ; inline +: href-link-tag ( style quot -- ) + href pick at [ call ] [ call ] if* ; inline + : hex-color, ( color -- ) [ red>> ] [ green>> ] [ blue>> ] tri [ 255 * >fixnum >hex 2 CHAR: 0 pad-left % ] tri@ ; @@ -95,7 +98,7 @@ TUPLE: html-sub-stream < html-stream style parent ; : format-html-span ( string style stream -- ) stream>> [ - [ [ drop write ] span-tag ] object-link-tag + [ [ [ drop write ] span-tag ] href-link-tag ] object-link-tag ] with-output-stream* ; TUPLE: html-span-stream < html-sub-stream ; @@ -192,5 +195,5 @@ M: html-stream stream-write-table M: html-stream dispose stream>> dispose ; -: with-html-stream ( quot -- ) +: with-html-writer ( quot -- ) output-stream get swap with-output-stream* ; inline diff --git a/basis/io/styles/styles.factor b/basis/io/styles/styles.factor index b0eb327927..c9ba8f66df 100644 --- a/basis/io/styles/styles.factor +++ b/basis/io/styles/styles.factor @@ -20,6 +20,8 @@ SYMBOL: presented SYMBOL: presented-path SYMBOL: presented-printer +SYMBOL: href + ! Paragraph styles SYMBOL: page-color SYMBOL: border-color From df88e5a974ad05415b51aeff49b5b42c8ec1e0e9 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 04:09:13 -0500 Subject: [PATCH 114/244] Add :error word --- basis/debugger/debugger.factor | 3 +++ 1 file changed, 3 insertions(+) diff --git a/basis/debugger/debugger.factor b/basis/debugger/debugger.factor index 20e0703ce0..ec93a01c19 100755 --- a/basis/debugger/debugger.factor +++ b/basis/debugger/debugger.factor @@ -22,6 +22,9 @@ M: tuple error-help class ; M: string error. print ; +: :error ( -- ) + error get error. ; + : :s ( -- ) error-continuation get data>> stack. ; From 46a530c58ea5ae23460d30127e506fb87681c35d Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 04:09:21 -0500 Subject: [PATCH 115/244] Add limits to see --- basis/prettyprint/prettyprint.factor | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/basis/prettyprint/prettyprint.factor b/basis/prettyprint/prettyprint.factor index d41a68f0c4..c7be48084f 100755 --- a/basis/prettyprint/prettyprint.factor +++ b/basis/prettyprint/prettyprint.factor @@ -230,10 +230,14 @@ M: word declarations. : pprint-; ( -- ) \ ; pprint-word ; : (see) ( spec -- ) - - dup definer nip [ pprint-word ] when* declarations. - block> ; + [ + 12 nesting-limit set + 100 length-limit set + + dup definer nip [ pprint-word ] when* declarations. + block> + ] with-scope ; M: object see [ (see) ] with-use nl ; From dc1d7c76b7d656760511a4e1b13ce7f4549cdf34 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 04:10:00 -0500 Subject: [PATCH 116/244] Clean up some web framework code --- basis/furnace/chloe-tags/chloe-tags.factor | 11 ++++++-- basis/html/components/components-docs.factor | 2 +- basis/html/components/components-tests.factor | 2 +- basis/html/components/components.factor | 8 +++--- basis/html/elements/elements.factor | 11 +++++--- basis/html/templates/chloe/chloe-docs.factor | 16 +++++------ basis/html/templates/chloe/chloe.factor | 27 +++++++++---------- .../chloe/components/components.factor | 18 +++++-------- basis/http/server/server.factor | 4 +-- basis/http/server/static/static.factor | 2 +- 10 files changed, 52 insertions(+), 49 deletions(-) diff --git a/basis/furnace/chloe-tags/chloe-tags.factor b/basis/furnace/chloe-tags/chloe-tags.factor index 0cd1d6bd38..697c885a01 100644 --- a/basis/furnace/chloe-tags/chloe-tags.factor +++ b/basis/furnace/chloe-tags/chloe-tags.factor @@ -59,8 +59,12 @@ CHLOE: write-atom drop [ write-atom-feeds ] [code] ; attrs>> '[ [ [ _ ] dip link-attr ] each-responder ] [code] ; : a-start-tag ( tag -- ) - [ compile-link-attrs ] [ compile-a-url ] bi - [ ] [code] ; + [ ] [code] ; : a-end-tag ( tag -- ) drop [ ] [code] ; @@ -70,6 +74,9 @@ CHLOE: a [ a-start-tag ] [ compile-children ] [ a-end-tag ] tri ] compile-with-scope ; +CHLOE: base + compile-a-url [ ] [code] ; + : compile-hidden-form-fields ( for -- ) '[
diff --git a/basis/html/components/components-docs.factor b/basis/html/components/components-docs.factor index d7690b30e2..d131cc3e03 100644 --- a/basis/html/components/components-docs.factor +++ b/basis/html/components/components-docs.factor @@ -29,7 +29,7 @@ HELP: textarea { $class-description "Text area components display a multi-line editor for a string value. The " { $slot "rows" } " and " { $slot "cols" } " properties determine the size of the text area." } ; HELP: link -{ $description "Link components render a link to an object stored at a value, with the link title and URL determined by the " { $link link-title } " and " { $link link-href } " generic words." } ; +{ $description "Link components render a link to an object stored at a value, with the link title and URL determined by the " { $link link-title } " and " { $link link-href } " generic words. The optional " { $slot "target" } " slot is a target frame to open the link in." } ; HELP: link-title { $values { "obj" object } { "string" string } } diff --git a/basis/html/components/components-tests.factor b/basis/html/components/components-tests.factor index 56c7118ab9..c0b7eec914 100644 --- a/basis/html/components/components-tests.factor +++ b/basis/html/components/components-tests.factor @@ -163,7 +163,7 @@ M: link-test link-href drop "http://www.apple.com/foo&bar" ; [ t ] [ [ "object" inspector render ] with-string-writer - [ "object" value [ describe ] with-html-stream ] with-string-writer + [ "object" value [ describe ] with-html-writer ] with-string-writer = ] unit-test diff --git a/basis/html/components/components.factor b/basis/html/components/components.factor index 18e1aad9eb..dafc9dd06b 100644 --- a/basis/html/components/components.factor +++ b/basis/html/components/components.factor @@ -126,11 +126,11 @@ M: string link-href ; M: url link-title ; M: url link-href ; -SINGLETON: link +TUPLE: link target ; M: link render* - 2drop - + nip + > [ =target ] when* dup link-href =href a> link-title present escape-string write ; @@ -169,7 +169,7 @@ M: farkup render* SINGLETON: inspector M: inspector render* - 2drop [ describe ] with-html-stream ; + 2drop [ describe ] with-html-writer ; ! Diff component SINGLETON: comparison diff --git a/basis/html/elements/elements.factor b/basis/html/elements/elements.factor index c7281df54d..0ee6955e29 100644 --- a/basis/html/elements/elements.factor +++ b/basis/html/elements/elements.factor @@ -113,6 +113,7 @@ SYMBOL: html "hr" "link" "img" + "base" ] [ define-open-html-word ] each ! Define some attributes @@ -124,7 +125,7 @@ SYMBOL: html "width" "selected" "onsubmit" "xmlns" "lang" "xml:lang" "media" "title" "multiple" "checked" "summary" "cellspacing" "align" "scope" "abbr" - "nofollow" "alt" + "nofollow" "alt" "target" ] [ define-attribute-word ] each >> @@ -133,12 +134,16 @@ SYMBOL: html "" write-html "" write-html ; -: simple-page ( title quot -- ) +: simple-page ( title head-quot body-quot -- ) #! Call the quotation, with all output going to the #! body of an html page with the given title. + spin xhtml-preamble - swap write + + write + call + call ; inline diff --git a/basis/html/templates/chloe/chloe-docs.factor b/basis/html/templates/chloe/chloe-docs.factor index b97a4c5c35..f390aad238 100644 --- a/basis/html/templates/chloe/chloe-docs.factor +++ b/basis/html/templates/chloe/chloe-docs.factor @@ -27,13 +27,9 @@ HELP: CHLOE: { $values { "name" "the tag name" } { "definition" "a quotation with stack effect " { $snippet "( tag -- )" } } } { $description "Defines compilation semantics for the Chloe tag named " { $snippet "tag" } ". The definition body receives a " { $link tag } " on the stack." } ; -HELP: CHLOE-SINGLETON: -{ $syntax "CHLOE-SINGLETON: name" } -{ $description "Defines a Chloe tag named " { $snippet "name" } " rendering an HTML component with singleton class word " { $snippet "name" } ". See " { $link "html.components" } "." } ; - -HELP: CHLOE-TUPLE: -{ $syntax "CHLOE-TUPLE: name" } -{ $description "Defines a Chloe tag named " { $snippet "name" } " rendering an HTML component with tuple class word " { $snippet "name" } ". See " { $link "html.components" } "." } ; +HELP: COMPONENT: +{ $syntax "COMPONENT: name" } +{ $description "Defines a Chloe tag named " { $snippet "name" } " rendering the HTML component with class word " { $snippet "name" } ". See " { $link "html.components" } "." } ; HELP: reset-cache { $description "Resets the compiled template cache. Chloe automatically recompiles templates when their file changes on disk, however other when redefining Chloe tags or words which they call, the cache may have to be reset manually for the changes to take effect." } ; @@ -135,6 +131,7 @@ ARTICLE: "html.templates.chloe.tags.form" "Chloe link and form tags" "s" } } } + { { $snippet "t:base" } { "Outputs an HTML " { $snippet "" } " tag. The attributes are interpreted in the same manner as the attributes of " { $snippet "t:a" } "." } } { { $snippet "t:form" } { "Renders a form; extends the standard XHTML " { $snippet "form" } " tag by providing some integration with other web framework features, for example by adding hidden fields for authentication credentials and session management allowing those features to work with form submission transparently. The following attributes are supported:" { $list @@ -264,14 +261,13 @@ ARTICLE: "html.templates.chloe.extend.components.example" "An example of a custo "Now we define a method on the " { $link render* } " generic word which renders the image using " { $vocab-link "html.elements" } ":" { $code "M: image render* 2drop ;" } "Finally, we can define a Chloe component:" -{ $code "CHLOE-SINGLETON: image" } +{ $code "COMPONENT: image" } "We can use it as follows, assuming the current form has a value named " { $snippet "image" } ":" { $code "" } ; ARTICLE: "html.templates.chloe.extend.components" "Extending Chloe with custom components" "Custom HTML components implementing the " { $link render* } " word can be wired up with Chloe using the following syntax from " { $vocab-link "html.templates.chloe.components" } ":" -{ $subsection POSTPONE: CHLOE-SINGLETON: } -{ $subsection POSTPONE: CHLOE-TUPLE: } +{ $subsection POSTPONE: COMPONENT: } { $subsection "html.templates.chloe.extend.components.example" } ; ARTICLE: "html.templates.chloe" "Chloe templates" diff --git a/basis/html/templates/chloe/chloe.factor b/basis/html/templates/chloe/chloe.factor index e83040b00d..1bc4684d5c 100644 --- a/basis/html/templates/chloe/chloe.factor +++ b/basis/html/templates/chloe/chloe.factor @@ -78,20 +78,19 @@ CHLOE: call-next-template CHLOE: if dup if>quot [ swap when ] append process-children ; -CHLOE-SINGLETON: label -CHLOE-SINGLETON: link -CHLOE-SINGLETON: inspector -CHLOE-SINGLETON: comparison -CHLOE-SINGLETON: html -CHLOE-SINGLETON: hidden - -CHLOE-TUPLE: farkup -CHLOE-TUPLE: field -CHLOE-TUPLE: textarea -CHLOE-TUPLE: password -CHLOE-TUPLE: choice -CHLOE-TUPLE: checkbox -CHLOE-TUPLE: code +COMPONENT: label +COMPONENT: link +COMPONENT: inspector +COMPONENT: comparison +COMPONENT: html +COMPONENT: hidden +COMPONENT: farkup +COMPONENT: field +COMPONENT: textarea +COMPONENT: password +COMPONENT: choice +COMPONENT: checkbox +COMPONENT: code SYMBOL: template-cache diff --git a/basis/html/templates/chloe/components/components.factor b/basis/html/templates/chloe/components/components.factor index 77d7c937be..3041120d43 100644 --- a/basis/html/templates/chloe/components/components.factor +++ b/basis/html/templates/chloe/components/components.factor @@ -1,35 +1,31 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs sequences kernel parser fry quotations -classes.tuple +classes.tuple classes.singleton html.components html.templates.chloe.compiler html.templates.chloe.syntax ; IN: html.templates.chloe.components + +GENERIC: component-tag ( tag class -- ) -: singleton-component-tag ( tag class -- ) +M: singleton-class component-tag ( tag class -- ) [ "name" required-attr compile-attr ] [ literalize [ render ] [code-with] ] bi* ; -: CHLOE-SINGLETON: - scan-word - [ name>> ] [ '[ _ singleton-component-tag ] ] bi - define-chloe-tag ; - parsing - : compile-component-attrs ( tag class -- ) [ attrs>> [ drop main>> "name" = not ] assoc-filter ] dip [ all-slots swap '[ name>> _ at compile-attr ] each ] [ [ boa ] [code-with] ] bi ; -: tuple-component-tag ( tag class -- ) +M: tuple-class component-tag ( tag class -- ) [ drop "name" required-attr compile-attr ] [ compile-component-attrs ] 2bi [ render ] [code] ; -: CHLOE-TUPLE: +: COMPONENT: scan-word - [ name>> ] [ '[ _ tuple-component-tag ] ] bi + [ name>> ] [ '[ _ component-tag ] ] bi define-chloe-tag ; parsing diff --git a/basis/http/server/server.factor b/basis/http/server/server.factor index 64c85a24d2..518081899e 100755 --- a/basis/http/server/server.factor +++ b/basis/http/server/server.factor @@ -153,8 +153,8 @@ main-responder global [ <404> or ] change-at [ add-responder-nesting ] [ call-responder* ] 2bi ; : http-error. ( error -- ) - "Internal server error" [ - [ print-error nl :c ] with-html-stream + "Internal server error" [ ] [ + [ print-error nl :c ] with-html-writer ] simple-page ; : <500> ( error -- response ) diff --git a/basis/http/server/static/static.factor b/basis/http/server/static/static.factor index abb504ed94..5ae18156b0 100755 --- a/basis/http/server/static/static.factor +++ b/basis/http/server/static/static.factor @@ -60,7 +60,7 @@ TUPLE: file-responder root hook special allow-listings ; dup escape-string write ; : directory. ( path -- ) - dup file-name [ + dup file-name [ ] [ [

file-name escape-string write

] [
    From edc7aa3908bd7cd76a636f45a851d1a13bbd627a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 04:10:20 -0500 Subject: [PATCH 117/244] Working on help webapp --- basis/help/html/html-tests.factor | 5 ++ basis/help/html/html.factor | 101 ++++++++++++++++++++++++++++++ basis/help/html/stylesheet.css | 4 ++ extra/webapps/help/help.factor | 38 +++++++++++ extra/webapps/help/help.xml | 20 ++++++ extra/webapps/help/search.xml | 53 ++++++++++++++++ 6 files changed, 221 insertions(+) create mode 100644 basis/help/html/html-tests.factor create mode 100644 basis/help/html/stylesheet.css create mode 100644 extra/webapps/help/help.factor create mode 100644 extra/webapps/help/help.xml create mode 100644 extra/webapps/help/search.xml diff --git a/basis/help/html/html-tests.factor b/basis/help/html/html-tests.factor new file mode 100644 index 0000000000..475b2114b3 --- /dev/null +++ b/basis/help/html/html-tests.factor @@ -0,0 +1,5 @@ +IN: help.html.tests +USING: html.streams classes.predicate help.topics help.markup +io.streams.string accessors prettyprint kernel tools.test ; + +[ ] [ [ [ \ predicate-instance? def>> . ] with-html-writer ] with-string-writer drop ] unit-test diff --git a/basis/help/html/html.factor b/basis/help/html/html.factor index b1bf8958a8..1e5d672658 100644 --- a/basis/help/html/html.factor +++ b/basis/help/html/html.factor @@ -1,5 +1,106 @@ ! 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 html.components 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 ; IN: help.html +: escape-char ( ch -- ) + dup H{ + { CHAR: " "__quote__" } + { CHAR: * "__star__" } + { CHAR: : "__colon__" } + { CHAR: < "__lt__" } + { CHAR: > "__gt__" } + { CHAR: ? "__question__" } + { CHAR: \\ "__backslash__" } + { CHAR: | "__pipe__" } + { CHAR: _ "__underscore__" } + { CHAR: / "__slash__" } + { CHAR: \\ "__backslash__" } + { CHAR: , "__comma__" } + } at [ % ] [ , ] ?if ; +: escape-filename ( string -- filename ) + [ [ escape-char ] each ] "" make ; + +GENERIC: topic>filename* ( topic -- name prefix ) + +M: word topic>filename* [ name>> ] [ vocabulary>> ] bi 2array "word" ; +M: link topic>filename* name>> "article" ; +M: word-link topic>filename* name>> topic>filename* ; +M: vocab-spec topic>filename* vocab-name "vocab" ; +M: vocab-tag topic>filename* name>> "tag" ; +M: vocab-author topic>filename* name>> "author" ; + +: topic>filename ( topic -- filename ) + [ + topic>filename* % "-" % + dup array? + [ [ escape-filename ] map "," join ] + [ escape-filename ] + if % ".html" % + ] "" make ; + +M: topic browser-link-href topic>filename ; + +: help-stylesheet ( -- ) + "resource:basis/help/html/stylesheet.css" ascii file-contents write ; + +: help>html ( topic -- ) + dup topic>filename utf8 [ + dup article-title + [ ] + [ [ help ] with-html-writer ] simple-page + ] with-file-writer ; + +: all-vocabs-really ( -- seq ) + #! Hack. + all-vocabs values concat + vocabs [ find-vocab-root not ] filter [ vocab ] map append ; + +: all-topics ( -- topics ) + [ + ! articles get keys [ >link ] map % + ! all-words [ >link ] map % + ! all-authors [ ] map % + all-tags [ ] map % + ! all-vocabs-really % + ] { } make ; + +: serialize-index ( index file -- ) + [ [ [ topic>filename ] dip ] { } assoc-map-as object>bytes ] dip + binary set-file-contents ; + +: generate-indices ( -- ) + articles get keys [ [ >link ] [ article-title ] bi ] { } map>assoc "articles.idx" serialize-index + all-words [ dup name>> ] { } map>assoc "words.idx" serialize-index + all-vocabs-really [ dup vocab-name ] { } map>assoc "vocabs.idx" serialize-index ; + +: generate-help ( -- ) + all-topics [ help>html ] each ; + +MEMO: load-index ( name -- index ) + binary file-contents bytes>object ; + +TUPLE: result title href ; + +M: result link-title title>> ; + +M: result link-href href>> ; + +: offline-apropos ( string index -- results ) + load-index swap >lower + '[ [ drop _ ] dip >lower subseq? ] assoc-filter + [ swap result boa ] { } assoc>map ; + +: article-apropos ( string -- results ) + "articles.idx" offline-apropos ; + +: word-apropos ( string -- results ) + "words.idx" offline-apropos ; + +: vocab-apropos ( string -- results ) + "vocabs.idx" offline-apropos ; diff --git a/basis/help/html/stylesheet.css b/basis/help/html/stylesheet.css new file mode 100644 index 0000000000..ff657d634e --- /dev/null +++ b/basis/help/html/stylesheet.css @@ -0,0 +1,4 @@ +a:link { text-decoration: none; color: #00004c; } +a:visited { text-decoration: none; color: #00004c; } +a:active { text-decoration: none; color: #00004c; } +a:hover { text-decoration: underline; color: #00004c; } diff --git a/extra/webapps/help/help.factor b/extra/webapps/help/help.factor new file mode 100644 index 0000000000..e9b6a48634 --- /dev/null +++ b/extra/webapps/help/help.factor @@ -0,0 +1,38 @@ +! Copyright (C) 2008 Slava Pestov. +! 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 help.html ; +IN: webapps.help + +TUPLE: help-webapp < dispatcher ; + +:: ( help-dir -- action ) + + { help-webapp "search" } >>template + + [ + { + { "search" [ 2 v-min-length 50 v-max-length v-one-line ] } + } validate-params + + help-dir set-current-directory + + "search" value article-apropos "articles" set-value + "search" value word-apropos "words" set-value + "search" value vocab-apropos "vocabs" set-value + + { help-webapp "search" } + ] >>submit ; + +: ( -- action ) + + { help-webapp "help" } >>template ; + +: ( help-dir -- webapp ) + help-webapp new-dispatcher + "" add-responder + over "search" add-responder + swap "content" add-responder ; + + diff --git a/extra/webapps/help/help.xml b/extra/webapps/help/help.xml new file mode 100644 index 0000000000..f71db15e19 --- /dev/null +++ b/extra/webapps/help/help.xml @@ -0,0 +1,20 @@ + + + + + + + + Factor Documentation + + + + + + + + + + diff --git a/extra/webapps/help/search.xml b/extra/webapps/help/search.xml new file mode 100644 index 0000000000..b763f11f88 --- /dev/null +++ b/extra/webapps/help/search.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + +

    Factor documentation

    + + + + + + + +

    Articles

    + +
      + +
    • +
      +
    +
    + + +

    Vocabularies

    + +
      + +
    • +
      +
    +
    + + +

    Words

    + +
      + +
    • +
      +
    +
    + + + + +
    From 55f46957afa4bd2f28169ca35ffcbd59223862ad Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 04:10:29 -0500 Subject: [PATCH 118/244] Update --- extra/websites/concatenative/concatenative.factor | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/extra/websites/concatenative/concatenative.factor b/extra/websites/concatenative/concatenative.factor index cc2b960f9f..4e6baa7271 100644 --- a/extra/websites/concatenative/concatenative.factor +++ b/extra/websites/concatenative/concatenative.factor @@ -38,6 +38,10 @@ IN: websites.concatenative TUPLE: factor-website < dispatcher ; +: ( responder -- responder' ) + + { factor-website "page" } >>template ; + : ( responder -- responder' ) "Factor website" "Factor website" >>name @@ -45,8 +49,6 @@ TUPLE: factor-website < dispatcher ; allow-password-recovery allow-edit-profile allow-deactivation - - { factor-website "page" } >>template test-db ; : ( -- responder ) @@ -74,15 +76,16 @@ SYMBOL: dh-file "pastebin" add-responder "planet" add-responder + main-responder set-global ; : init-production ( -- ) common-configuration - "concatenative.org" add-responder - "paste.factorcode.org" add-responder - "planet.factorcode.org" add-responder + "concatenative.org" add-responder + "paste.factorcode.org" add-responder + "planet.factorcode.org" add-responder main-responder set-global ; From bbd8c8cb899f4f33f19084c82df277fb324e32ee Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 04:23:42 -0500 Subject: [PATCH 119/244] Finishing up with help.html --- basis/help/html/html.factor | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/basis/help/html/html.factor b/basis/help/html/html.factor index 1e5d672658..763cc68c42 100644 --- a/basis/help/html/html.factor +++ b/basis/help/html/html.factor @@ -63,11 +63,11 @@ M: topic browser-link-href topic>filename ; : all-topics ( -- topics ) [ - ! articles get keys [ >link ] map % - ! all-words [ >link ] map % - ! all-authors [ ] map % + articles get keys [ >link ] map % + all-words [ >link ] map % + all-authors [ ] map % all-tags [ ] map % - ! all-vocabs-really % + all-vocabs-really % ] { } make ; : serialize-index ( index file -- ) @@ -79,9 +79,19 @@ M: topic browser-link-href topic>filename ; all-words [ dup name>> ] { } map>assoc "words.idx" serialize-index all-vocabs-really [ dup vocab-name ] { } map>assoc "vocabs.idx" serialize-index ; -: generate-help ( -- ) +: generate-help-files ( -- ) all-topics [ help>html ] each ; +: generate-help ( -- ) + { "resource:core" "resource:basis" "resource:extra" } vocab-roots [ + load-everything + + "/tmp/docs/" [ + generate-indices + generate-help-files + ] with-directory + ] with-variable ; + MEMO: load-index ( name -- index ) binary file-contents bytes>object ; From a75622f8136af702156343493b9eb4be0ca0133c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 05:03:05 -0500 Subject: [PATCH 120/244] Tweaking help webapp --- basis/help/html/html.factor | 2 ++ extra/webapps/help/help.xml | 2 +- extra/webapps/help/search.xml | 28 ++++++++++++++++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/basis/help/html/html.factor b/basis/help/html/html.factor index 763cc68c42..d14db69c5a 100644 --- a/basis/help/html/html.factor +++ b/basis/help/html/html.factor @@ -86,6 +86,8 @@ M: topic browser-link-href topic>filename ; { "resource:core" "resource:basis" "resource:extra" } vocab-roots [ load-everything + "/tmp/docs/" make-directory + "/tmp/docs/" [ generate-indices generate-help-files diff --git a/extra/webapps/help/help.xml b/extra/webapps/help/help.xml index f71db15e19..f4262a6f6a 100644 --- a/extra/webapps/help/help.xml +++ b/extra/webapps/help/help.xml @@ -11,7 +11,7 @@ - + diff --git a/extra/webapps/help/search.xml b/extra/webapps/help/search.xml index b763f11f88..b5c6eb3fac 100644 --- a/extra/webapps/help/search.xml +++ b/extra/webapps/help/search.xml @@ -7,18 +7,34 @@ + + -

    Factor documentation

    +

    Factor help

    +

    This documentation was generated offline from a Factor + image where load-everything was run.

    + +

    You may search article titles below.

    + -

    Articles

    +
    + +

    Articles

      @@ -28,7 +44,9 @@ -

      Vocabularies

      +
      + +

      Vocabularies

        @@ -38,7 +56,9 @@ -

        Words

        +
        + +

        Words

          From 6faa17289558a845ef0776a2c6d390ffca23cefa Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 05:08:16 -0500 Subject: [PATCH 121/244] Sort search results, better template --- basis/help/html/html.factor | 6 ++++-- extra/webapps/help/search.xml | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/basis/help/html/html.factor b/basis/help/html/html.factor index d14db69c5a..525db1352f 100644 --- a/basis/help/html/html.factor +++ b/basis/help/html/html.factor @@ -4,7 +4,8 @@ USING: io.encodings.utf8 io.encodings.ascii io.encodings.binary io.files html.streams html.elements html.components 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 ; +vocabs.loader serialize fry memoize unicode.case math.order +sorting ; IN: help.html : escape-char ( ch -- ) @@ -106,7 +107,8 @@ M: result link-href href>> ; : offline-apropos ( string index -- results ) load-index swap >lower '[ [ drop _ ] dip >lower subseq? ] assoc-filter - [ swap result boa ] { } assoc>map ; + [ swap result boa ] { } assoc>map + [ [ title>> ] compare ] sort ; : article-apropos ( string -- results ) "articles.idx" offline-apropos ; diff --git a/extra/webapps/help/search.xml b/extra/webapps/help/search.xml index b5c6eb3fac..5569698dc6 100644 --- a/extra/webapps/help/search.xml +++ b/extra/webapps/help/search.xml @@ -19,10 +19,12 @@

          Factor help

          + target="content">Factor documentation -

          This documentation was generated offline from a Factor - image where load-everything was run.

          +

          This is the Factor + documentation, generated offline from a + load-everything image. The Factor UI also + includes a documentation browser tool.

          You may search article titles below.

          From b1ad927d6935c4746f4bd8a4bd719aa6aabb5c63 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 05:13:44 -0500 Subject: [PATCH 122/244] Add help --- extra/websites/concatenative/concatenative.factor | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extra/websites/concatenative/concatenative.factor b/extra/websites/concatenative/concatenative.factor index 4e6baa7271..1be59e9868 100644 --- a/extra/websites/concatenative/concatenative.factor +++ b/extra/websites/concatenative/concatenative.factor @@ -20,7 +20,8 @@ furnace.redirection webapps.pastebin webapps.planet webapps.wiki -webapps.user-admin ; +webapps.user-admin +webapps.help ; IN: websites.concatenative : test-db ( -- params db ) "resource:test.db" sqlite-db ; @@ -76,6 +77,7 @@ SYMBOL: dh-file "pastebin" add-responder "planet" add-responder + "docs" add-responder main-responder set-global ; @@ -86,6 +88,7 @@ SYMBOL: dh-file "concatenative.org" add-responder "paste.factorcode.org" add-responder "planet.factorcode.org" add-responder + "docs.factorcode.org" add-responder main-responder set-global ; From cdc39718fdf3322bab2b37859d4348a5e6ba7d48 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 05:14:34 -0500 Subject: [PATCH 123/244] Fix stack effect --- extra/websites/concatenative/concatenative.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/websites/concatenative/concatenative.factor b/extra/websites/concatenative/concatenative.factor index 1be59e9868..71fc1116b3 100644 --- a/extra/websites/concatenative/concatenative.factor +++ b/extra/websites/concatenative/concatenative.factor @@ -77,7 +77,7 @@ SYMBOL: dh-file "pastebin" add-responder "planet" add-responder - "docs" add-responder + "/tmp/docs/" "docs" add-responder main-responder set-global ; @@ -88,7 +88,7 @@ SYMBOL: dh-file "concatenative.org" add-responder "paste.factorcode.org" add-responder "planet.factorcode.org" add-responder - "docs.factorcode.org" add-responder + home "docs" append-path "docs.factorcode.org" add-responder main-responder set-global ; From 372d7d49f9ab2d8aa92ad97591f13d5597a9836a Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 29 Sep 2008 11:41:01 -0700 Subject: [PATCH 124/244] Fix typos in basis/ui/grids/grids-docs. --- basis/ui/gadgets/grids/grids-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/ui/gadgets/grids/grids-docs.factor b/basis/ui/gadgets/grids/grids-docs.factor index 64e14c4961..1c00bedea8 100755 --- a/basis/ui/gadgets/grids/grids-docs.factor +++ b/basis/ui/gadgets/grids/grids-docs.factor @@ -6,7 +6,7 @@ ARTICLE: "ui-grid-layout" "Grid layouts" { $subsection grid } "Creating grids from a fixed set of gadgets:" { $subsection } -"Managing chidren:" +"Managing children:" { $subsection grid-add } { $subsection grid-remove } { $subsection grid-child } ; From 0476ca0eb15827122259c14718b52cfdef9696fd Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 29 Sep 2008 15:10:56 -0700 Subject: [PATCH 125/244] Cleaning up some bubble-chamber docs. --- .../bubble-chamber/bubble-chamber-docs.factor | 56 +++++++------------ 1 file changed, 19 insertions(+), 37 deletions(-) diff --git a/extra/bubble-chamber/bubble-chamber-docs.factor b/extra/bubble-chamber/bubble-chamber-docs.factor index 47331efd7e..72ffb63848 100644 --- a/extra/bubble-chamber/bubble-chamber-docs.factor +++ b/extra/bubble-chamber/bubble-chamber-docs.factor @@ -55,48 +55,30 @@ HELP: axion ARTICLE: "bubble-chamber" "Bubble Chamber" - { $subsection "bubble-chamber-introduction" } - { $subsection "bubble-chamber-particles" } - { $subsection "bubble-chamber-author" } - { $subsection "bubble-chamber-running" } ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -ARTICLE: "bubble-chamber-introduction" "Introduction" - -"The Bubble Chamber is a generative painting system of imaginary " +"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. " ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -ARTICLE: "bubble-chamber-particles" "Particles" - +"positions over time as pixel exposures.\n" +"\n" "Four types of particles exist. The behavior and graphic appearance of " -"each particle type is unique." - +"each particle type is unique.\n" { $subsection muon } { $subsection quark } { $subsection hadron } - { $subsection axion } ; + { $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" -ARTICLE: "bubble-chamber-author" "Author" - - "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/" } ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -ARTICLE: "bubble-chamber-running" "How to use" - - "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." ; \ No newline at end of file From 011726f86345c031512577ff56b3f2b8fb892a7b Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 17:15:03 -0500 Subject: [PATCH 126/244] Counter fix --- extra/webapps/counter/counter.factor | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extra/webapps/counter/counter.factor b/extra/webapps/counter/counter.factor index f49d8f008e..a5c9fbc6b9 100644 --- a/extra/webapps/counter/counter.factor +++ b/extra/webapps/counter/counter.factor @@ -27,8 +27,7 @@ M: counter-app init-session* drop 0 count sset ; counter-app new-dispatcher [ 1+ ] "inc" add-responder [ 1- ] "dec" add-responder - "" add-responder - ; + "" add-responder ; ! Deployment example USING: db.sqlite furnace.alloy namespaces ; From 27c565c5ea9181f544ef39040424350311f8961e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 29 Sep 2008 17:16:47 -0500 Subject: [PATCH 127/244] Minor template fixes --- extra/webapps/help/search.xml | 2 +- extra/webapps/pastebin/pastebin-common.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/webapps/help/search.xml b/extra/webapps/help/search.xml index 5569698dc6..8335725ce5 100644 --- a/extra/webapps/help/search.xml +++ b/extra/webapps/help/search.xml @@ -21,7 +21,7 @@

          Factor documentation

          -

          This is the Factor +

          This is the Factor documentation, generated offline from a load-everything image. The Factor UI also includes a documentation browser tool.

          diff --git a/extra/webapps/pastebin/pastebin-common.xml b/extra/webapps/pastebin/pastebin-common.xml index b95f3f7b64..6d524ad86f 100644 --- a/extra/webapps/pastebin/pastebin-common.xml +++ b/extra/webapps/pastebin/pastebin-common.xml @@ -8,7 +8,7 @@