! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: assocs debugger io kernel literals math.parser namespaces
-prettyprint sequences system windows.kernel32 ;
+USING: accessors assocs debugger io kernel literals math.parser
+namespaces prettyprint sequences system windows.kernel32
+windows.ole32 windows.errors math ;
IN: debugger.windows
CONSTANT: seh-names
M: windows signal-error.
"Windows exception 0x" write
third [ >hex write ] [ seh-name. ] bi nl ;
+
+M: ole32-error error.
+ "COM error 0x" write
+ dup code>> HEX: ffff,ffff bitand >hex write ": " write
+ message>> write ;
+
+M: windows-error error.
+ "Win32 error 0x" write
+ dup n>> HEX: ffff,ffff bitand >hex write ": " write
+ string>> write ;
+
USING: alien.data kernel locals math math.bitwise
windows.kernel32 sequences byte-arrays unicode.categories
io.encodings.string io.encodings.utf16n alien.strings
-arrays literals windows.types specialized-arrays ;
+arrays literals windows.types specialized-arrays
+math.parser ;
SPECIALIZED-ARRAY: TCHAR
IN: windows.errors
: make-lang-id ( lang1 lang2 -- n )
10 shift bitor ; inline
-ERROR: error-message-failed id ;
:: n>win32-error-string ( id -- string )
flags{
FORMAT_MESSAGE_FROM_SYSTEM
id
LANG_NEUTRAL SUBLANG_DEFAULT make-lang-id
32768 [ TCHAR <c-array> ] [ ] bi
- f pick [ FormatMessage 0 = [ id error-message-failed ] when ] dip
- utf16n alien>string [ blank? ] trim ;
+ f pick [ FormatMessage ] dip
+ swap zero?
+ [ drop "Unknown error 0x" id HEX: ffff,ffff bitand >hex append ]
+ [ utf16n alien>string [ blank? ] trim ] if ;
: win32-error-string ( -- str )
GetLastError n>win32-error-string ;