125 lines
4.1 KiB
Factor
125 lines
4.1 KiB
Factor
! :folding=indent:collapseFolds=1:
|
|
|
|
! $Id$
|
|
!
|
|
! Copyright (C) 2004 Mackenzie Straight.
|
|
!
|
|
! Redistribution and use in source and binary forms, with or without
|
|
! modification, are permitted provided that the following conditions are met:
|
|
!
|
|
! 1. Redistributions of source code must retain the above copyright notice,
|
|
! this list of conditions and the following disclaimer.
|
|
!
|
|
! 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
! this list of conditions and the following disclaimer in the documentation
|
|
! and/or other materials provided with the distribution.
|
|
!
|
|
! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
IN: win32-api
|
|
USE: kernel
|
|
USE: alien
|
|
|
|
BEGIN-STRUCT: overlapped-ext
|
|
FIELD: int internal
|
|
FIELD: int internal-high
|
|
FIELD: int offset
|
|
FIELD: int offset-high
|
|
FIELD: void* event
|
|
FIELD: int user-data
|
|
END-STRUCT
|
|
|
|
: GENERIC_READ HEX: 80000000 ;
|
|
: GENERIC_WRITE HEX: 40000000 ;
|
|
: GENERIC_EXECUTE HEX: 20000000 ;
|
|
: GENERIC_ALL HEX: 10000000 ;
|
|
|
|
: CREATE_NEW 1 ;
|
|
: CREATE_ALWAYS 2 ;
|
|
: OPEN_EXISTING 3 ;
|
|
: OPEN_ALWAYS 4 ;
|
|
: TRUNCATE_EXISTING 5 ;
|
|
|
|
: FILE_SHARE_READ 1 ;
|
|
: FILE_SHARE_WRITE 2 ;
|
|
: FILE_SHARE_DELETE 4 ;
|
|
|
|
: FILE_FLAG_WRITE_THROUGH HEX: 80000000 ;
|
|
: FILE_FLAG_OVERLAPPED HEX: 40000000 ;
|
|
: FILE_FLAG_NO_BUFFERING HEX: 20000000 ;
|
|
: FILE_FLAG_RANDOM_ACCESS HEX: 10000000 ;
|
|
: FILE_FLAG_SEQUENTIAL_SCAN HEX: 08000000 ;
|
|
: FILE_FLAG_DELETE_ON_CLOSE HEX: 04000000 ;
|
|
: FILE_FLAG_BACKUP_SEMANTICS HEX: 02000000 ;
|
|
: FILE_FLAG_POSIX_SEMANTICS HEX: 01000000 ;
|
|
: FILE_FLAG_OPEN_REPARSE_POINT HEX: 00200000 ;
|
|
: FILE_FLAG_OPEN_NO_RECALL HEX: 00100000 ;
|
|
: FILE_FLAG_FIRST_PIPE_INSTANCE HEX: 00080000 ;
|
|
|
|
: STD_INPUT_HANDLE -10 ;
|
|
: STD_OUTPUT_HANDLE -11 ;
|
|
: STD_ERROR_HANDLE -12 ;
|
|
|
|
: INVALID_HANDLE_VALUE -1 <alien> ;
|
|
: INVALID_FILE_SIZE HEX: FFFFFFFF ;
|
|
|
|
: INFINITE HEX: FFFFFFFF ;
|
|
|
|
: GetStdHandle ( id -- handle )
|
|
"void*" "kernel32" "GetStdHandle" [ "int" ] alien-invoke ;
|
|
|
|
: GetFileSize ( handle out -- int )
|
|
"int" "kernel32" "GetFileSize" [ "void*" "void*" ] alien-invoke ;
|
|
|
|
: SetConsoleTextAttribute ( handle attrs -- ? )
|
|
"bool" "kernel32" "SetConsoleTextAttribute" [ "void*" "int" ]
|
|
alien-invoke ;
|
|
|
|
: GetConsoleTitle ( buf size -- len )
|
|
"int" "kernel32" "GetConsoleTitleA" [ "int" "int" ] alien-invoke ;
|
|
|
|
: SetConsoleTitle ( str -- ? )
|
|
"bool" "kernel32" "SetConsoleTitleA" [ "char*" ] alien-invoke ;
|
|
|
|
: ReadFile ( handle buffer len out-len overlapped -- ? )
|
|
"bool" "kernel32" "ReadFile"
|
|
[ "void*" "int" "int" "void*" "overlapped-ext*" ]
|
|
alien-invoke ;
|
|
|
|
: WriteFile ( handle buffer len out-len overlapped -- ? )
|
|
"bool" "kernel32" "WriteFile"
|
|
[ "void*" "int" "int" "void*" "overlapped-ext*" ]
|
|
alien-invoke ;
|
|
|
|
: CreateIoCompletionPort ( handle existing-port key numthreads -- )
|
|
"void*" "kernel32" "CreateIoCompletionPort"
|
|
[ "void*" "void*" "void*" "int" ]
|
|
alien-invoke ;
|
|
|
|
: GetQueuedCompletionStatus
|
|
( port out-len out-key out-overlapped timeout -- ? )
|
|
"bool" "kernel32" "GetQueuedCompletionStatus"
|
|
[ "void*" "void*" "void*" "void*" "int" ]
|
|
alien-invoke ;
|
|
|
|
: CreateFile ( name access sharemode security create flags template -- handle )
|
|
"void*" "kernel32" "CreateFileA"
|
|
[ "char*" "int" "int" "void*" "int" "int" "void*" ]
|
|
alien-invoke ;
|
|
|
|
: CloseHandle ( handle -- ? )
|
|
"bool" "kernel32" "CloseHandle" [ "void*" ] alien-invoke ;
|
|
|
|
: CancelIo ( handle -- )
|
|
"bool" "kernel32" "CancelIo" [ "void*" ] alien-invoke drop ;
|
|
|