drop ;
: knucleotide ( -- )
- "extra/benchmark/knucleotide/knucleotide-input.txt" resource-path
+ "resource:extra/benchmark/knucleotide/knucleotide-input.txt"
ascii [ read-input ] with-file-reader
process-input ;
: generate ( generator predicate -- obj )
[ dup ] swap [ dup [ nip ] unless not ] 3compose
swap [ ] do-while ;
+
+MACRO: predicates ( seq -- quot/f )
+ dup [ 1quotation [ drop ] prepend ] map
+ >r [ [ dup ] prepend ] map r> zip [ drop f ] suffix
+ [ cond ] curry ;
: check-example ( element -- )
rest [
- 1 head* "\n" join 1vector
+ butlast "\n" join 1vector
[
use [ clone ] change
[ eval>string ] with-datastack
: find-between ( i/f tag/f vector -- vector )
find-between* dup length 3 >= [
- [ rest-slice 1 head-slice* ] keep like
+ [ rest-slice butlast-slice ] keep like
] when ;
: find-between-first ( string vector -- vector' )
dup quoted? [ quote ] unless ;
: unquote ( str -- newstr )
- dup quoted? [ 1 head-slice* rest-slice >string ] when ;
+ dup quoted? [ butlast-slice rest-slice >string ] when ;
: quote? ( ch -- ? ) "'\"" member? ;
<dispatcher>
add-quit-action
<dispatcher>
- "extra/http/test" resource-path <static> >>default
+ "resource:extra/http/test" <static> >>default
"nested" add-responder
<action>
[ "redirect-loop" f <standard-redirect> ] >>display
] unit-test
[ t ] [
- "extra/http/test/foo.html" resource-path ascii file-contents
+ "resource:extra/http/test/foo.html" ascii file-contents
"http://localhost:1237/nested/foo.html" http-get =
] unit-test
init f exec-loop ;
: run-sand ( -- )
- "extra/icfp/2006/sandmark.umz" resource-path run-prog ;
+ "resource:extra/icfp/2006/sandmark.umz" run-prog ;
\ prefix [ unclip ] define-inverse
\ unclip [ prefix ] define-inverse
-\ suffix [ dup 1 head* swap peek ] define-inverse
+\ suffix [ dup butlast swap peek ] define-inverse
! Constructor inverse
: deconstruct-pred ( class -- quot )
} ;
: encoding-file ( file-name -- stream )
- "extra/io/encodings/8-bit/" ".TXT"
- swapd 3append resource-path
- ascii <file-reader> ;
+ "resource:extra/io/encodings/8-bit/" ".TXT"
+ swapd 3append ascii <file-reader> ;
: tail-if ( seq n -- newseq )
2dup swap length <= [ tail ] [ drop ] if ;
] unit-test\r
\r
[ ] [\r
- "extra/io/windows/nt/launcher/test" resource-path [\r
+ "resource:extra/io/windows/nt/launcher/test" [\r
<process>\r
vm "-script" "stderr.factor" 3array >>command\r
"out.txt" temp-file >>stdout\r
] unit-test\r
\r
[ ] [\r
- "extra/io/windows/nt/launcher/test" resource-path [\r
+ "resource:extra/io/windows/nt/launcher/test" [\r
<process>\r
vm "-script" "stderr.factor" 3array >>command\r
"out.txt" temp-file >>stdout\r
] unit-test\r
\r
[ "output" ] [\r
- "extra/io/windows/nt/launcher/test" resource-path [\r
+ "resource:extra/io/windows/nt/launcher/test" [\r
<process>\r
vm "-script" "stderr.factor" 3array >>command\r
"err2.txt" temp-file >>stderr\r
] unit-test\r
\r
[ t ] [\r
- "extra/io/windows/nt/launcher/test" resource-path [\r
+ "resource:extra/io/windows/nt/launcher/test" [\r
<process>\r
vm "-script" "env.factor" 3array >>command\r
ascii <process-reader> contents\r
] unit-test\r
\r
[ t ] [\r
- "extra/io/windows/nt/launcher/test" resource-path [\r
+ "resource:extra/io/windows/nt/launcher/test" [\r
<process>\r
vm "-script" "env.factor" 3array >>command\r
+replace-environment+ >>environment-mode\r
] unit-test\r
\r
[ "B" ] [\r
- "extra/io/windows/nt/launcher/test" resource-path [\r
+ "resource:extra/io/windows/nt/launcher/test" [\r
<process>\r
vm "-script" "env.factor" 3array >>command\r
{ { "A" "B" } } >>environment\r
] unit-test\r
\r
[ f ] [\r
- "extra/io/windows/nt/launcher/test" resource-path [\r
+ "resource:extra/io/windows/nt/launcher/test" [\r
<process>\r
vm "-script" "env.factor" 3array >>command\r
{ { "HOME" "XXX" } } >>environment\r
[ length ] keep [ (graded-ker/im-d) ] curry map ;
: graded-betti ( generators -- seq )
- basis graded graded-ker/im-d flip first2 1 head* 0 prefix v- ;
+ basis graded graded-ker/im-d flip first2 butlast 0 prefix v- ;
! Bi-graded for two-step complexes
: (bigraded-ker/im-d) ( u-deg z-deg bigraded-basis -- null/rank )
] if ;
: point-free-body ( quot args -- newquot )
- >r 1 head-slice* r> [ localize ] curry map concat ;
+ >r butlast-slice r> [ localize ] curry map concat ;
: point-free-end ( quot args -- newquot )
over peek special?
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: send-message-next ( object message -- )
-over object-class class-methods 1 head* assoc-stack call ;
+over object-class class-methods butlast assoc-stack call ;
: <-~ scan parsed \ send-message-next parsed ; parsing
] [ ";" unexpected-eof ] if* ;
: parse-here ( -- str )
- [ (parse-here) ] "" make 1 head*
+ [ (parse-here) ] "" make butlast
lexer get next-line ;
: STRING:
[
lexer get lexer-column swap (parse-multiline-string)
lexer get set-lexer-column
- ] "" make rest 1 head* ;
+ ] "" make rest butlast ;
: <"
"\">" parse-multiline-string parsed ; parsing
[ ] [ ssl-v23 new-ctx ] unit-test
-[ ] [ get-ctx "extra/openssl/test/server.pem" resource-path use-cert-chain ] unit-test
+[ ] [ get-ctx "resource:extra/openssl/test/server.pem" use-cert-chain ] unit-test
! TODO: debug 'Memory protection fault at address 6c'
! get-ctx 1024 "char" malloc-array 1024 0 f password-cb set-default-passwd
[ ] [ get-ctx "password" ascii string>alien set-default-passwd-userdata ] unit-test
! Enter PEM pass phrase: password
-[ ] [ get-ctx "extra/openssl/test/server.pem" resource-path
+[ ] [ get-ctx "resource:extra/openssl/test/server.pem"
SSL_FILETYPE_PEM use-private-key ] unit-test
-[ ] [ get-ctx "extra/openssl/test/root.pem" resource-path f
+[ ] [ get-ctx "resource:extra/openssl/test/root.pem" f
verify-load-locations ] unit-test
[ ] [ get-ctx 1 set-verify-depth ] unit-test
! Load Diffie-Hellman parameters
! =========================================================
-[ ] [ "extra/openssl/test/dh1024.pem" resource-path "r" bio-new-file ] unit-test
+[ ] [ "resource:extra/openssl/test/dh1024.pem" "r" bio-new-file ] unit-test
[ ] [ get-bio f f f read-pem-dh-params ] unit-test
! Dump errors to file
! =========================================================
-[ ] [ "extra/openssl/test/errors.txt" resource-path "w" bio-new-file ] unit-test
+[ ] [ "resource:extra/openssl/test/errors.txt" "w" bio-new-file ] unit-test
[ 6 ] [ get-bio "Hello\n" bio-print ] unit-test
[ "hell" ] [ "hell" step5 "" like ] unit-test
[ "mate" ] [ "mate" step5 "" like ] unit-test
-: resource-lines resource-path utf8 file-lines ;
-
[ { } ] [
- "extra/porter-stemmer/test/voc.txt" resource-lines
+ "resource:extra/porter-stemmer/test/voc.txt" utf8 file-lines
[ stem ] map
- "extra/porter-stemmer/test/output.txt" resource-lines
+ "resource:extra/porter-stemmer/test/output.txt" utf8 file-lines
[ 2array ] 2map [ first2 = not ] filter
] unit-test
: r ( str oldsuffix newsuffix -- str )
pick consonant-seq 0 > [ nip ] [ drop ] if append ;
-: butlast ( seq -- seq ) 1 head-slice* ;
-
: step1a ( str -- newstr )
dup peek CHAR: s = [
{
{ [ "iz" ?tail ] [ "ize" append ] }
{
[ dup length 1- over double-consonant? ]
- [ dup "lsz" last-is? [ butlast ] unless ]
+ [ dup "lsz" last-is? [ butlast-slice ] unless ]
}
{
[ t ]
} cond ;
: step1c ( str -- newstr )
- dup butlast stem-vowel? [
+ dup butlast-slice stem-vowel? [
"y" ?tail [ "i" append ] when
] when ;
: remove-e? ( str -- ? )
dup consonant-seq dup 1 >
[ 2drop t ]
- [ 1 = [ butlast cvc? not ] [ drop f ] if ] if ;
+ [ 1 = [ butlast-slice cvc? not ] [ drop f ] if ] if ;
: remove-e ( str -- newstr )
dup peek CHAR: e = [
- dup remove-e? [ butlast ] when
+ dup remove-e? [ butlast-slice ] when
] when ;
: ll->l ( str -- newstr )
{
{ [ dup peek CHAR: l = not ] [ ] }
{ [ dup length 1- over double-consonant? not ] [ ] }
- { [ dup consonant-seq 1 > ] [ butlast ] }
+ { [ dup consonant-seq 1 > ] [ butlast-slice ] }
[ ]
} cond ;
: fib-upto* ( n -- seq )
0 1 [ pick over >= ] [ tuck + dup ] [ ] unfold 3nip
- 1 head-slice* { 0 1 } prepend ;
+ butlast-slice { 0 1 } prepend ;
: euler002a ( -- answer )
1000000 fib-upto* [ even? ] filter sum ;
<PRIVATE
: source-022 ( -- seq )
- "extra/project-euler/022/names.txt" resource-path
+ "resource:extra/project-euler/022/names.txt"
ascii file-contents [ quotable? ] filter "," split ;
: name-scores ( seq -- seq )
<PRIVATE
: source-042 ( -- seq )
- "extra/project-euler/042/words.txt" resource-path
+ "resource:extra/project-euler/042/words.txt"
ascii file-contents [ quotable? ] filter "," split ;
: (triangle-upto) ( limit n -- )
<PRIVATE
: source-059 ( -- seq )
- "extra/project-euler/059/cipher1.txt" resource-path
+ "resource:extra/project-euler/059/cipher1.txt"
ascii file-contents [ blank? ] right-trim "," split
[ string>number ] map ;
frequency-analysis sort-values keys peek ;
: crack-key ( seq key-length -- key )
- [ " " decrypt ] dip group 1 head-slice*
+ [ " " decrypt ] dip group butlast-slice
flip [ most-frequent ] map ;
PRIVATE>
<PRIVATE
: source-067 ( -- seq )
- "extra/project-euler/067/triangle.txt" resource-path
+ "resource:extra/project-euler/067/triangle.txt"
ascii file-lines [ " " split [ string>number ] map ] map ;
PRIVATE>
<PRIVATE
: source-079 ( -- seq )
- "extra/project-euler/079/keylog.txt" resource-path ascii file-lines ;
+ "resource:extra/project-euler/079/keylog.txt" ascii file-lines ;
: >edges ( seq -- seq )
[
f
}
}
-} ] [ "extra/rss/rss1.xml" resource-path load-news-file ] unit-test
+} ] [ "resource:extra/rss/rss1.xml" load-news-file ] unit-test
[ T{
feed
f
T{ timestamp f 2003 12 13 8 29 29 T{ duration f 0 0 0 -4 0 0 } }
}
}
-} ] [ "extra/rss/atom.xml" resource-path load-news-file ] unit-test
+} ] [ "resource:extra/rss/atom.xml" load-news-file ] unit-test
: init-sound ( index cpu filename -- )
swapd >r space-invaders-sounds nth AL_BUFFER r>
- resource-path create-buffer-from-wav set-source-param ;
+ create-buffer-from-wav set-source-param ;
: init-sounds ( cpu -- )
init-openal
[ 9 gen-sources swap set-space-invaders-sounds ] keep
- [ SOUND-SHOT "extra/space-invaders/resources/Shot.wav" init-sound ] keep
- [ SOUND-UFO "extra/space-invaders/resources/Ufo.wav" init-sound ] keep
+ [ SOUND-SHOT "resource:extra/space-invaders/resources/Shot.wav" init-sound ] keep
+ [ SOUND-UFO "resource:extra/space-invaders/resources/Ufo.wav" init-sound ] keep
[ space-invaders-sounds SOUND-UFO swap nth AL_LOOPING AL_TRUE set-source-param ] keep
- [ SOUND-BASE-HIT "extra/space-invaders/resources/BaseHit.wav" init-sound ] keep
- [ SOUND-INVADER-HIT "extra/space-invaders/resources/InvHit.wav" init-sound ] keep
- [ SOUND-WALK1 "extra/space-invaders/resources/Walk1.wav" init-sound ] keep
- [ SOUND-WALK2 "extra/space-invaders/resources/Walk2.wav" init-sound ] keep
- [ SOUND-WALK3 "extra/space-invaders/resources/Walk3.wav" init-sound ] keep
- [ SOUND-WALK4 "extra/space-invaders/resources/Walk4.wav" init-sound ] keep
- [ SOUND-UFO-HIT "extra/space-invaders/resources/UfoHit.wav" init-sound ] keep
+ [ SOUND-BASE-HIT "resource:extra/space-invaders/resources/BaseHit.wav" init-sound ] keep
+ [ SOUND-INVADER-HIT "resource:extra/space-invaders/resources/InvHit.wav" init-sound ] keep
+ [ SOUND-WALK1 "resource:extra/space-invaders/resources/Walk1.wav" init-sound ] keep
+ [ SOUND-WALK2 "resource:extra/space-invaders/resources/Walk2.wav" init-sound ] keep
+ [ SOUND-WALK3 "resource:extra/space-invaders/resources/Walk3.wav" init-sound ] keep
+ [ SOUND-WALK4 "resource:extra/space-invaders/resources/Walk4.wav" init-sound ] keep
+ [ SOUND-UFO-HIT "resource:extra/space-invaders/resources/UfoHit.wav" init-sound ] keep
f swap set-space-invaders-looping? ;
: <space-invaders> ( -- cpu )
: <tangle-dispatcher> ( tangle -- dispatcher )
tangle-dispatcher new-dispatcher swap >>tangle
<path-responder> >>default
- "extra/tangle/resources" resource-path <static> "resources" add-responder
+ "resource:extra/tangle/resources" <static> "resources" add-responder
<node-responder> "node" add-responder
<action> [ all-node-ids <json-response> ] >>display "all" add-responder ;
dup empty? [
"-i=" my-boot-image-name append ,
] [
- dup 1 head* ?make-staging-image
+ dup butlast ?make-staging-image
"-resource-path=" "" resource-path append ,
- "-i=" over 1 head* staging-image-name append ,
+ "-i=" over butlast staging-image-name append ,
"-run=tools.deploy.restage" ,
] if
: parse-slot-writer ( tuple -- slot# )
scan dup "}" = [ 2drop f ] [
- 1 head* swap object-slots slot-named slot-spec-offset
+ butlast swap object-slots slot-named slot-spec-offset
] if ;
: parse-slots ( accum tuple -- accum tuple )
TUPLE: zoom-out-action ; C: <zoom-out-action> zoom-out-action
: generalize-gesture ( gesture -- newgesture )
- tuple>array 1 head* >tuple ;
+ tuple>array butlast >tuple ;
! Modifiers
SYMBOLS: C+ A+ M+ S+ ;
concat [ dup ] H{ } map>assoc ;
: other-extend-lines ( -- lines )
- "extra/unicode/PropList.txt" resource-path ascii file-lines ;
+ "resource:extra/unicode/PropList.txt" ascii file-lines ;
VALUE: other-extend
ascii file-lines [ ";" split ] map ;
: load-data ( -- data )
- "extra/unicode/UnicodeData.txt" resource-path data ;
+ "resource:extra/unicode/UnicodeData.txt" data ;
: (process-data) ( index data -- newdata )
[ [ nth ] keep first swap 2array ] with map
! Special casing data
: load-special-casing ( -- special-casing )
- "extra/unicode/SpecialCasing.txt" resource-path data
+ "resource:extra/unicode/SpecialCasing.txt" data
[ length 5 = ] filter
[ [ set-code-point ] each ] H{ } make-assoc ;
[ assemble-data ] map ;
[ "http://www.foxnews.com/oreilly/" ] [
- "extra/xml/tests/soap.xml" resource-path file>xml
+ "resource:extra/xml/tests/soap.xml" file>xml
parse-result first first
] unit-test
\ read-xml must-infer
SYMBOL: xml-file
-[ ] [ "extra/xml/tests/test.xml" resource-path
+[ ] [ "resource:extra/xml/tests/test.xml"
[ file>xml ] with-html-entities xml-file set ] unit-test
[ "1.0" ] [ xml-file get xml-prolog prolog-version ] unit-test
[ f ] [ xml-file get xml-prolog prolog-standalone ] unit-test
] keep ;
: load-catalog ( -- modes )
- "extra/xmode/modes/catalog" resource-path
+ "resource:extra/xmode/modes/catalog"
file>xml parse-modes-tag ;
: modes ( -- assoc )
MEMO: (load-mode) ( name -- rule-sets )
modes at [
mode-file
- "extra/xmode/modes/" prepend
- resource-path utf8 <file-reader> parse-mode
+ "resource:extra/xmode/modes/" prepend
+ utf8 <file-reader> parse-mode
] [
"text" (load-mode)
] if* ;
: default-stylesheet ( -- )
<style>
- "extra/xmode/code2html/stylesheet.css"
- resource-path utf8 file-contents write
+ "resource:extra/xmode/code2html/stylesheet.css"
+ utf8 file-contents write
</style> ;
: htmlize-stream ( path stream -- )
"This is a great company"
}
] [
- "extra/xmode/utilities/test.xml"
- resource-path file>xml parse-company-tag
+ "resource:extra/xmode/utilities/test.xml"
+ file>xml parse-company-tag
] unit-test
"Official Foo Fighters"
"http://www.foofighters.com/"
"Official site with news, tour dates, discography, store, community, and more."
-} ] [ "extra/yahoo/test-results.xml" resource-path file>xml parse-yahoo first ] unit-test
+} ] [ "resource:extra/yahoo/test-results.xml" file>xml parse-yahoo first ] unit-test
[ "http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=Factor-search&query=hi&results=1" ] [ "hi" 1 query ] unit-test