* new (ikarus io-primitives unsafe) library exporting $write-char
$read-char $unread-char $peek-char $reset-input-port! $flush-output-port $close-input-port $close-output-port
This commit is contained in:
parent
3d79b43612
commit
cc5b8d1c08
BIN
src/ikarus.boot
BIN
src/ikarus.boot
Binary file not shown.
|
@ -0,0 +1,66 @@
|
||||||
|
|
||||||
|
(library (ikarus io-primitives unsafe)
|
||||||
|
(export $write-char $read-char $unread-char $peek-char
|
||||||
|
$reset-input-port! $flush-output-port
|
||||||
|
$close-input-port $close-output-port)
|
||||||
|
(import
|
||||||
|
(ikarus)
|
||||||
|
(only (scheme) $port-handler $port-output-buffer
|
||||||
|
$set-port-output-index! $port-output-size
|
||||||
|
$set-port-input-index! $port-input-buffer $port-input-size
|
||||||
|
$set-port-input-size!
|
||||||
|
$port-input-index
|
||||||
|
$fxadd1 $fxsub1 $fx< $fx>= $string-ref
|
||||||
|
$string-length $string-set!))
|
||||||
|
|
||||||
|
(define $write-char
|
||||||
|
(lambda (c p)
|
||||||
|
(let ([idx (port-output-index p)])
|
||||||
|
(if ($fx< idx ($port-output-size p))
|
||||||
|
(begin
|
||||||
|
($string-set! ($port-output-buffer p) idx c)
|
||||||
|
($set-port-output-index! p ($fxadd1 idx)))
|
||||||
|
(($port-handler p) 'write-char c p)))))
|
||||||
|
|
||||||
|
(define $read-char
|
||||||
|
(lambda (p)
|
||||||
|
(let ([idx ($port-input-index p)])
|
||||||
|
(if ($fx< idx ($port-input-size p))
|
||||||
|
(begin
|
||||||
|
($set-port-input-index! p ($fxadd1 idx))
|
||||||
|
($string-ref ($port-input-buffer p) idx))
|
||||||
|
(begin
|
||||||
|
(($port-handler p) 'read-char p))))))
|
||||||
|
|
||||||
|
(define $peek-char
|
||||||
|
(lambda (p)
|
||||||
|
(let ([idx ($port-input-index p)])
|
||||||
|
(if ($fx< idx ($port-input-size p))
|
||||||
|
($string-ref ($port-input-buffer p) idx)
|
||||||
|
(($port-handler p) 'peek-char p)))))
|
||||||
|
|
||||||
|
(define $unread-char
|
||||||
|
(lambda (c p)
|
||||||
|
(let ([idx ($fxsub1 ($port-input-index p))])
|
||||||
|
(if (and ($fx>= idx 0)
|
||||||
|
($fx< idx ($port-input-size p)))
|
||||||
|
(begin
|
||||||
|
($set-port-input-index! p idx)
|
||||||
|
($string-set! ($port-input-buffer p) idx c))
|
||||||
|
(($port-handler p) 'unread-char c p)))))
|
||||||
|
|
||||||
|
(define $reset-input-port!
|
||||||
|
(lambda (p)
|
||||||
|
($set-port-input-size! p 0)))
|
||||||
|
|
||||||
|
(define $close-input-port
|
||||||
|
(lambda (p)
|
||||||
|
(($port-handler p) 'close-port p)))
|
||||||
|
|
||||||
|
(define $close-output-port
|
||||||
|
(lambda (p)
|
||||||
|
(($port-handler p) 'close-port p)))
|
||||||
|
|
||||||
|
(define $flush-output-port
|
||||||
|
(lambda (p)
|
||||||
|
(($port-handler p) 'flush-output-port p))))
|
|
@ -33,14 +33,6 @@
|
||||||
|
|
||||||
(let () ;;; IO PRIMITIVES
|
(let () ;;; IO PRIMITIVES
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! '$write-char
|
|
||||||
(lambda (c p)
|
|
||||||
(let ([idx (port-output-index p)])
|
|
||||||
(if ($fx< idx ($port-output-size p))
|
|
||||||
(begin
|
|
||||||
($string-set! ($port-output-buffer p) idx c)
|
|
||||||
($set-port-output-index! p ($fxadd1 idx)))
|
|
||||||
(($port-handler p) 'write-char c p)))))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! 'write-char
|
(primitive-set! 'write-char
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
@ -74,15 +66,6 @@
|
||||||
(error 'port-name "~s is not a port" p))))
|
(error 'port-name "~s is not a port" p))))
|
||||||
(primitive-set! 'input-port-name port-name)
|
(primitive-set! 'input-port-name port-name)
|
||||||
(primitive-set! 'output-port-name port-name)
|
(primitive-set! 'output-port-name port-name)
|
||||||
(primitive-set! '$read-char
|
|
||||||
(lambda (p)
|
|
||||||
(let ([idx ($port-input-index p)])
|
|
||||||
(if ($fx< idx ($port-input-size p))
|
|
||||||
(begin
|
|
||||||
($set-port-input-index! p ($fxadd1 idx))
|
|
||||||
($string-ref ($port-input-buffer p) idx))
|
|
||||||
(begin
|
|
||||||
(($port-handler p) 'read-char p))))))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! 'read-char
|
(primitive-set! 'read-char
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
@ -92,15 +75,6 @@
|
||||||
($read-char p)
|
($read-char p)
|
||||||
(error 'read-char "~s is not an input-port" p))]))
|
(error 'read-char "~s is not an input-port" p))]))
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! '$unread-char
|
|
||||||
(lambda (c p)
|
|
||||||
(let ([idx ($fxsub1 ($port-input-index p))])
|
|
||||||
(if (and ($fx>= idx 0)
|
|
||||||
($fx< idx ($port-input-size p)))
|
|
||||||
(begin
|
|
||||||
($set-port-input-index! p idx)
|
|
||||||
($string-set! ($port-input-buffer p) idx c))
|
|
||||||
(($port-handler p) 'unread-char c p)))))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! 'unread-char
|
(primitive-set! 'unread-char
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
@ -114,12 +88,6 @@
|
||||||
(error 'unread-char "~s is not a character" c))
|
(error 'unread-char "~s is not a character" c))
|
||||||
(error 'unread-char "~s is not an input-port" p))]))
|
(error 'unread-char "~s is not an input-port" p))]))
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! '$peek-char
|
|
||||||
(lambda (p)
|
|
||||||
(let ([idx ($port-input-index p)])
|
|
||||||
(if ($fx< idx ($port-input-size p))
|
|
||||||
($string-ref ($port-input-buffer p) idx)
|
|
||||||
(($port-handler p) 'peek-char p)))))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! 'peek-char
|
(primitive-set! 'peek-char
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
@ -129,19 +97,7 @@
|
||||||
($peek-char p)
|
($peek-char p)
|
||||||
(error 'peek-char "~s is not an input-port" p))]))
|
(error 'peek-char "~s is not an input-port" p))]))
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! '$unread-char
|
|
||||||
(lambda (c p)
|
|
||||||
(let ([idx ($fxsub1 ($port-input-index p))])
|
|
||||||
(if (and ($fx>= idx 0)
|
|
||||||
($fx< idx ($port-input-size p)))
|
|
||||||
(begin
|
|
||||||
($set-port-input-index! p idx)
|
|
||||||
($string-set! ($port-input-buffer p) idx c))
|
|
||||||
(($port-handler p) 'unread-char c p)))))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! '$reset-input-port!
|
|
||||||
(lambda (p)
|
|
||||||
($set-port-input-size! p 0)))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! 'reset-input-port!
|
(primitive-set! 'reset-input-port!
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
@ -151,9 +107,6 @@
|
||||||
($reset-input-port! p)
|
($reset-input-port! p)
|
||||||
(error 'reset-input-port! "~s is not an input-port" p))]))
|
(error 'reset-input-port! "~s is not an input-port" p))]))
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! '$close-input-port
|
|
||||||
(lambda (p)
|
|
||||||
(($port-handler p) 'close-port p)))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! 'close-input-port
|
(primitive-set! 'close-input-port
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
@ -163,9 +116,6 @@
|
||||||
($close-input-port p)
|
($close-input-port p)
|
||||||
(error 'close-input-port! "~s is not an input-port" p))]))
|
(error 'close-input-port! "~s is not an input-port" p))]))
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! '$close-output-port
|
|
||||||
(lambda (p)
|
|
||||||
(($port-handler p) 'close-port p)))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! 'close-output-port
|
(primitive-set! 'close-output-port
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
@ -175,9 +125,6 @@
|
||||||
($close-output-port p)
|
($close-output-port p)
|
||||||
(error 'close-output-port "~s is not an output-port" p))]))
|
(error 'close-output-port "~s is not an output-port" p))]))
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! '$flush-output-port
|
|
||||||
(lambda (p)
|
|
||||||
(($port-handler p) 'flush-output-port p)))
|
|
||||||
;;;
|
;;;
|
||||||
(primitive-set! 'flush-output-port
|
(primitive-set! 'flush-output-port
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
|
|
@ -42,7 +42,9 @@
|
||||||
"ikarus.command-line.ss"
|
"ikarus.command-line.ss"
|
||||||
|
|
||||||
"ikarus.core.ss"
|
"ikarus.core.ss"
|
||||||
|
|
||||||
"ikarus.io-ports.ss"
|
"ikarus.io-ports.ss"
|
||||||
|
"ikarus.io-primitives.unsafe.ss"
|
||||||
|
|
||||||
"libchezio.ss"
|
"libchezio.ss"
|
||||||
"libhash.ss"
|
"libhash.ss"
|
||||||
|
|
Loading…
Reference in New Issue