53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2014 John Benediktsson
 | 
						|
! See http://factorcode.org/license.txt for BSD license
 | 
						|
 | 
						|
USING: alien alien.c-types alien.data alien.destructors
 | 
						|
alien.syntax command-line curl.ffi destructors io
 | 
						|
io.encodings.string io.encodings.utf8 io.streams.c kernel math
 | 
						|
namespaces present sequences ;
 | 
						|
 | 
						|
IN: curl
 | 
						|
 | 
						|
<PRIVATE
 | 
						|
 | 
						|
DESTRUCTOR: curl_easy_cleanup
 | 
						|
 | 
						|
DESTRUCTOR: fclose
 | 
						|
 | 
						|
: check-code ( code -- )
 | 
						|
    CURLE_OK assert= ;
 | 
						|
 | 
						|
: curl-init ( -- CURL )
 | 
						|
    curl_easy_init &curl_easy_cleanup ;
 | 
						|
 | 
						|
: curl-set-opt ( CURL key value -- )
 | 
						|
    curl_easy_setopt check-code ;
 | 
						|
 | 
						|
: curl-set-url ( CURL url -- )
 | 
						|
    CURLOPT_URL swap present curl-set-opt ;
 | 
						|
 | 
						|
: curl-set-file ( CURL path -- )
 | 
						|
    CURLOPT_FILE swap "wb" fopen &fclose curl-set-opt ;
 | 
						|
 | 
						|
: curl-perform ( CURL -- )
 | 
						|
    curl_easy_perform check-code ;
 | 
						|
 | 
						|
PRIVATE>
 | 
						|
 | 
						|
: curl-download-to ( url path -- )
 | 
						|
    [
 | 
						|
        curl-init
 | 
						|
        [ swap curl-set-file ]
 | 
						|
        [ swap curl-set-url ]
 | 
						|
        [ curl-perform ] tri
 | 
						|
    ] with-destructors ;
 | 
						|
 | 
						|
: curl-main ( -- )
 | 
						|
    command-line get [
 | 
						|
        curl-init
 | 
						|
        [ swap curl-set-url ]
 | 
						|
        [ curl-perform ] bi
 | 
						|
    ] each ;
 | 
						|
 | 
						|
MAIN: curl-main
 |