\ Forth package manager api \ (c)copyright 2015-2016 by Gerald Wodni \ TODO : wrap this into a vocubulary, add sub-vacabularies for each response-type for maximum security 15 constant name-length \ -- package info -- \ TODO : load wordlist for packages-response : forth-packages ; \ TODO : unload wordlist for packages-response : end-forth-packages ; \ show package name and description : name-description ( -- ) \ name vt-bold vt-magenta parse-name dup >r type \ space name-length r> - 1 max spaces \ description vt-normal 10 parse type vt-color-off cr ; \ -- package download -- : package-content ( -- c-addr-directory n-directory ) vt-magenta vt-bold ." package-content: " vt-normal parse-name parse-name 2over type ." v:" 2dup type fdirectory 2@ $prefix$name$version+ \ create package directory vt-bold 2dup create-directories ?dup if vt-red ." ERROR" vt-default throw else vt-green ." ok" then vt-default cr ; : end-package-content ( c-addr-directory n-directory -- ) drop freet vt-magenta vt-bold ." end-package-content" cr vt-default ; \ TODO: hide in final wordset \ merge prefix and path, keep copy of address for easy free : _merge-path ( c-addr-pre n-pre c-addr-path n-path -- c-addr-pre n-pre c-addr-merged c-addr-merged n-merged ) 2over 2swap \ copy prefix $+ \ add strings over -rot ; \ save address : directory ( -- ) vt-bold vt-magenta ." directory " vt-normal parse-name \ parse dirname 2dup type bl emit vt-bold _merge-path create-directories swap freet ?dup if vt-red ." ERROR" vt-default throw else vt-green ." ok" then vt-default cr ; \ TODO: hide in final wordset \ write content into file : _burp-file ( c-addr-content n-content c-addr-filename n-filename -- ) w/o create-file throw >r r@ write-file throw r> close-file throw ; : file ( -- ) vt-bold vt-magenta ." file " parse-name \ parse filename parse-name \ parse link 2over vt-normal type bl emit api-host http-slurp 200 = if vt-default 2>r \ content _merge-path 2r> 2swap \ get merged path and content _burp-file \ store in file freet vt-bold vt-green ." ok" else vt-bold vt-red . type 2drop then vt-default cr ;