: twiddle-thumbs ( overlapped port -- bytes-transferred )
[
drop
- [ >c-ptr pending-overlapped get-global set-at ] curry "I/O" suspend
- {
+ [ self ] dip >c-ptr pending-overlapped get-global set-at
+ "I/O" suspend {
{ [ dup integer? ] [ ] }
{ [ dup array? ] [
first dup eof?
] with-timeout ;
:: wait-for-overlapped ( nanos -- bytes-transferred overlapped error? )
- master-completion-port get-global
- 0 <int> :> bytes
- f <void*> :> key
- f <void*> :> overlapped
nanos [ 1,000,000 /i ] [ INFINITE ] if* :> timeout
- bytes key overlapped timeout GetQueuedCompletionStatus zero? :> error?
-
- bytes *int
- overlapped *void* dup [ OVERLAPPED memory>struct ] when
- error? ;
+ master-completion-port get-global
+ { int void* pointer: OVERLAPPED }
+ [ timeout GetQueuedCompletionStatus zero? ] [ ] with-out-parameters
+ :> ( error? bytes key overlapped )
+ bytes overlapped error? ;
: resume-callback ( result overlapped -- )
>c-ptr pending-overlapped get-global delete-at* drop resume-with ;
ERROR: seek-before-start n ;
: set-seek-ptr ( n handle -- )
- [ dup 0 < [ seek-before-start ] when ] dip (>>ptr) ;
+ [ dup 0 < [ seek-before-start ] when ] dip ptr<< ;
M: winnt tell-handle ( handle -- n ) ptr>> ;